diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index c3e9d2109c..d6ea2ea2cd 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -94,7 +94,7 @@ jobs:
- thumbv7em-none-eabihf
# macOS targets
- #- x86_64-apple-darwin
+ - x86_64-apple-darwin
- aarch64-apple-darwin
# FIXME: gh-actions build environment doesn't have linker support
# - i686-apple-darwin
@@ -103,8 +103,7 @@ jobs:
- x86_64-pc-windows-msvc
- i686-pc-windows-msvc
- aarch64-pc-windows-msvc
- # FIXME: Disassembly not implemented for the # following targets:
- # - x86_64-pc-windows-gnu:
+ - x86_64-pc-windows-gnu
# - i686-pc-windows-gnu:
include:
@@ -147,7 +146,7 @@ jobs:
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
- target: x86_64-apple-darwin
- os: macos-11
+ os: macos-13
- target: x86_64-pc-windows-msvc
os: windows-latest
- target: i686-pc-windows-msvc
@@ -155,6 +154,8 @@ jobs:
- target: aarch64-pc-windows-msvc
os: windows-latest
norun: true
+ - target: x86_64-pc-windows-gnu
+ os: windows-latest
- target: i586-unknown-linux-gnu
os: ubuntu-latest
- target: nvptx64-nvidia-cuda
@@ -174,21 +175,11 @@ jobs:
- uses: actions/checkout@v4
with:
submodules: recursive
- - name: Install Rust (rustup)
- run: |
- rustup update nightly --no-self-update
- rustup default nightly
- if: matrix.os != 'macos-latest'
- - name: Install Rust (macos)
+ - name: Install Rust
run: |
- curl https://sh.rustup.rs | sh -s -- -y --default-toolchain nightly
- echo "$HOME/.cargo/bin" >> $GITHUB_PATH
rustup update nightly --no-self-update
rustup default nightly
- if: matrix.os == 'macos-latest'
- - run: |
- rustup default nightly
- rustup target add ${{ matrix.target }}
+ - run: rustup target add ${{ matrix.target }}
if: "!endsWith(matrix.target, 'emulated')"
- name: Setup (aarch64-apple-darwin)
run: |
diff --git a/ci/docker/aarch64-unknown-linux-gnu/Dockerfile b/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
index 8f4aba45c3..7f09ca053a 100644
--- a/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:22.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
g++ \
diff --git a/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile b/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
index 757b79e7ec..2e5a18b546 100644
--- a/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
+++ b/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:18.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
ca-certificates \
diff --git a/ci/docker/i586-unknown-linux-gnu/Dockerfile b/ci/docker/i586-unknown-linux-gnu/Dockerfile
index 0e4d1c6eb4..a865305707 100644
--- a/ci/docker/i586-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/i586-unknown-linux-gnu/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:20.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc-multilib \
libc6-dev \
diff --git a/ci/docker/i686-unknown-linux-gnu/Dockerfile b/ci/docker/i686-unknown-linux-gnu/Dockerfile
index 0e4d1c6eb4..a865305707 100644
--- a/ci/docker/i686-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/i686-unknown-linux-gnu/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:20.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc-multilib \
libc6-dev \
diff --git a/ci/docker/mips-unknown-linux-gnu/Dockerfile b/ci/docker/mips-unknown-linux-gnu/Dockerfile
index 3bd471e87d..db0bc86348 100644
--- a/ci/docker/mips-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/mips-unknown-linux-gnu/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:18.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev qemu-user ca-certificates \
diff --git a/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile b/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
index f26f1f38eb..4fa2671ba5 100644
--- a/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
+++ b/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:18.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev qemu-user ca-certificates \
diff --git a/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile b/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
index 7d9f0bd992..f35d7ed2b6 100644
--- a/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
+++ b/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:18.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev qemu-user ca-certificates \
diff --git a/ci/docker/mipsel-unknown-linux-musl/Dockerfile b/ci/docker/mipsel-unknown-linux-musl/Dockerfile
index 5d19d7c93d..e5540f28f8 100644
--- a/ci/docker/mipsel-unknown-linux-musl/Dockerfile
+++ b/ci/docker/mipsel-unknown-linux-musl/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:18.04
+FROM ubuntu:24.04
RUN apt-get update && \
apt-get install -y --no-install-recommends \
diff --git a/ci/docker/nvptx64-nvidia-cuda/Dockerfile b/ci/docker/nvptx64-nvidia-cuda/Dockerfile
index 864d72e628..574fca6903 100644
--- a/ci/docker/nvptx64-nvidia-cuda/Dockerfile
+++ b/ci/docker/nvptx64-nvidia-cuda/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:18.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
libc6-dev \
diff --git a/ci/docker/powerpc-unknown-linux-gnu/Dockerfile b/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
index 877468e5d4..05eb093893 100644
--- a/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:18.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev qemu-user ca-certificates \
diff --git a/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile b/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
index c030e6818a..a9de944b0c 100644
--- a/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:18.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev qemu-user ca-certificates \
diff --git a/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile b/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
index df611b47ca..66e7fd3b77 100644
--- a/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:18.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev qemu-user ca-certificates \
diff --git a/ci/docker/riscv64gc-unknown-linux-gnu/Dockerfile b/ci/docker/riscv64gc-unknown-linux-gnu/Dockerfile
index af26b26822..eb22bd11a5 100644
--- a/ci/docker/riscv64gc-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/riscv64gc-unknown-linux-gnu/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:23.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev qemu-user ca-certificates \
diff --git a/ci/docker/s390x-unknown-linux-gnu/Dockerfile b/ci/docker/s390x-unknown-linux-gnu/Dockerfile
index 6579692345..e40adbb4a8 100644
--- a/ci/docker/s390x-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/s390x-unknown-linux-gnu/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:18.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
curl ca-certificates \
diff --git a/ci/docker/wasm32-wasip1/Dockerfile b/ci/docker/wasm32-wasip1/Dockerfile
index f92539b302..109c41c01d 100644
--- a/ci/docker/wasm32-wasip1/Dockerfile
+++ b/ci/docker/wasm32-wasip1/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:20.04
+FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update -y && apt-get install -y --no-install-recommends \
diff --git a/ci/docker/x86_64-unknown-linux-gnu/Dockerfile b/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
index dc4c4e5989..8d478d6d8d 100644
--- a/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
+++ b/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:20.04
+FROM ubuntu:24.04
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
libc6-dev \
diff --git a/crates/core_arch/missing-x86.md b/crates/core_arch/missing-x86.md
new file mode 100644
index 0000000000..8da6074cac
--- /dev/null
+++ b/crates/core_arch/missing-x86.md
@@ -0,0 +1,1571 @@
+
+["AMX-BF16"]
+
+ * [ ] [`__tile_dpbf16ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_dpbf16ps)
+ * [ ] [`_tile_dpbf16ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_dpbf16ps)
+
+
+
+["AMX-COMPLEX"]
+
+ * [ ] [`__tile_cmmimfp16ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_cmmimfp16ps)
+ * [ ] [`__tile_cmmrlfp16ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_cmmrlfp16ps)
+ * [ ] [`_tile_cmmimfp16ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_cmmimfp16ps)
+ * [ ] [`_tile_cmmrlfp16ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_cmmrlfp16ps)
+
+
+
+["AMX-FP16"]
+
+ * [ ] [`__tile_dpfp16ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_dpfp16ps)
+ * [ ] [`_tile_dpfp16ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_dpfp16ps)
+
+
+
+["AMX-INT8"]
+
+ * [ ] [`__tile_dpbssd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_dpbssd)
+ * [ ] [`__tile_dpbsud`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_dpbsud)
+ * [ ] [`__tile_dpbusd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_dpbusd)
+ * [ ] [`__tile_dpbuud`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_dpbuud)
+ * [ ] [`_tile_dpbssd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_dpbssd)
+ * [ ] [`_tile_dpbsud`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_dpbsud)
+ * [ ] [`_tile_dpbusd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_dpbusd)
+ * [ ] [`_tile_dpbuud`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_dpbuud)
+
+
+
+["AMX-TILE"]
+
+ * [ ] [`__tile_loadd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_loadd)
+ * [ ] [`__tile_stored`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_stored)
+ * [ ] [`__tile_stream_loadd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_stream_loadd)
+ * [ ] [`__tile_zero`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=__tile_zero)
+ * [ ] [`_tile_loadconfig`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_loadconfig)
+ * [ ] [`_tile_loadd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_loadd)
+ * [ ] [`_tile_release`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_release)
+ * [ ] [`_tile_storeconfig`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_storeconfig)
+ * [ ] [`_tile_stored`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_stored)
+ * [ ] [`_tile_stream_loadd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_stream_loadd)
+ * [ ] [`_tile_zero`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tile_zero)
+
+
+
+["AVX512BW"]
+
+ * [ ] [`_cvtmask32_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_cvtmask32_u32)
+ * [ ] [`_cvtmask64_u64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_cvtmask64_u64)
+ * [ ] [`_cvtu32_mask32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_cvtu32_mask32)
+ * [ ] [`_cvtu64_mask64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_cvtu64_mask64)
+ * [ ] [`_kortest_mask32_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kortest_mask32_u8)
+ * [ ] [`_kortest_mask64_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kortest_mask64_u8)
+ * [ ] [`_kortestc_mask32_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kortestc_mask32_u8)
+ * [ ] [`_kortestc_mask64_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kortestc_mask64_u8)
+ * [ ] [`_kortestz_mask32_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kortestz_mask32_u8)
+ * [ ] [`_kortestz_mask64_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kortestz_mask64_u8)
+ * [ ] [`_kshiftli_mask32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kshiftli_mask32)
+ * [ ] [`_kshiftli_mask64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kshiftli_mask64)
+ * [ ] [`_kshiftri_mask32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kshiftri_mask32)
+ * [ ] [`_kshiftri_mask64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kshiftri_mask64)
+ * [ ] [`_ktest_mask32_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_ktest_mask32_u8)
+ * [ ] [`_ktest_mask64_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_ktest_mask64_u8)
+ * [ ] [`_ktestc_mask32_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_ktestc_mask32_u8)
+ * [ ] [`_ktestc_mask64_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_ktestc_mask64_u8)
+ * [ ] [`_ktestz_mask32_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_ktestz_mask32_u8)
+ * [ ] [`_ktestz_mask64_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_ktestz_mask64_u8)
+ * [ ] [`_mm512_kunpackd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_kunpackd)
+ * [ ] [`_mm512_kunpackw`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_kunpackw)
+
+
+
+["AVX512BW", "AVX512VL"]
+
+ * [ ] [`_mm256_mask_reduce_add_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_add_epi16)
+ * [ ] [`_mm256_mask_reduce_add_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_add_epi8)
+ * [ ] [`_mm256_mask_reduce_and_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_and_epi16)
+ * [ ] [`_mm256_mask_reduce_and_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_and_epi8)
+ * [ ] [`_mm256_mask_reduce_max_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_max_epi16)
+ * [ ] [`_mm256_mask_reduce_max_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_max_epi8)
+ * [ ] [`_mm256_mask_reduce_max_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_max_epu16)
+ * [ ] [`_mm256_mask_reduce_max_epu8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_max_epu8)
+ * [ ] [`_mm256_mask_reduce_min_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_min_epi16)
+ * [ ] [`_mm256_mask_reduce_min_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_min_epi8)
+ * [ ] [`_mm256_mask_reduce_min_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_min_epu16)
+ * [ ] [`_mm256_mask_reduce_min_epu8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_min_epu8)
+ * [ ] [`_mm256_mask_reduce_mul_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_mul_epi16)
+ * [ ] [`_mm256_mask_reduce_mul_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_mul_epi8)
+ * [ ] [`_mm256_mask_reduce_or_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_or_epi16)
+ * [ ] [`_mm256_mask_reduce_or_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_or_epi8)
+ * [ ] [`_mm256_reduce_add_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_add_epi16)
+ * [ ] [`_mm256_reduce_add_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_add_epi8)
+ * [ ] [`_mm256_reduce_and_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_and_epi16)
+ * [ ] [`_mm256_reduce_and_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_and_epi8)
+ * [ ] [`_mm256_reduce_max_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_max_epi16)
+ * [ ] [`_mm256_reduce_max_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_max_epi8)
+ * [ ] [`_mm256_reduce_max_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_max_epu16)
+ * [ ] [`_mm256_reduce_max_epu8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_max_epu8)
+ * [ ] [`_mm256_reduce_min_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_min_epi16)
+ * [ ] [`_mm256_reduce_min_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_min_epi8)
+ * [ ] [`_mm256_reduce_min_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_min_epu16)
+ * [ ] [`_mm256_reduce_min_epu8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_min_epu8)
+ * [ ] [`_mm256_reduce_mul_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_mul_epi16)
+ * [ ] [`_mm256_reduce_mul_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_mul_epi8)
+ * [ ] [`_mm256_reduce_or_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_or_epi16)
+ * [ ] [`_mm256_reduce_or_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_or_epi8)
+ * [ ] [`_mm_mask_reduce_add_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_add_epi16)
+ * [ ] [`_mm_mask_reduce_add_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_add_epi8)
+ * [ ] [`_mm_mask_reduce_and_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_and_epi16)
+ * [ ] [`_mm_mask_reduce_and_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_and_epi8)
+ * [ ] [`_mm_mask_reduce_max_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_max_epi16)
+ * [ ] [`_mm_mask_reduce_max_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_max_epi8)
+ * [ ] [`_mm_mask_reduce_max_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_max_epu16)
+ * [ ] [`_mm_mask_reduce_max_epu8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_max_epu8)
+ * [ ] [`_mm_mask_reduce_min_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_min_epi16)
+ * [ ] [`_mm_mask_reduce_min_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_min_epi8)
+ * [ ] [`_mm_mask_reduce_min_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_min_epu16)
+ * [ ] [`_mm_mask_reduce_min_epu8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_min_epu8)
+ * [ ] [`_mm_mask_reduce_mul_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_mul_epi16)
+ * [ ] [`_mm_mask_reduce_mul_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_mul_epi8)
+ * [ ] [`_mm_mask_reduce_or_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_or_epi16)
+ * [ ] [`_mm_mask_reduce_or_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_or_epi8)
+ * [ ] [`_mm_reduce_add_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_add_epi16)
+ * [ ] [`_mm_reduce_add_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_add_epi8)
+ * [ ] [`_mm_reduce_and_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_and_epi16)
+ * [ ] [`_mm_reduce_and_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_and_epi8)
+ * [ ] [`_mm_reduce_max_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_max_epi16)
+ * [ ] [`_mm_reduce_max_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_max_epi8)
+ * [ ] [`_mm_reduce_max_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_max_epu16)
+ * [ ] [`_mm_reduce_max_epu8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_max_epu8)
+ * [ ] [`_mm_reduce_min_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_min_epi16)
+ * [ ] [`_mm_reduce_min_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_min_epi8)
+ * [ ] [`_mm_reduce_min_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_min_epu16)
+ * [ ] [`_mm_reduce_min_epu8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_min_epu8)
+ * [ ] [`_mm_reduce_mul_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_mul_epi16)
+ * [ ] [`_mm_reduce_mul_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_mul_epi8)
+ * [ ] [`_mm_reduce_or_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_or_epi16)
+ * [ ] [`_mm_reduce_or_epi8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_or_epi8)
+
+
+
+["AVX512F"]
+
+ * [ ] [`_cvtmask16_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_cvtmask16_u32)
+ * [ ] [`_cvtu32_mask16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_cvtu32_mask16)
+ * [ ] [`_kortest_mask16_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kortest_mask16_u8)
+ * [ ] [`_kortestc_mask16_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kortestc_mask16_u8)
+ * [ ] [`_kortestz_mask16_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kortestz_mask16_u8)
+ * [ ] [`_kshiftli_mask16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kshiftli_mask16)
+ * [ ] [`_kshiftri_mask16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_kshiftri_mask16)
+ * [ ] [`_load_mask16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_load_mask16)
+ * [ ] [`_mm512_cvtsd_f64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtsd_f64)
+ * [ ] [`_mm512_cvtss_f32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtss_f32)
+ * [ ] [`_mm512_i32logather_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_i32logather_epi64)
+ * [ ] [`_mm512_i32logather_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_i32logather_pd)
+ * [ ] [`_mm512_i32loscatter_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_i32loscatter_epi64)
+ * [ ] [`_mm512_i32loscatter_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_i32loscatter_pd)
+ * [ ] [`_mm512_kortestz`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_kortestz)
+ * [ ] [`_mm512_mask_i32logather_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_i32logather_epi64)
+ * [ ] [`_mm512_mask_i32logather_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_i32logather_pd)
+ * [ ] [`_mm512_mask_i32loscatter_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_i32loscatter_epi64)
+ * [ ] [`_mm512_mask_i32loscatter_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_i32loscatter_pd)
+ * [ ] [`_mm512_stream_load_si512`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_stream_load_si512)
+ * [ ] [`_mm_mask_load_sd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_load_sd)
+ * [ ] [`_mm_mask_load_ss`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_load_ss)
+ * [ ] [`_mm_mask_store_sd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_store_sd)
+ * [ ] [`_mm_mask_store_ss`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_store_ss)
+ * [ ] [`_mm_maskz_load_sd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_load_sd)
+ * [ ] [`_mm_maskz_load_ss`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_load_ss)
+ * [ ] [`_store_mask16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_store_mask16)
+
+
+
+["AVX512F", "AVX512VL"]
+
+ * [ ] [`_mm256_i32scatter_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_i32scatter_epi32)
+ * [ ] [`_mm256_i32scatter_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_i32scatter_pd)
+ * [ ] [`_mm256_i32scatter_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_i32scatter_ps)
+ * [ ] [`_mm256_i64scatter_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_i64scatter_epi32)
+ * [ ] [`_mm256_i64scatter_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_i64scatter_epi64)
+ * [ ] [`_mm256_i64scatter_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_i64scatter_pd)
+ * [ ] [`_mm256_i64scatter_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_i64scatter_ps)
+ * [ ] [`_mm256_mask_i32scatter_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_i32scatter_epi32)
+ * [ ] [`_mm256_mask_i32scatter_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_i32scatter_epi64)
+ * [ ] [`_mm256_mask_i32scatter_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_i32scatter_pd)
+ * [ ] [`_mm256_mask_i32scatter_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_i32scatter_ps)
+ * [ ] [`_mm256_mask_i64scatter_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_i64scatter_epi32)
+ * [ ] [`_mm256_mask_i64scatter_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_i64scatter_epi64)
+ * [ ] [`_mm256_mask_i64scatter_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_i64scatter_pd)
+ * [ ] [`_mm256_mask_i64scatter_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_i64scatter_ps)
+ * [ ] [`_mm256_mmask_i32gather_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mmask_i32gather_epi32)
+ * [ ] [`_mm256_mmask_i32gather_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mmask_i32gather_epi64)
+ * [ ] [`_mm256_mmask_i32gather_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mmask_i32gather_pd)
+ * [ ] [`_mm256_mmask_i32gather_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mmask_i32gather_ps)
+ * [ ] [`_mm256_mmask_i64gather_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mmask_i64gather_epi32)
+ * [ ] [`_mm256_mmask_i64gather_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mmask_i64gather_epi64)
+ * [ ] [`_mm256_mmask_i64gather_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mmask_i64gather_pd)
+ * [ ] [`_mm256_mmask_i64gather_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mmask_i64gather_ps)
+ * [ ] [`_mm256_rsqrt14_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_rsqrt14_pd)
+ * [ ] [`_mm256_rsqrt14_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_rsqrt14_ps)
+ * [ ] [`_mm_abs_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_epi64)
+ * [ ] [`_mm_i32scatter_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_i32scatter_epi32)
+ * [ ] [`_mm_i32scatter_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_i32scatter_epi64)
+ * [ ] [`_mm_i32scatter_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_i32scatter_pd)
+ * [ ] [`_mm_i32scatter_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_i32scatter_ps)
+ * [ ] [`_mm_i64scatter_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_i64scatter_epi32)
+ * [ ] [`_mm_i64scatter_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_i64scatter_epi64)
+ * [ ] [`_mm_i64scatter_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_i64scatter_pd)
+ * [ ] [`_mm_i64scatter_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_i64scatter_ps)
+ * [ ] [`_mm_mask_abs_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_abs_epi64)
+ * [ ] [`_mm_mask_i32scatter_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_i32scatter_epi32)
+ * [ ] [`_mm_mask_i32scatter_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_i32scatter_epi64)
+ * [ ] [`_mm_mask_i32scatter_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_i32scatter_pd)
+ * [ ] [`_mm_mask_i32scatter_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_i32scatter_ps)
+ * [ ] [`_mm_mask_i64scatter_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_i64scatter_epi32)
+ * [ ] [`_mm_mask_i64scatter_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_i64scatter_epi64)
+ * [ ] [`_mm_mask_i64scatter_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_i64scatter_pd)
+ * [ ] [`_mm_mask_i64scatter_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_i64scatter_ps)
+ * [ ] [`_mm_mask_min_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_min_epi64)
+ * [ ] [`_mm_maskz_abs_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_abs_epi64)
+ * [ ] [`_mm_maskz_min_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_min_epi64)
+ * [ ] [`_mm_min_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_epi64)
+ * [ ] [`_mm_mmask_i32gather_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mmask_i32gather_epi32)
+ * [ ] [`_mm_mmask_i32gather_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mmask_i32gather_epi64)
+ * [ ] [`_mm_mmask_i32gather_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mmask_i32gather_pd)
+ * [ ] [`_mm_mmask_i32gather_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mmask_i32gather_ps)
+ * [ ] [`_mm_mmask_i64gather_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mmask_i64gather_epi32)
+ * [ ] [`_mm_mmask_i64gather_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mmask_i64gather_epi64)
+ * [ ] [`_mm_mmask_i64gather_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mmask_i64gather_pd)
+ * [ ] [`_mm_mmask_i64gather_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mmask_i64gather_ps)
+ * [ ] [`_mm_rsqrt14_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rsqrt14_pd)
+ * [ ] [`_mm_rsqrt14_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rsqrt14_ps)
+
+
+
+["AVX512IFMA52"]
+
+ * [ ] [`_mm512_mask_madd52hi_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_madd52hi_epu64)
+ * [ ] [`_mm512_mask_madd52lo_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_madd52lo_epu64)
+ * [ ] [`_mm512_maskz_madd52hi_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_madd52hi_epu64)
+ * [ ] [`_mm512_maskz_madd52lo_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_madd52lo_epu64)
+
+
+
+["AVX512IFMA52", "AVX512VL"]
+
+ * [ ] [`_mm256_mask_madd52hi_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_madd52hi_epu64)
+ * [ ] [`_mm256_mask_madd52lo_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_madd52lo_epu64)
+ * [ ] [`_mm256_maskz_madd52hi_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_madd52hi_epu64)
+ * [ ] [`_mm256_maskz_madd52lo_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_madd52lo_epu64)
+ * [ ] [`_mm_mask_madd52hi_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_madd52hi_epu64)
+ * [ ] [`_mm_mask_madd52lo_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_madd52lo_epu64)
+ * [ ] [`_mm_maskz_madd52hi_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_madd52hi_epu64)
+ * [ ] [`_mm_maskz_madd52lo_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_madd52lo_epu64)
+
+
+
+["AVX512_BF16", "AVX512F"]
+
+ * [ ] [`_mm512_cvtpbh_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtpbh_ps)
+ * [ ] [`_mm512_mask_cvtpbh_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtpbh_ps)
+ * [ ] [`_mm512_maskz_cvtpbh_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtpbh_ps)
+ * [ ] [`_mm_cvtsbh_ss`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsbh_ss)
+
+
+
+["AVX512_BF16", "AVX512VL"]
+
+ * [ ] [`_mm256_cvtpbh_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtpbh_ps)
+ * [ ] [`_mm256_mask_cvtpbh_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtpbh_ps)
+ * [ ] [`_mm256_maskz_cvtpbh_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtpbh_ps)
+ * [ ] [`_mm_cvtneps_pbh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtneps_pbh)
+ * [ ] [`_mm_cvtness_sbh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtness_sbh)
+ * [ ] [`_mm_cvtpbh_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpbh_ps)
+ * [ ] [`_mm_mask_cvtneps_pbh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtneps_pbh)
+ * [ ] [`_mm_mask_cvtpbh_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtpbh_ps)
+ * [ ] [`_mm_maskz_cvtneps_pbh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtneps_pbh)
+ * [ ] [`_mm_maskz_cvtpbh_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtpbh_ps)
+
+
+
+["AVX512_FP16"]
+
+ * [ ] [`_mm256_castpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_castpd_ph)
+ * [ ] [`_mm256_castph128_ph256`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_castph128_ph256)
+ * [ ] [`_mm256_castph256_ph128`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_castph256_ph128)
+ * [ ] [`_mm256_castph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_castph_pd)
+ * [ ] [`_mm256_castph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_castph_ps)
+ * [ ] [`_mm256_castph_si256`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_castph_si256)
+ * [ ] [`_mm256_castps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_castps_ph)
+ * [ ] [`_mm256_castsi256_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_castsi256_ph)
+ * [ ] [`_mm256_cvtsh_h`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtsh_h)
+ * [ ] [`_mm256_set1_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_set1_pch)
+ * [ ] [`_mm256_set1_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_set1_ph)
+ * [ ] [`_mm256_set_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_set_ph)
+ * [ ] [`_mm256_setr_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_setr_ph)
+ * [ ] [`_mm256_zextph128_ph256`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_zextph128_ph256)
+ * [ ] [`_mm512_abs_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_abs_ph)
+ * [ ] [`_mm512_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_add_ph)
+ * [ ] [`_mm512_add_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_add_round_ph)
+ * [ ] [`_mm512_castpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_castpd_ph)
+ * [ ] [`_mm512_castph128_ph512`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_castph128_ph512)
+ * [ ] [`_mm512_castph256_ph512`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_castph256_ph512)
+ * [ ] [`_mm512_castph512_ph128`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_castph512_ph128)
+ * [ ] [`_mm512_castph512_ph256`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_castph512_ph256)
+ * [ ] [`_mm512_castph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_castph_pd)
+ * [ ] [`_mm512_castph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_castph_ps)
+ * [ ] [`_mm512_castph_si512`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_castph_si512)
+ * [ ] [`_mm512_castps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_castps_ph)
+ * [ ] [`_mm512_castsi512_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_castsi512_ph)
+ * [ ] [`_mm512_cmp_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cmp_ph_mask)
+ * [ ] [`_mm512_cmp_round_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cmp_round_ph_mask)
+ * [ ] [`_mm512_cmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cmul_pch)
+ * [ ] [`_mm512_cmul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cmul_round_pch)
+ * [ ] [`_mm512_conj_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_conj_pch)
+ * [ ] [`_mm512_cvt_roundepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundepi16_ph)
+ * [ ] [`_mm512_cvt_roundepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundepi32_ph)
+ * [ ] [`_mm512_cvt_roundepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundepi64_ph)
+ * [ ] [`_mm512_cvt_roundepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundepu16_ph)
+ * [ ] [`_mm512_cvt_roundepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundepu32_ph)
+ * [ ] [`_mm512_cvt_roundepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundepu64_ph)
+ * [ ] [`_mm512_cvt_roundpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundpd_ph)
+ * [ ] [`_mm512_cvt_roundph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundph_epi16)
+ * [ ] [`_mm512_cvt_roundph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundph_epi32)
+ * [ ] [`_mm512_cvt_roundph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundph_epi64)
+ * [ ] [`_mm512_cvt_roundph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundph_epu16)
+ * [ ] [`_mm512_cvt_roundph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundph_epu32)
+ * [ ] [`_mm512_cvt_roundph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundph_epu64)
+ * [ ] [`_mm512_cvt_roundph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvt_roundph_pd)
+ * [ ] [`_mm512_cvtepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtepi16_ph)
+ * [ ] [`_mm512_cvtepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtepi32_ph)
+ * [ ] [`_mm512_cvtepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtepi64_ph)
+ * [ ] [`_mm512_cvtepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtepu16_ph)
+ * [ ] [`_mm512_cvtepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtepu32_ph)
+ * [ ] [`_mm512_cvtepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtepu64_ph)
+ * [ ] [`_mm512_cvtpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtpd_ph)
+ * [ ] [`_mm512_cvtph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtph_epi16)
+ * [ ] [`_mm512_cvtph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtph_epi32)
+ * [ ] [`_mm512_cvtph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtph_epi64)
+ * [ ] [`_mm512_cvtph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtph_epu16)
+ * [ ] [`_mm512_cvtph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtph_epu32)
+ * [ ] [`_mm512_cvtph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtph_epu64)
+ * [ ] [`_mm512_cvtph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtph_pd)
+ * [ ] [`_mm512_cvtsh_h`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtsh_h)
+ * [ ] [`_mm512_cvtt_roundph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtt_roundph_epi16)
+ * [ ] [`_mm512_cvtt_roundph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtt_roundph_epi32)
+ * [ ] [`_mm512_cvtt_roundph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtt_roundph_epi64)
+ * [ ] [`_mm512_cvtt_roundph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtt_roundph_epu16)
+ * [ ] [`_mm512_cvtt_roundph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtt_roundph_epu32)
+ * [ ] [`_mm512_cvtt_roundph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtt_roundph_epu64)
+ * [ ] [`_mm512_cvttph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvttph_epi16)
+ * [ ] [`_mm512_cvttph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvttph_epi32)
+ * [ ] [`_mm512_cvttph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvttph_epi64)
+ * [ ] [`_mm512_cvttph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvttph_epu16)
+ * [ ] [`_mm512_cvttph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvttph_epu32)
+ * [ ] [`_mm512_cvttph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvttph_epu64)
+ * [ ] [`_mm512_cvtx_roundph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtx_roundph_ps)
+ * [ ] [`_mm512_cvtx_roundps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtx_roundps_ph)
+ * [ ] [`_mm512_cvtxph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtxph_ps)
+ * [ ] [`_mm512_cvtxps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_cvtxps_ph)
+ * [ ] [`_mm512_div_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_div_ph)
+ * [ ] [`_mm512_div_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_div_round_ph)
+ * [ ] [`_mm512_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fcmadd_pch)
+ * [ ] [`_mm512_fcmadd_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fcmadd_round_pch)
+ * [ ] [`_mm512_fcmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fcmul_pch)
+ * [ ] [`_mm512_fcmul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fcmul_round_pch)
+ * [ ] [`_mm512_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmadd_pch)
+ * [ ] [`_mm512_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmadd_ph)
+ * [ ] [`_mm512_fmadd_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmadd_round_pch)
+ * [ ] [`_mm512_fmadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmadd_round_ph)
+ * [ ] [`_mm512_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmaddsub_ph)
+ * [ ] [`_mm512_fmaddsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmaddsub_round_ph)
+ * [ ] [`_mm512_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmsub_ph)
+ * [ ] [`_mm512_fmsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmsub_round_ph)
+ * [ ] [`_mm512_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmsubadd_ph)
+ * [ ] [`_mm512_fmsubadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmsubadd_round_ph)
+ * [ ] [`_mm512_fmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmul_pch)
+ * [ ] [`_mm512_fmul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fmul_round_pch)
+ * [ ] [`_mm512_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fnmadd_ph)
+ * [ ] [`_mm512_fnmadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fnmadd_round_ph)
+ * [ ] [`_mm512_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fnmsub_ph)
+ * [ ] [`_mm512_fnmsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fnmsub_round_ph)
+ * [ ] [`_mm512_fpclass_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_fpclass_ph_mask)
+ * [ ] [`_mm512_getexp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_getexp_ph)
+ * [ ] [`_mm512_getexp_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_getexp_round_ph)
+ * [ ] [`_mm512_getmant_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_getmant_ph)
+ * [ ] [`_mm512_getmant_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_getmant_round_ph)
+ * [ ] [`_mm512_load_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_load_ph)
+ * [ ] [`_mm512_loadu_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_loadu_ph)
+ * [ ] [`_mm512_mask3_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fcmadd_pch)
+ * [ ] [`_mm512_mask3_fcmadd_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fcmadd_round_pch)
+ * [ ] [`_mm512_mask3_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fmadd_pch)
+ * [ ] [`_mm512_mask3_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fmadd_ph)
+ * [ ] [`_mm512_mask3_fmadd_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fmadd_round_pch)
+ * [ ] [`_mm512_mask3_fmadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fmadd_round_ph)
+ * [ ] [`_mm512_mask3_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fmaddsub_ph)
+ * [ ] [`_mm512_mask3_fmaddsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fmaddsub_round_ph)
+ * [ ] [`_mm512_mask3_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fmsub_ph)
+ * [ ] [`_mm512_mask3_fmsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fmsub_round_ph)
+ * [ ] [`_mm512_mask3_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fmsubadd_ph)
+ * [ ] [`_mm512_mask3_fmsubadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fmsubadd_round_ph)
+ * [ ] [`_mm512_mask3_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fnmadd_ph)
+ * [ ] [`_mm512_mask3_fnmadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fnmadd_round_ph)
+ * [ ] [`_mm512_mask3_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fnmsub_ph)
+ * [ ] [`_mm512_mask3_fnmsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask3_fnmsub_round_ph)
+ * [ ] [`_mm512_mask_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_add_ph)
+ * [ ] [`_mm512_mask_add_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_add_round_ph)
+ * [ ] [`_mm512_mask_blend_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_blend_ph)
+ * [ ] [`_mm512_mask_cmp_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cmp_ph_mask)
+ * [ ] [`_mm512_mask_cmp_round_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cmp_round_ph_mask)
+ * [ ] [`_mm512_mask_cmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cmul_pch)
+ * [ ] [`_mm512_mask_cmul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cmul_round_pch)
+ * [ ] [`_mm512_mask_conj_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_conj_pch)
+ * [ ] [`_mm512_mask_cvt_roundepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundepi16_ph)
+ * [ ] [`_mm512_mask_cvt_roundepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundepi32_ph)
+ * [ ] [`_mm512_mask_cvt_roundepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundepi64_ph)
+ * [ ] [`_mm512_mask_cvt_roundepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundepu16_ph)
+ * [ ] [`_mm512_mask_cvt_roundepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundepu32_ph)
+ * [ ] [`_mm512_mask_cvt_roundepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundepu64_ph)
+ * [ ] [`_mm512_mask_cvt_roundpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundpd_ph)
+ * [ ] [`_mm512_mask_cvt_roundph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundph_epi16)
+ * [ ] [`_mm512_mask_cvt_roundph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundph_epi32)
+ * [ ] [`_mm512_mask_cvt_roundph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundph_epi64)
+ * [ ] [`_mm512_mask_cvt_roundph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundph_epu16)
+ * [ ] [`_mm512_mask_cvt_roundph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundph_epu32)
+ * [ ] [`_mm512_mask_cvt_roundph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundph_epu64)
+ * [ ] [`_mm512_mask_cvt_roundph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvt_roundph_pd)
+ * [ ] [`_mm512_mask_cvtepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtepi16_ph)
+ * [ ] [`_mm512_mask_cvtepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtepi32_ph)
+ * [ ] [`_mm512_mask_cvtepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtepi64_ph)
+ * [ ] [`_mm512_mask_cvtepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtepu16_ph)
+ * [ ] [`_mm512_mask_cvtepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtepu32_ph)
+ * [ ] [`_mm512_mask_cvtepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtepu64_ph)
+ * [ ] [`_mm512_mask_cvtpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtpd_ph)
+ * [ ] [`_mm512_mask_cvtph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtph_epi16)
+ * [ ] [`_mm512_mask_cvtph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtph_epi32)
+ * [ ] [`_mm512_mask_cvtph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtph_epi64)
+ * [ ] [`_mm512_mask_cvtph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtph_epu16)
+ * [ ] [`_mm512_mask_cvtph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtph_epu32)
+ * [ ] [`_mm512_mask_cvtph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtph_epu64)
+ * [ ] [`_mm512_mask_cvtph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtph_pd)
+ * [ ] [`_mm512_mask_cvtt_roundph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtt_roundph_epi16)
+ * [ ] [`_mm512_mask_cvtt_roundph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtt_roundph_epi32)
+ * [ ] [`_mm512_mask_cvtt_roundph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtt_roundph_epi64)
+ * [ ] [`_mm512_mask_cvtt_roundph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtt_roundph_epu16)
+ * [ ] [`_mm512_mask_cvtt_roundph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtt_roundph_epu32)
+ * [ ] [`_mm512_mask_cvtt_roundph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtt_roundph_epu64)
+ * [ ] [`_mm512_mask_cvttph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvttph_epi16)
+ * [ ] [`_mm512_mask_cvttph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvttph_epi32)
+ * [ ] [`_mm512_mask_cvttph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvttph_epi64)
+ * [ ] [`_mm512_mask_cvttph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvttph_epu16)
+ * [ ] [`_mm512_mask_cvttph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvttph_epu32)
+ * [ ] [`_mm512_mask_cvttph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvttph_epu64)
+ * [ ] [`_mm512_mask_cvtx_roundph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtx_roundph_ps)
+ * [ ] [`_mm512_mask_cvtx_roundps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtx_roundps_ph)
+ * [ ] [`_mm512_mask_cvtxph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtxph_ps)
+ * [ ] [`_mm512_mask_cvtxps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_cvtxps_ph)
+ * [ ] [`_mm512_mask_div_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_div_ph)
+ * [ ] [`_mm512_mask_div_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_div_round_ph)
+ * [ ] [`_mm512_mask_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fcmadd_pch)
+ * [ ] [`_mm512_mask_fcmadd_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fcmadd_round_pch)
+ * [ ] [`_mm512_mask_fcmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fcmul_pch)
+ * [ ] [`_mm512_mask_fcmul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fcmul_round_pch)
+ * [ ] [`_mm512_mask_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmadd_pch)
+ * [ ] [`_mm512_mask_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmadd_ph)
+ * [ ] [`_mm512_mask_fmadd_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmadd_round_pch)
+ * [ ] [`_mm512_mask_fmadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmadd_round_ph)
+ * [ ] [`_mm512_mask_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmaddsub_ph)
+ * [ ] [`_mm512_mask_fmaddsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmaddsub_round_ph)
+ * [ ] [`_mm512_mask_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmsub_ph)
+ * [ ] [`_mm512_mask_fmsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmsub_round_ph)
+ * [ ] [`_mm512_mask_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmsubadd_ph)
+ * [ ] [`_mm512_mask_fmsubadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmsubadd_round_ph)
+ * [ ] [`_mm512_mask_fmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmul_pch)
+ * [ ] [`_mm512_mask_fmul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fmul_round_pch)
+ * [ ] [`_mm512_mask_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fnmadd_ph)
+ * [ ] [`_mm512_mask_fnmadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fnmadd_round_ph)
+ * [ ] [`_mm512_mask_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fnmsub_ph)
+ * [ ] [`_mm512_mask_fnmsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fnmsub_round_ph)
+ * [ ] [`_mm512_mask_fpclass_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_fpclass_ph_mask)
+ * [ ] [`_mm512_mask_getexp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_getexp_ph)
+ * [ ] [`_mm512_mask_getexp_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_getexp_round_ph)
+ * [ ] [`_mm512_mask_getmant_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_getmant_ph)
+ * [ ] [`_mm512_mask_getmant_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_getmant_round_ph)
+ * [ ] [`_mm512_mask_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_max_ph)
+ * [ ] [`_mm512_mask_max_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_max_round_ph)
+ * [ ] [`_mm512_mask_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_min_ph)
+ * [ ] [`_mm512_mask_min_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_min_round_ph)
+ * [ ] [`_mm512_mask_mul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_mul_pch)
+ * [ ] [`_mm512_mask_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_mul_ph)
+ * [ ] [`_mm512_mask_mul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_mul_round_pch)
+ * [ ] [`_mm512_mask_mul_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_mul_round_ph)
+ * [ ] [`_mm512_mask_rcp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_rcp_ph)
+ * [ ] [`_mm512_mask_reduce_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_reduce_ph)
+ * [ ] [`_mm512_mask_reduce_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_reduce_round_ph)
+ * [ ] [`_mm512_mask_roundscale_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_roundscale_ph)
+ * [ ] [`_mm512_mask_roundscale_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_roundscale_round_ph)
+ * [ ] [`_mm512_mask_rsqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_rsqrt_ph)
+ * [ ] [`_mm512_mask_scalef_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_scalef_ph)
+ * [ ] [`_mm512_mask_scalef_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_scalef_round_ph)
+ * [ ] [`_mm512_mask_sqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_sqrt_ph)
+ * [ ] [`_mm512_mask_sqrt_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_sqrt_round_ph)
+ * [ ] [`_mm512_mask_sub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_sub_ph)
+ * [ ] [`_mm512_mask_sub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mask_sub_round_ph)
+ * [ ] [`_mm512_maskz_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_add_ph)
+ * [ ] [`_mm512_maskz_add_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_add_round_ph)
+ * [ ] [`_mm512_maskz_cmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cmul_pch)
+ * [ ] [`_mm512_maskz_cmul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cmul_round_pch)
+ * [ ] [`_mm512_maskz_conj_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_conj_pch)
+ * [ ] [`_mm512_maskz_cvt_roundepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundepi16_ph)
+ * [ ] [`_mm512_maskz_cvt_roundepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundepi32_ph)
+ * [ ] [`_mm512_maskz_cvt_roundepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundepi64_ph)
+ * [ ] [`_mm512_maskz_cvt_roundepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundepu16_ph)
+ * [ ] [`_mm512_maskz_cvt_roundepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundepu32_ph)
+ * [ ] [`_mm512_maskz_cvt_roundepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundepu64_ph)
+ * [ ] [`_mm512_maskz_cvt_roundpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundpd_ph)
+ * [ ] [`_mm512_maskz_cvt_roundph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundph_epi16)
+ * [ ] [`_mm512_maskz_cvt_roundph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundph_epi32)
+ * [ ] [`_mm512_maskz_cvt_roundph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundph_epi64)
+ * [ ] [`_mm512_maskz_cvt_roundph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundph_epu16)
+ * [ ] [`_mm512_maskz_cvt_roundph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundph_epu32)
+ * [ ] [`_mm512_maskz_cvt_roundph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundph_epu64)
+ * [ ] [`_mm512_maskz_cvt_roundph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvt_roundph_pd)
+ * [ ] [`_mm512_maskz_cvtepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtepi16_ph)
+ * [ ] [`_mm512_maskz_cvtepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtepi32_ph)
+ * [ ] [`_mm512_maskz_cvtepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtepi64_ph)
+ * [ ] [`_mm512_maskz_cvtepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtepu16_ph)
+ * [ ] [`_mm512_maskz_cvtepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtepu32_ph)
+ * [ ] [`_mm512_maskz_cvtepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtepu64_ph)
+ * [ ] [`_mm512_maskz_cvtpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtpd_ph)
+ * [ ] [`_mm512_maskz_cvtph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtph_epi16)
+ * [ ] [`_mm512_maskz_cvtph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtph_epi32)
+ * [ ] [`_mm512_maskz_cvtph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtph_epi64)
+ * [ ] [`_mm512_maskz_cvtph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtph_epu16)
+ * [ ] [`_mm512_maskz_cvtph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtph_epu32)
+ * [ ] [`_mm512_maskz_cvtph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtph_epu64)
+ * [ ] [`_mm512_maskz_cvtph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtph_pd)
+ * [ ] [`_mm512_maskz_cvtt_roundph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtt_roundph_epi16)
+ * [ ] [`_mm512_maskz_cvtt_roundph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtt_roundph_epi32)
+ * [ ] [`_mm512_maskz_cvtt_roundph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtt_roundph_epi64)
+ * [ ] [`_mm512_maskz_cvtt_roundph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtt_roundph_epu16)
+ * [ ] [`_mm512_maskz_cvtt_roundph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtt_roundph_epu32)
+ * [ ] [`_mm512_maskz_cvtt_roundph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtt_roundph_epu64)
+ * [ ] [`_mm512_maskz_cvttph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvttph_epi16)
+ * [ ] [`_mm512_maskz_cvttph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvttph_epi32)
+ * [ ] [`_mm512_maskz_cvttph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvttph_epi64)
+ * [ ] [`_mm512_maskz_cvttph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvttph_epu16)
+ * [ ] [`_mm512_maskz_cvttph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvttph_epu32)
+ * [ ] [`_mm512_maskz_cvttph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvttph_epu64)
+ * [ ] [`_mm512_maskz_cvtx_roundph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtx_roundph_ps)
+ * [ ] [`_mm512_maskz_cvtx_roundps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtx_roundps_ph)
+ * [ ] [`_mm512_maskz_cvtxph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtxph_ps)
+ * [ ] [`_mm512_maskz_cvtxps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_cvtxps_ph)
+ * [ ] [`_mm512_maskz_div_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_div_ph)
+ * [ ] [`_mm512_maskz_div_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_div_round_ph)
+ * [ ] [`_mm512_maskz_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fcmadd_pch)
+ * [ ] [`_mm512_maskz_fcmadd_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fcmadd_round_pch)
+ * [ ] [`_mm512_maskz_fcmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fcmul_pch)
+ * [ ] [`_mm512_maskz_fcmul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fcmul_round_pch)
+ * [ ] [`_mm512_maskz_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmadd_pch)
+ * [ ] [`_mm512_maskz_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmadd_ph)
+ * [ ] [`_mm512_maskz_fmadd_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmadd_round_pch)
+ * [ ] [`_mm512_maskz_fmadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmadd_round_ph)
+ * [ ] [`_mm512_maskz_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmaddsub_ph)
+ * [ ] [`_mm512_maskz_fmaddsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmaddsub_round_ph)
+ * [ ] [`_mm512_maskz_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmsub_ph)
+ * [ ] [`_mm512_maskz_fmsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmsub_round_ph)
+ * [ ] [`_mm512_maskz_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmsubadd_ph)
+ * [ ] [`_mm512_maskz_fmsubadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmsubadd_round_ph)
+ * [ ] [`_mm512_maskz_fmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmul_pch)
+ * [ ] [`_mm512_maskz_fmul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fmul_round_pch)
+ * [ ] [`_mm512_maskz_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fnmadd_ph)
+ * [ ] [`_mm512_maskz_fnmadd_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fnmadd_round_ph)
+ * [ ] [`_mm512_maskz_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fnmsub_ph)
+ * [ ] [`_mm512_maskz_fnmsub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_fnmsub_round_ph)
+ * [ ] [`_mm512_maskz_getexp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_getexp_ph)
+ * [ ] [`_mm512_maskz_getexp_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_getexp_round_ph)
+ * [ ] [`_mm512_maskz_getmant_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_getmant_ph)
+ * [ ] [`_mm512_maskz_getmant_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_getmant_round_ph)
+ * [ ] [`_mm512_maskz_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_max_ph)
+ * [ ] [`_mm512_maskz_max_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_max_round_ph)
+ * [ ] [`_mm512_maskz_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_min_ph)
+ * [ ] [`_mm512_maskz_min_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_min_round_ph)
+ * [ ] [`_mm512_maskz_mul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_mul_pch)
+ * [ ] [`_mm512_maskz_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_mul_ph)
+ * [ ] [`_mm512_maskz_mul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_mul_round_pch)
+ * [ ] [`_mm512_maskz_mul_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_mul_round_ph)
+ * [ ] [`_mm512_maskz_rcp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_rcp_ph)
+ * [ ] [`_mm512_maskz_reduce_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_reduce_ph)
+ * [ ] [`_mm512_maskz_reduce_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_reduce_round_ph)
+ * [ ] [`_mm512_maskz_roundscale_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_roundscale_ph)
+ * [ ] [`_mm512_maskz_roundscale_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_roundscale_round_ph)
+ * [ ] [`_mm512_maskz_rsqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_rsqrt_ph)
+ * [ ] [`_mm512_maskz_scalef_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_scalef_ph)
+ * [ ] [`_mm512_maskz_scalef_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_scalef_round_ph)
+ * [ ] [`_mm512_maskz_sqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_sqrt_ph)
+ * [ ] [`_mm512_maskz_sqrt_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_sqrt_round_ph)
+ * [ ] [`_mm512_maskz_sub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_sub_ph)
+ * [ ] [`_mm512_maskz_sub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_maskz_sub_round_ph)
+ * [ ] [`_mm512_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_max_ph)
+ * [ ] [`_mm512_max_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_max_round_ph)
+ * [ ] [`_mm512_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_min_ph)
+ * [ ] [`_mm512_min_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_min_round_ph)
+ * [ ] [`_mm512_mul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mul_pch)
+ * [ ] [`_mm512_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mul_ph)
+ * [ ] [`_mm512_mul_round_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mul_round_pch)
+ * [ ] [`_mm512_mul_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_mul_round_ph)
+ * [ ] [`_mm512_permutex2var_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_permutex2var_ph)
+ * [ ] [`_mm512_permutexvar_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_permutexvar_ph)
+ * [ ] [`_mm512_rcp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_rcp_ph)
+ * [ ] [`_mm512_reduce_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_reduce_add_ph)
+ * [ ] [`_mm512_reduce_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_reduce_max_ph)
+ * [ ] [`_mm512_reduce_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_reduce_min_ph)
+ * [ ] [`_mm512_reduce_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_reduce_mul_ph)
+ * [ ] [`_mm512_reduce_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_reduce_ph)
+ * [ ] [`_mm512_reduce_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_reduce_round_ph)
+ * [ ] [`_mm512_roundscale_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_roundscale_ph)
+ * [ ] [`_mm512_roundscale_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_roundscale_round_ph)
+ * [ ] [`_mm512_rsqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_rsqrt_ph)
+ * [ ] [`_mm512_scalef_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_scalef_ph)
+ * [ ] [`_mm512_scalef_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_scalef_round_ph)
+ * [ ] [`_mm512_set1_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_set1_pch)
+ * [ ] [`_mm512_set1_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_set1_ph)
+ * [ ] [`_mm512_set_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_set_ph)
+ * [ ] [`_mm512_setr_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_setr_ph)
+ * [ ] [`_mm512_setzero_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_setzero_ph)
+ * [ ] [`_mm512_sqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_sqrt_ph)
+ * [ ] [`_mm512_sqrt_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_sqrt_round_ph)
+ * [ ] [`_mm512_store_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_store_ph)
+ * [ ] [`_mm512_storeu_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_storeu_ph)
+ * [ ] [`_mm512_sub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_sub_ph)
+ * [ ] [`_mm512_sub_round_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_sub_round_ph)
+ * [ ] [`_mm512_undefined_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_undefined_ph)
+ * [ ] [`_mm512_zextph128_ph512`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_zextph128_ph512)
+ * [ ] [`_mm512_zextph256_ph512`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_zextph256_ph512)
+ * [ ] [`_mm_add_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_add_round_sh)
+ * [ ] [`_mm_add_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_add_sh)
+ * [ ] [`_mm_castpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_castpd_ph)
+ * [ ] [`_mm_castph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_castph_pd)
+ * [ ] [`_mm_castph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_castph_ps)
+ * [ ] [`_mm_castph_si128`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_castph_si128)
+ * [ ] [`_mm_castps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_castps_ph)
+ * [ ] [`_mm_castsi128_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_castsi128_ph)
+ * [ ] [`_mm_cmp_round_sh_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cmp_round_sh_mask)
+ * [ ] [`_mm_cmp_sh_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cmp_sh_mask)
+ * [ ] [`_mm_cmul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cmul_round_sch)
+ * [ ] [`_mm_cmul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cmul_sch)
+ * [ ] [`_mm_comi_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_comi_round_sh)
+ * [ ] [`_mm_comi_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_comi_sh)
+ * [ ] [`_mm_comieq_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_comieq_sh)
+ * [ ] [`_mm_comige_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_comige_sh)
+ * [ ] [`_mm_comigt_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_comigt_sh)
+ * [ ] [`_mm_comile_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_comile_sh)
+ * [ ] [`_mm_comilt_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_comilt_sh)
+ * [ ] [`_mm_comineq_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_comineq_sh)
+ * [ ] [`_mm_cvt_roundi32_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundi32_sh)
+ * [ ] [`_mm_cvt_roundi64_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundi64_sh)
+ * [ ] [`_mm_cvt_roundsd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundsd_sh)
+ * [ ] [`_mm_cvt_roundsh_i32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundsh_i32)
+ * [ ] [`_mm_cvt_roundsh_i64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundsh_i64)
+ * [ ] [`_mm_cvt_roundsh_sd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundsh_sd)
+ * [ ] [`_mm_cvt_roundsh_ss`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundsh_ss)
+ * [ ] [`_mm_cvt_roundsh_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundsh_u32)
+ * [ ] [`_mm_cvt_roundsh_u64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundsh_u64)
+ * [ ] [`_mm_cvt_roundss_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundss_sh)
+ * [ ] [`_mm_cvt_roundu32_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundu32_sh)
+ * [ ] [`_mm_cvt_roundu64_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvt_roundu64_sh)
+ * [ ] [`_mm_cvti32_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvti32_sh)
+ * [ ] [`_mm_cvti64_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvti64_sh)
+ * [ ] [`_mm_cvtsd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsd_sh)
+ * [ ] [`_mm_cvtsh_h`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsh_h)
+ * [ ] [`_mm_cvtsh_i32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsh_i32)
+ * [ ] [`_mm_cvtsh_i64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsh_i64)
+ * [ ] [`_mm_cvtsh_sd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsh_sd)
+ * [ ] [`_mm_cvtsh_ss`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsh_ss)
+ * [ ] [`_mm_cvtsh_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsh_u32)
+ * [ ] [`_mm_cvtsh_u64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsh_u64)
+ * [ ] [`_mm_cvtsi128_si16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi128_si16)
+ * [ ] [`_mm_cvtsi16_si128`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtsi16_si128)
+ * [ ] [`_mm_cvtss_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtss_sh)
+ * [ ] [`_mm_cvtt_roundsh_i32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtt_roundsh_i32)
+ * [ ] [`_mm_cvtt_roundsh_i64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtt_roundsh_i64)
+ * [ ] [`_mm_cvtt_roundsh_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtt_roundsh_u32)
+ * [ ] [`_mm_cvtt_roundsh_u64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtt_roundsh_u64)
+ * [ ] [`_mm_cvttsh_i32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttsh_i32)
+ * [ ] [`_mm_cvttsh_i64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttsh_i64)
+ * [ ] [`_mm_cvttsh_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttsh_u32)
+ * [ ] [`_mm_cvttsh_u64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttsh_u64)
+ * [ ] [`_mm_cvtu32_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtu32_sh)
+ * [ ] [`_mm_cvtu64_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtu64_sh)
+ * [ ] [`_mm_div_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_div_round_sh)
+ * [ ] [`_mm_div_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_div_sh)
+ * [ ] [`_mm_fcmadd_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fcmadd_round_sch)
+ * [ ] [`_mm_fcmadd_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fcmadd_sch)
+ * [ ] [`_mm_fcmul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fcmul_round_sch)
+ * [ ] [`_mm_fcmul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fcmul_sch)
+ * [ ] [`_mm_fmadd_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmadd_round_sch)
+ * [ ] [`_mm_fmadd_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmadd_round_sh)
+ * [ ] [`_mm_fmadd_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmadd_sch)
+ * [ ] [`_mm_fmadd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmadd_sh)
+ * [ ] [`_mm_fmsub_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmsub_round_sh)
+ * [ ] [`_mm_fmsub_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmsub_sh)
+ * [ ] [`_mm_fmul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmul_round_sch)
+ * [ ] [`_mm_fmul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmul_sch)
+ * [ ] [`_mm_fnmadd_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fnmadd_round_sh)
+ * [ ] [`_mm_fnmadd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fnmadd_sh)
+ * [ ] [`_mm_fnmsub_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fnmsub_round_sh)
+ * [ ] [`_mm_fnmsub_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fnmsub_sh)
+ * [ ] [`_mm_fpclass_sh_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fpclass_sh_mask)
+ * [ ] [`_mm_getexp_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_getexp_round_sh)
+ * [ ] [`_mm_getexp_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_getexp_sh)
+ * [ ] [`_mm_getmant_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_getmant_round_sh)
+ * [ ] [`_mm_getmant_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_getmant_sh)
+ * [ ] [`_mm_load_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load_sh)
+ * [ ] [`_mm_mask3_fcmadd_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fcmadd_round_sch)
+ * [ ] [`_mm_mask3_fcmadd_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fcmadd_sch)
+ * [ ] [`_mm_mask3_fmadd_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fmadd_round_sch)
+ * [ ] [`_mm_mask3_fmadd_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fmadd_round_sh)
+ * [ ] [`_mm_mask3_fmadd_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fmadd_sch)
+ * [ ] [`_mm_mask3_fmadd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fmadd_sh)
+ * [ ] [`_mm_mask3_fmsub_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fmsub_round_sh)
+ * [ ] [`_mm_mask3_fmsub_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fmsub_sh)
+ * [ ] [`_mm_mask3_fnmadd_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fnmadd_round_sh)
+ * [ ] [`_mm_mask3_fnmadd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fnmadd_sh)
+ * [ ] [`_mm_mask3_fnmsub_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fnmsub_round_sh)
+ * [ ] [`_mm_mask3_fnmsub_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fnmsub_sh)
+ * [ ] [`_mm_mask_add_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_add_round_sh)
+ * [ ] [`_mm_mask_add_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_add_sh)
+ * [ ] [`_mm_mask_cmp_round_sh_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cmp_round_sh_mask)
+ * [ ] [`_mm_mask_cmp_sh_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cmp_sh_mask)
+ * [ ] [`_mm_mask_cmul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cmul_round_sch)
+ * [ ] [`_mm_mask_cmul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cmul_sch)
+ * [ ] [`_mm_mask_cvt_roundsd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvt_roundsd_sh)
+ * [ ] [`_mm_mask_cvt_roundsh_sd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvt_roundsh_sd)
+ * [ ] [`_mm_mask_cvt_roundsh_ss`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvt_roundsh_ss)
+ * [ ] [`_mm_mask_cvt_roundss_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvt_roundss_sh)
+ * [ ] [`_mm_mask_cvtsd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtsd_sh)
+ * [ ] [`_mm_mask_cvtsh_sd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtsh_sd)
+ * [ ] [`_mm_mask_cvtsh_ss`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtsh_ss)
+ * [ ] [`_mm_mask_cvtss_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtss_sh)
+ * [ ] [`_mm_mask_div_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_div_round_sh)
+ * [ ] [`_mm_mask_div_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_div_sh)
+ * [ ] [`_mm_mask_fcmadd_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fcmadd_round_sch)
+ * [ ] [`_mm_mask_fcmadd_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fcmadd_sch)
+ * [ ] [`_mm_mask_fcmul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fcmul_round_sch)
+ * [ ] [`_mm_mask_fcmul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fcmul_sch)
+ * [ ] [`_mm_mask_fmadd_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmadd_round_sch)
+ * [ ] [`_mm_mask_fmadd_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmadd_round_sh)
+ * [ ] [`_mm_mask_fmadd_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmadd_sch)
+ * [ ] [`_mm_mask_fmadd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmadd_sh)
+ * [ ] [`_mm_mask_fmsub_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmsub_round_sh)
+ * [ ] [`_mm_mask_fmsub_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmsub_sh)
+ * [ ] [`_mm_mask_fmul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmul_round_sch)
+ * [ ] [`_mm_mask_fmul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmul_sch)
+ * [ ] [`_mm_mask_fnmadd_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fnmadd_round_sh)
+ * [ ] [`_mm_mask_fnmadd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fnmadd_sh)
+ * [ ] [`_mm_mask_fnmsub_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fnmsub_round_sh)
+ * [ ] [`_mm_mask_fnmsub_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fnmsub_sh)
+ * [ ] [`_mm_mask_fpclass_sh_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fpclass_sh_mask)
+ * [ ] [`_mm_mask_getexp_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_getexp_round_sh)
+ * [ ] [`_mm_mask_getexp_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_getexp_sh)
+ * [ ] [`_mm_mask_getmant_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_getmant_round_sh)
+ * [ ] [`_mm_mask_getmant_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_getmant_sh)
+ * [ ] [`_mm_mask_load_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_load_sh)
+ * [ ] [`_mm_mask_move_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_move_sh)
+ * [ ] [`_mm_mask_mul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_mul_round_sch)
+ * [ ] [`_mm_mask_mul_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_mul_round_sh)
+ * [ ] [`_mm_mask_mul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_mul_sch)
+ * [ ] [`_mm_mask_mul_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_mul_sh)
+ * [ ] [`_mm_mask_rcp_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_rcp_sh)
+ * [ ] [`_mm_mask_reduce_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_round_sh)
+ * [ ] [`_mm_mask_reduce_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_sh)
+ * [ ] [`_mm_mask_roundscale_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_roundscale_round_sh)
+ * [ ] [`_mm_mask_roundscale_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_roundscale_sh)
+ * [ ] [`_mm_mask_rsqrt_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_rsqrt_sh)
+ * [ ] [`_mm_mask_scalef_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_scalef_round_sh)
+ * [ ] [`_mm_mask_scalef_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_scalef_sh)
+ * [ ] [`_mm_mask_sqrt_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_sqrt_round_sh)
+ * [ ] [`_mm_mask_sqrt_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_sqrt_sh)
+ * [ ] [`_mm_mask_store_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_store_sh)
+ * [ ] [`_mm_mask_sub_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_sub_round_sh)
+ * [ ] [`_mm_mask_sub_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_sub_sh)
+ * [ ] [`_mm_maskz_add_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_add_round_sh)
+ * [ ] [`_mm_maskz_add_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_add_sh)
+ * [ ] [`_mm_maskz_cmul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cmul_round_sch)
+ * [ ] [`_mm_maskz_cmul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cmul_sch)
+ * [ ] [`_mm_maskz_cvt_roundsd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvt_roundsd_sh)
+ * [ ] [`_mm_maskz_cvt_roundsh_sd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvt_roundsh_sd)
+ * [ ] [`_mm_maskz_cvt_roundsh_ss`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvt_roundsh_ss)
+ * [ ] [`_mm_maskz_cvt_roundss_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvt_roundss_sh)
+ * [ ] [`_mm_maskz_cvtsd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtsd_sh)
+ * [ ] [`_mm_maskz_cvtsh_sd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtsh_sd)
+ * [ ] [`_mm_maskz_cvtsh_ss`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtsh_ss)
+ * [ ] [`_mm_maskz_cvtss_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtss_sh)
+ * [ ] [`_mm_maskz_div_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_div_round_sh)
+ * [ ] [`_mm_maskz_div_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_div_sh)
+ * [ ] [`_mm_maskz_fcmadd_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fcmadd_round_sch)
+ * [ ] [`_mm_maskz_fcmadd_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fcmadd_sch)
+ * [ ] [`_mm_maskz_fcmul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fcmul_round_sch)
+ * [ ] [`_mm_maskz_fcmul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fcmul_sch)
+ * [ ] [`_mm_maskz_fmadd_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmadd_round_sch)
+ * [ ] [`_mm_maskz_fmadd_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmadd_round_sh)
+ * [ ] [`_mm_maskz_fmadd_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmadd_sch)
+ * [ ] [`_mm_maskz_fmadd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmadd_sh)
+ * [ ] [`_mm_maskz_fmsub_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmsub_round_sh)
+ * [ ] [`_mm_maskz_fmsub_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmsub_sh)
+ * [ ] [`_mm_maskz_fmul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmul_round_sch)
+ * [ ] [`_mm_maskz_fmul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmul_sch)
+ * [ ] [`_mm_maskz_fnmadd_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fnmadd_round_sh)
+ * [ ] [`_mm_maskz_fnmadd_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fnmadd_sh)
+ * [ ] [`_mm_maskz_fnmsub_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fnmsub_round_sh)
+ * [ ] [`_mm_maskz_fnmsub_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fnmsub_sh)
+ * [ ] [`_mm_maskz_getexp_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_getexp_round_sh)
+ * [ ] [`_mm_maskz_getexp_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_getexp_sh)
+ * [ ] [`_mm_maskz_getmant_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_getmant_round_sh)
+ * [ ] [`_mm_maskz_getmant_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_getmant_sh)
+ * [ ] [`_mm_maskz_load_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_load_sh)
+ * [ ] [`_mm_maskz_move_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_move_sh)
+ * [ ] [`_mm_maskz_mul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_mul_round_sch)
+ * [ ] [`_mm_maskz_mul_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_mul_round_sh)
+ * [ ] [`_mm_maskz_mul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_mul_sch)
+ * [ ] [`_mm_maskz_mul_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_mul_sh)
+ * [ ] [`_mm_maskz_rcp_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_rcp_sh)
+ * [ ] [`_mm_maskz_reduce_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_reduce_round_sh)
+ * [ ] [`_mm_maskz_reduce_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_reduce_sh)
+ * [ ] [`_mm_maskz_roundscale_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_roundscale_round_sh)
+ * [ ] [`_mm_maskz_roundscale_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_roundscale_sh)
+ * [ ] [`_mm_maskz_rsqrt_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_rsqrt_sh)
+ * [ ] [`_mm_maskz_scalef_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_scalef_round_sh)
+ * [ ] [`_mm_maskz_scalef_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_scalef_sh)
+ * [ ] [`_mm_maskz_sqrt_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_sqrt_round_sh)
+ * [ ] [`_mm_maskz_sqrt_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_sqrt_sh)
+ * [ ] [`_mm_maskz_sub_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_sub_round_sh)
+ * [ ] [`_mm_maskz_sub_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_sub_sh)
+ * [ ] [`_mm_move_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_move_sh)
+ * [ ] [`_mm_mul_round_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_round_sch)
+ * [ ] [`_mm_mul_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_round_sh)
+ * [ ] [`_mm_mul_sch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_sch)
+ * [ ] [`_mm_mul_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_sh)
+ * [ ] [`_mm_rcp_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rcp_sh)
+ * [ ] [`_mm_reduce_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_round_sh)
+ * [ ] [`_mm_reduce_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_sh)
+ * [ ] [`_mm_roundscale_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_roundscale_round_sh)
+ * [ ] [`_mm_roundscale_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_roundscale_sh)
+ * [ ] [`_mm_rsqrt_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rsqrt_sh)
+ * [ ] [`_mm_scalef_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_scalef_round_sh)
+ * [ ] [`_mm_scalef_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_scalef_sh)
+ * [ ] [`_mm_set1_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_set1_pch)
+ * [ ] [`_mm_set1_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_set1_ph)
+ * [ ] [`_mm_set_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_set_ph)
+ * [ ] [`_mm_set_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_set_sh)
+ * [ ] [`_mm_setr_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_setr_ph)
+ * [ ] [`_mm_sqrt_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sqrt_round_sh)
+ * [ ] [`_mm_sqrt_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sqrt_sh)
+ * [ ] [`_mm_store_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_store_sh)
+ * [ ] [`_mm_sub_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sub_round_sh)
+ * [ ] [`_mm_sub_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sub_sh)
+ * [ ] [`_mm_ucomieq_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_ucomieq_sh)
+ * [ ] [`_mm_ucomige_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_ucomige_sh)
+ * [ ] [`_mm_ucomigt_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_ucomigt_sh)
+ * [ ] [`_mm_ucomile_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_ucomile_sh)
+ * [ ] [`_mm_ucomilt_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_ucomilt_sh)
+ * [ ] [`_mm_ucomineq_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_ucomineq_sh)
+
+
+
+["AVX512_FP16", "AVX512VL"]
+
+ * [ ] [`_mm256_abs_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_abs_ph)
+ * [ ] [`_mm256_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_add_ph)
+ * [ ] [`_mm256_cmp_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cmp_ph_mask)
+ * [ ] [`_mm256_cmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cmul_pch)
+ * [ ] [`_mm256_conj_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_conj_pch)
+ * [ ] [`_mm256_cvtepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtepi16_ph)
+ * [ ] [`_mm256_cvtepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtepi32_ph)
+ * [ ] [`_mm256_cvtepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtepi64_ph)
+ * [ ] [`_mm256_cvtepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtepu16_ph)
+ * [ ] [`_mm256_cvtepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtepu32_ph)
+ * [ ] [`_mm256_cvtepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtepu64_ph)
+ * [ ] [`_mm256_cvtpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtpd_ph)
+ * [ ] [`_mm256_cvtph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtph_epi16)
+ * [ ] [`_mm256_cvtph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtph_epi32)
+ * [ ] [`_mm256_cvtph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtph_epi64)
+ * [ ] [`_mm256_cvtph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtph_epu16)
+ * [ ] [`_mm256_cvtph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtph_epu32)
+ * [ ] [`_mm256_cvtph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtph_epu64)
+ * [ ] [`_mm256_cvtph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtph_pd)
+ * [ ] [`_mm256_cvttph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvttph_epi16)
+ * [ ] [`_mm256_cvttph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvttph_epi32)
+ * [ ] [`_mm256_cvttph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvttph_epi64)
+ * [ ] [`_mm256_cvttph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvttph_epu16)
+ * [ ] [`_mm256_cvttph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvttph_epu32)
+ * [ ] [`_mm256_cvttph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvttph_epu64)
+ * [ ] [`_mm256_cvtxph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtxph_ps)
+ * [ ] [`_mm256_cvtxps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtxps_ph)
+ * [ ] [`_mm256_div_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_div_ph)
+ * [ ] [`_mm256_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fcmadd_pch)
+ * [ ] [`_mm256_fcmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fcmul_pch)
+ * [ ] [`_mm256_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fmadd_pch)
+ * [ ] [`_mm256_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fmadd_ph)
+ * [ ] [`_mm256_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fmaddsub_ph)
+ * [ ] [`_mm256_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fmsub_ph)
+ * [ ] [`_mm256_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fmsubadd_ph)
+ * [ ] [`_mm256_fmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fmul_pch)
+ * [ ] [`_mm256_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fnmadd_ph)
+ * [ ] [`_mm256_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fnmsub_ph)
+ * [ ] [`_mm256_fpclass_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fpclass_ph_mask)
+ * [ ] [`_mm256_getexp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_getexp_ph)
+ * [ ] [`_mm256_getmant_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_getmant_ph)
+ * [ ] [`_mm256_load_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_load_ph)
+ * [ ] [`_mm256_loadu_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_loadu_ph)
+ * [ ] [`_mm256_mask3_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask3_fcmadd_pch)
+ * [ ] [`_mm256_mask3_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask3_fmadd_pch)
+ * [ ] [`_mm256_mask3_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask3_fmadd_ph)
+ * [ ] [`_mm256_mask3_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask3_fmaddsub_ph)
+ * [ ] [`_mm256_mask3_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask3_fmsub_ph)
+ * [ ] [`_mm256_mask3_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask3_fmsubadd_ph)
+ * [ ] [`_mm256_mask3_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask3_fnmadd_ph)
+ * [ ] [`_mm256_mask3_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask3_fnmsub_ph)
+ * [ ] [`_mm256_mask_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_add_ph)
+ * [ ] [`_mm256_mask_blend_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_blend_ph)
+ * [ ] [`_mm256_mask_cmp_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cmp_ph_mask)
+ * [ ] [`_mm256_mask_cmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cmul_pch)
+ * [ ] [`_mm256_mask_conj_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_conj_pch)
+ * [ ] [`_mm256_mask_cvtepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtepi16_ph)
+ * [ ] [`_mm256_mask_cvtepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtepi32_ph)
+ * [ ] [`_mm256_mask_cvtepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtepi64_ph)
+ * [ ] [`_mm256_mask_cvtepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtepu16_ph)
+ * [ ] [`_mm256_mask_cvtepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtepu32_ph)
+ * [ ] [`_mm256_mask_cvtepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtepu64_ph)
+ * [ ] [`_mm256_mask_cvtpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtpd_ph)
+ * [ ] [`_mm256_mask_cvtph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtph_epi16)
+ * [ ] [`_mm256_mask_cvtph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtph_epi32)
+ * [ ] [`_mm256_mask_cvtph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtph_epi64)
+ * [ ] [`_mm256_mask_cvtph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtph_epu16)
+ * [ ] [`_mm256_mask_cvtph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtph_epu32)
+ * [ ] [`_mm256_mask_cvtph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtph_epu64)
+ * [ ] [`_mm256_mask_cvtph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtph_pd)
+ * [ ] [`_mm256_mask_cvttph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvttph_epi16)
+ * [ ] [`_mm256_mask_cvttph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvttph_epi32)
+ * [ ] [`_mm256_mask_cvttph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvttph_epi64)
+ * [ ] [`_mm256_mask_cvttph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvttph_epu16)
+ * [ ] [`_mm256_mask_cvttph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvttph_epu32)
+ * [ ] [`_mm256_mask_cvttph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvttph_epu64)
+ * [ ] [`_mm256_mask_cvtxph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtxph_ps)
+ * [ ] [`_mm256_mask_cvtxps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_cvtxps_ph)
+ * [ ] [`_mm256_mask_div_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_div_ph)
+ * [ ] [`_mm256_mask_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_fcmadd_pch)
+ * [ ] [`_mm256_mask_fcmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_fcmul_pch)
+ * [ ] [`_mm256_mask_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_fmadd_pch)
+ * [ ] [`_mm256_mask_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_fmadd_ph)
+ * [ ] [`_mm256_mask_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_fmaddsub_ph)
+ * [ ] [`_mm256_mask_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_fmsub_ph)
+ * [ ] [`_mm256_mask_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_fmsubadd_ph)
+ * [ ] [`_mm256_mask_fmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_fmul_pch)
+ * [ ] [`_mm256_mask_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_fnmadd_ph)
+ * [ ] [`_mm256_mask_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_fnmsub_ph)
+ * [ ] [`_mm256_mask_fpclass_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_fpclass_ph_mask)
+ * [ ] [`_mm256_mask_getexp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_getexp_ph)
+ * [ ] [`_mm256_mask_getmant_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_getmant_ph)
+ * [ ] [`_mm256_mask_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_max_ph)
+ * [ ] [`_mm256_mask_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_min_ph)
+ * [ ] [`_mm256_mask_mul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_mul_pch)
+ * [ ] [`_mm256_mask_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_mul_ph)
+ * [ ] [`_mm256_mask_rcp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_rcp_ph)
+ * [ ] [`_mm256_mask_reduce_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_reduce_ph)
+ * [ ] [`_mm256_mask_roundscale_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_roundscale_ph)
+ * [ ] [`_mm256_mask_rsqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_rsqrt_ph)
+ * [ ] [`_mm256_mask_scalef_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_scalef_ph)
+ * [ ] [`_mm256_mask_sqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_sqrt_ph)
+ * [ ] [`_mm256_mask_sub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mask_sub_ph)
+ * [ ] [`_mm256_maskz_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_add_ph)
+ * [ ] [`_mm256_maskz_cmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cmul_pch)
+ * [ ] [`_mm256_maskz_conj_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_conj_pch)
+ * [ ] [`_mm256_maskz_cvtepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtepi16_ph)
+ * [ ] [`_mm256_maskz_cvtepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtepi32_ph)
+ * [ ] [`_mm256_maskz_cvtepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtepi64_ph)
+ * [ ] [`_mm256_maskz_cvtepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtepu16_ph)
+ * [ ] [`_mm256_maskz_cvtepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtepu32_ph)
+ * [ ] [`_mm256_maskz_cvtepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtepu64_ph)
+ * [ ] [`_mm256_maskz_cvtpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtpd_ph)
+ * [ ] [`_mm256_maskz_cvtph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtph_epi16)
+ * [ ] [`_mm256_maskz_cvtph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtph_epi32)
+ * [ ] [`_mm256_maskz_cvtph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtph_epi64)
+ * [ ] [`_mm256_maskz_cvtph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtph_epu16)
+ * [ ] [`_mm256_maskz_cvtph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtph_epu32)
+ * [ ] [`_mm256_maskz_cvtph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtph_epu64)
+ * [ ] [`_mm256_maskz_cvtph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtph_pd)
+ * [ ] [`_mm256_maskz_cvttph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvttph_epi16)
+ * [ ] [`_mm256_maskz_cvttph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvttph_epi32)
+ * [ ] [`_mm256_maskz_cvttph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvttph_epi64)
+ * [ ] [`_mm256_maskz_cvttph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvttph_epu16)
+ * [ ] [`_mm256_maskz_cvttph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvttph_epu32)
+ * [ ] [`_mm256_maskz_cvttph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvttph_epu64)
+ * [ ] [`_mm256_maskz_cvtxph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtxph_ps)
+ * [ ] [`_mm256_maskz_cvtxps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_cvtxps_ph)
+ * [ ] [`_mm256_maskz_div_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_div_ph)
+ * [ ] [`_mm256_maskz_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_fcmadd_pch)
+ * [ ] [`_mm256_maskz_fcmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_fcmul_pch)
+ * [ ] [`_mm256_maskz_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_fmadd_pch)
+ * [ ] [`_mm256_maskz_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_fmadd_ph)
+ * [ ] [`_mm256_maskz_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_fmaddsub_ph)
+ * [ ] [`_mm256_maskz_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_fmsub_ph)
+ * [ ] [`_mm256_maskz_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_fmsubadd_ph)
+ * [ ] [`_mm256_maskz_fmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_fmul_pch)
+ * [ ] [`_mm256_maskz_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_fnmadd_ph)
+ * [ ] [`_mm256_maskz_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_fnmsub_ph)
+ * [ ] [`_mm256_maskz_getexp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_getexp_ph)
+ * [ ] [`_mm256_maskz_getmant_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_getmant_ph)
+ * [ ] [`_mm256_maskz_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_max_ph)
+ * [ ] [`_mm256_maskz_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_min_ph)
+ * [ ] [`_mm256_maskz_mul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_mul_pch)
+ * [ ] [`_mm256_maskz_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_mul_ph)
+ * [ ] [`_mm256_maskz_rcp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_rcp_ph)
+ * [ ] [`_mm256_maskz_reduce_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_reduce_ph)
+ * [ ] [`_mm256_maskz_roundscale_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_roundscale_ph)
+ * [ ] [`_mm256_maskz_rsqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_rsqrt_ph)
+ * [ ] [`_mm256_maskz_scalef_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_scalef_ph)
+ * [ ] [`_mm256_maskz_sqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_sqrt_ph)
+ * [ ] [`_mm256_maskz_sub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_maskz_sub_ph)
+ * [ ] [`_mm256_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_max_ph)
+ * [ ] [`_mm256_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_min_ph)
+ * [ ] [`_mm256_mul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mul_pch)
+ * [ ] [`_mm256_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_mul_ph)
+ * [ ] [`_mm256_permutex2var_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_permutex2var_ph)
+ * [ ] [`_mm256_permutexvar_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_permutexvar_ph)
+ * [ ] [`_mm256_rcp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_rcp_ph)
+ * [ ] [`_mm256_reduce_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_add_ph)
+ * [ ] [`_mm256_reduce_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_max_ph)
+ * [ ] [`_mm256_reduce_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_min_ph)
+ * [ ] [`_mm256_reduce_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_mul_ph)
+ * [ ] [`_mm256_reduce_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_reduce_ph)
+ * [ ] [`_mm256_roundscale_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_roundscale_ph)
+ * [ ] [`_mm256_rsqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_rsqrt_ph)
+ * [ ] [`_mm256_scalef_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_scalef_ph)
+ * [ ] [`_mm256_setzero_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_setzero_ph)
+ * [ ] [`_mm256_sqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_sqrt_ph)
+ * [ ] [`_mm256_store_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_store_ph)
+ * [ ] [`_mm256_storeu_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_storeu_ph)
+ * [ ] [`_mm256_sub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_sub_ph)
+ * [ ] [`_mm256_undefined_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_undefined_ph)
+ * [ ] [`_mm_abs_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_abs_ph)
+ * [ ] [`_mm_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_add_ph)
+ * [ ] [`_mm_cmp_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cmp_ph_mask)
+ * [ ] [`_mm_cmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cmul_pch)
+ * [ ] [`_mm_conj_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_conj_pch)
+ * [ ] [`_mm_cvtepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtepi16_ph)
+ * [ ] [`_mm_cvtepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtepi32_ph)
+ * [ ] [`_mm_cvtepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtepi64_ph)
+ * [ ] [`_mm_cvtepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtepu16_ph)
+ * [ ] [`_mm_cvtepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtepu32_ph)
+ * [ ] [`_mm_cvtepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtepu64_ph)
+ * [ ] [`_mm_cvtpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpd_ph)
+ * [ ] [`_mm_cvtph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtph_epi16)
+ * [ ] [`_mm_cvtph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtph_epi32)
+ * [ ] [`_mm_cvtph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtph_epi64)
+ * [ ] [`_mm_cvtph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtph_epu16)
+ * [ ] [`_mm_cvtph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtph_epu32)
+ * [ ] [`_mm_cvtph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtph_epu64)
+ * [ ] [`_mm_cvtph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtph_pd)
+ * [ ] [`_mm_cvttph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttph_epi16)
+ * [ ] [`_mm_cvttph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttph_epi32)
+ * [ ] [`_mm_cvttph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttph_epi64)
+ * [ ] [`_mm_cvttph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttph_epu16)
+ * [ ] [`_mm_cvttph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttph_epu32)
+ * [ ] [`_mm_cvttph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvttph_epu64)
+ * [ ] [`_mm_cvtxph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtxph_ps)
+ * [ ] [`_mm_cvtxps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtxps_ph)
+ * [ ] [`_mm_div_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_div_ph)
+ * [ ] [`_mm_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fcmadd_pch)
+ * [ ] [`_mm_fcmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fcmul_pch)
+ * [ ] [`_mm_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmadd_pch)
+ * [ ] [`_mm_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmadd_ph)
+ * [ ] [`_mm_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmaddsub_ph)
+ * [ ] [`_mm_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmsub_ph)
+ * [ ] [`_mm_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmsubadd_ph)
+ * [ ] [`_mm_fmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fmul_pch)
+ * [ ] [`_mm_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fnmadd_ph)
+ * [ ] [`_mm_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fnmsub_ph)
+ * [ ] [`_mm_fpclass_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_fpclass_ph_mask)
+ * [ ] [`_mm_getexp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_getexp_ph)
+ * [ ] [`_mm_getmant_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_getmant_ph)
+ * [ ] [`_mm_load_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load_ph)
+ * [ ] [`_mm_loadu_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadu_ph)
+ * [ ] [`_mm_mask3_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fcmadd_pch)
+ * [ ] [`_mm_mask3_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fmadd_pch)
+ * [ ] [`_mm_mask3_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fmadd_ph)
+ * [ ] [`_mm_mask3_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fmaddsub_ph)
+ * [ ] [`_mm_mask3_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fmsub_ph)
+ * [ ] [`_mm_mask3_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fmsubadd_ph)
+ * [ ] [`_mm_mask3_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fnmadd_ph)
+ * [ ] [`_mm_mask3_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask3_fnmsub_ph)
+ * [ ] [`_mm_mask_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_add_ph)
+ * [ ] [`_mm_mask_blend_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_blend_ph)
+ * [ ] [`_mm_mask_cmp_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cmp_ph_mask)
+ * [ ] [`_mm_mask_cmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cmul_pch)
+ * [ ] [`_mm_mask_conj_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_conj_pch)
+ * [ ] [`_mm_mask_cvtepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtepi16_ph)
+ * [ ] [`_mm_mask_cvtepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtepi32_ph)
+ * [ ] [`_mm_mask_cvtepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtepi64_ph)
+ * [ ] [`_mm_mask_cvtepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtepu16_ph)
+ * [ ] [`_mm_mask_cvtepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtepu32_ph)
+ * [ ] [`_mm_mask_cvtepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtepu64_ph)
+ * [ ] [`_mm_mask_cvtpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtpd_ph)
+ * [ ] [`_mm_mask_cvtph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtph_epi16)
+ * [ ] [`_mm_mask_cvtph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtph_epi32)
+ * [ ] [`_mm_mask_cvtph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtph_epi64)
+ * [ ] [`_mm_mask_cvtph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtph_epu16)
+ * [ ] [`_mm_mask_cvtph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtph_epu32)
+ * [ ] [`_mm_mask_cvtph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtph_epu64)
+ * [ ] [`_mm_mask_cvtph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtph_pd)
+ * [ ] [`_mm_mask_cvttph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvttph_epi16)
+ * [ ] [`_mm_mask_cvttph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvttph_epi32)
+ * [ ] [`_mm_mask_cvttph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvttph_epi64)
+ * [ ] [`_mm_mask_cvttph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvttph_epu16)
+ * [ ] [`_mm_mask_cvttph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvttph_epu32)
+ * [ ] [`_mm_mask_cvttph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvttph_epu64)
+ * [ ] [`_mm_mask_cvtxph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtxph_ps)
+ * [ ] [`_mm_mask_cvtxps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_cvtxps_ph)
+ * [ ] [`_mm_mask_div_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_div_ph)
+ * [ ] [`_mm_mask_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fcmadd_pch)
+ * [ ] [`_mm_mask_fcmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fcmul_pch)
+ * [ ] [`_mm_mask_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmadd_pch)
+ * [ ] [`_mm_mask_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmadd_ph)
+ * [ ] [`_mm_mask_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmaddsub_ph)
+ * [ ] [`_mm_mask_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmsub_ph)
+ * [ ] [`_mm_mask_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmsubadd_ph)
+ * [ ] [`_mm_mask_fmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fmul_pch)
+ * [ ] [`_mm_mask_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fnmadd_ph)
+ * [ ] [`_mm_mask_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fnmsub_ph)
+ * [ ] [`_mm_mask_fpclass_ph_mask`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_fpclass_ph_mask)
+ * [ ] [`_mm_mask_getexp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_getexp_ph)
+ * [ ] [`_mm_mask_getmant_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_getmant_ph)
+ * [ ] [`_mm_mask_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_max_ph)
+ * [ ] [`_mm_mask_max_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_max_round_sh)
+ * [ ] [`_mm_mask_max_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_max_sh)
+ * [ ] [`_mm_mask_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_min_ph)
+ * [ ] [`_mm_mask_min_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_min_round_sh)
+ * [ ] [`_mm_mask_min_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_min_sh)
+ * [ ] [`_mm_mask_mul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_mul_pch)
+ * [ ] [`_mm_mask_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_mul_ph)
+ * [ ] [`_mm_mask_rcp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_rcp_ph)
+ * [ ] [`_mm_mask_reduce_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_reduce_ph)
+ * [ ] [`_mm_mask_roundscale_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_roundscale_ph)
+ * [ ] [`_mm_mask_rsqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_rsqrt_ph)
+ * [ ] [`_mm_mask_scalef_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_scalef_ph)
+ * [ ] [`_mm_mask_sqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_sqrt_ph)
+ * [ ] [`_mm_mask_sub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mask_sub_ph)
+ * [ ] [`_mm_maskz_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_add_ph)
+ * [ ] [`_mm_maskz_cmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cmul_pch)
+ * [ ] [`_mm_maskz_conj_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_conj_pch)
+ * [ ] [`_mm_maskz_cvtepi16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtepi16_ph)
+ * [ ] [`_mm_maskz_cvtepi32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtepi32_ph)
+ * [ ] [`_mm_maskz_cvtepi64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtepi64_ph)
+ * [ ] [`_mm_maskz_cvtepu16_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtepu16_ph)
+ * [ ] [`_mm_maskz_cvtepu32_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtepu32_ph)
+ * [ ] [`_mm_maskz_cvtepu64_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtepu64_ph)
+ * [ ] [`_mm_maskz_cvtpd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtpd_ph)
+ * [ ] [`_mm_maskz_cvtph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtph_epi16)
+ * [ ] [`_mm_maskz_cvtph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtph_epi32)
+ * [ ] [`_mm_maskz_cvtph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtph_epi64)
+ * [ ] [`_mm_maskz_cvtph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtph_epu16)
+ * [ ] [`_mm_maskz_cvtph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtph_epu32)
+ * [ ] [`_mm_maskz_cvtph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtph_epu64)
+ * [ ] [`_mm_maskz_cvtph_pd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtph_pd)
+ * [ ] [`_mm_maskz_cvttph_epi16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvttph_epi16)
+ * [ ] [`_mm_maskz_cvttph_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvttph_epi32)
+ * [ ] [`_mm_maskz_cvttph_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvttph_epi64)
+ * [ ] [`_mm_maskz_cvttph_epu16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvttph_epu16)
+ * [ ] [`_mm_maskz_cvttph_epu32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvttph_epu32)
+ * [ ] [`_mm_maskz_cvttph_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvttph_epu64)
+ * [ ] [`_mm_maskz_cvtxph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtxph_ps)
+ * [ ] [`_mm_maskz_cvtxps_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_cvtxps_ph)
+ * [ ] [`_mm_maskz_div_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_div_ph)
+ * [ ] [`_mm_maskz_fcmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fcmadd_pch)
+ * [ ] [`_mm_maskz_fcmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fcmul_pch)
+ * [ ] [`_mm_maskz_fmadd_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmadd_pch)
+ * [ ] [`_mm_maskz_fmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmadd_ph)
+ * [ ] [`_mm_maskz_fmaddsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmaddsub_ph)
+ * [ ] [`_mm_maskz_fmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmsub_ph)
+ * [ ] [`_mm_maskz_fmsubadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmsubadd_ph)
+ * [ ] [`_mm_maskz_fmul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fmul_pch)
+ * [ ] [`_mm_maskz_fnmadd_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fnmadd_ph)
+ * [ ] [`_mm_maskz_fnmsub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_fnmsub_ph)
+ * [ ] [`_mm_maskz_getexp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_getexp_ph)
+ * [ ] [`_mm_maskz_getmant_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_getmant_ph)
+ * [ ] [`_mm_maskz_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_max_ph)
+ * [ ] [`_mm_maskz_max_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_max_round_sh)
+ * [ ] [`_mm_maskz_max_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_max_sh)
+ * [ ] [`_mm_maskz_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_min_ph)
+ * [ ] [`_mm_maskz_min_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_min_round_sh)
+ * [ ] [`_mm_maskz_min_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_min_sh)
+ * [ ] [`_mm_maskz_mul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_mul_pch)
+ * [ ] [`_mm_maskz_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_mul_ph)
+ * [ ] [`_mm_maskz_rcp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_rcp_ph)
+ * [ ] [`_mm_maskz_reduce_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_reduce_ph)
+ * [ ] [`_mm_maskz_roundscale_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_roundscale_ph)
+ * [ ] [`_mm_maskz_rsqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_rsqrt_ph)
+ * [ ] [`_mm_maskz_scalef_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_scalef_ph)
+ * [ ] [`_mm_maskz_sqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_sqrt_ph)
+ * [ ] [`_mm_maskz_sub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_maskz_sub_ph)
+ * [ ] [`_mm_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_ph)
+ * [ ] [`_mm_max_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_round_sh)
+ * [ ] [`_mm_max_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_max_sh)
+ * [ ] [`_mm_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_ph)
+ * [ ] [`_mm_min_round_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_round_sh)
+ * [ ] [`_mm_min_sh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_min_sh)
+ * [ ] [`_mm_mul_pch`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_pch)
+ * [ ] [`_mm_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mul_ph)
+ * [ ] [`_mm_permutex2var_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_permutex2var_ph)
+ * [ ] [`_mm_permutexvar_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_permutexvar_ph)
+ * [ ] [`_mm_rcp_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rcp_ph)
+ * [ ] [`_mm_reduce_add_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_add_ph)
+ * [ ] [`_mm_reduce_max_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_max_ph)
+ * [ ] [`_mm_reduce_min_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_min_ph)
+ * [ ] [`_mm_reduce_mul_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_mul_ph)
+ * [ ] [`_mm_reduce_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_reduce_ph)
+ * [ ] [`_mm_roundscale_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_roundscale_ph)
+ * [ ] [`_mm_rsqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_rsqrt_ph)
+ * [ ] [`_mm_scalef_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_scalef_ph)
+ * [ ] [`_mm_setzero_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_setzero_ph)
+ * [ ] [`_mm_sqrt_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sqrt_ph)
+ * [ ] [`_mm_store_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_store_ph)
+ * [ ] [`_mm_storeu_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_storeu_ph)
+ * [ ] [`_mm_sub_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sub_ph)
+ * [ ] [`_mm_undefined_ph`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_undefined_ph)
+
+
+
+["AVX512_VP2INTERSECT", "AVX512F"]
+
+ * [ ] [`_mm512_2intersect_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_2intersect_epi32)
+ * [ ] [`_mm512_2intersect_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm512_2intersect_epi64)
+
+
+
+["AVX512_VP2INTERSECT", "AVX512VL"]
+
+ * [ ] [`_mm256_2intersect_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_2intersect_epi32)
+ * [ ] [`_mm256_2intersect_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_2intersect_epi64)
+ * [ ] [`_mm_2intersect_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_2intersect_epi32)
+ * [ ] [`_mm_2intersect_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_2intersect_epi64)
+
+
+
+["AVX_IFMA"]
+
+ * [ ] [`_mm256_madd52hi_avx_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_madd52hi_avx_epu64)
+ * [ ] [`_mm256_madd52lo_avx_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_madd52lo_avx_epu64)
+ * [ ] [`_mm_madd52hi_avx_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_madd52hi_avx_epu64)
+ * [ ] [`_mm_madd52lo_avx_epu64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_madd52lo_avx_epu64)
+
+
+
+["AVX_NE_CONVERT"]
+
+ * [ ] [`_mm256_bcstnebf16_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_bcstnebf16_ps)
+ * [ ] [`_mm256_bcstnesh_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_bcstnesh_ps)
+ * [ ] [`_mm256_cvtneebf16_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtneebf16_ps)
+ * [ ] [`_mm256_cvtneeph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtneeph_ps)
+ * [ ] [`_mm256_cvtneobf16_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtneobf16_ps)
+ * [ ] [`_mm256_cvtneoph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtneoph_ps)
+ * [ ] [`_mm256_cvtneps_avx_pbh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_cvtneps_avx_pbh)
+ * [ ] [`_mm_bcstnebf16_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_bcstnebf16_ps)
+ * [ ] [`_mm_bcstnesh_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_bcstnesh_ps)
+ * [ ] [`_mm_cvtneebf16_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtneebf16_ps)
+ * [ ] [`_mm_cvtneeph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtneeph_ps)
+ * [ ] [`_mm_cvtneobf16_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtneobf16_ps)
+ * [ ] [`_mm_cvtneoph_ps`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtneoph_ps)
+ * [ ] [`_mm_cvtneps_avx_pbh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtneps_avx_pbh)
+ * [ ] [`_mm_cvtneps_pbh`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtneps_pbh)
+
+
+
+["AVX_VNNI"]
+
+ * [ ] [`_mm256_dpbusd_avx_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpbusd_avx_epi32)
+ * [ ] [`_mm256_dpbusds_avx_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpbusds_avx_epi32)
+ * [ ] [`_mm256_dpwssd_avx_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpwssd_avx_epi32)
+ * [ ] [`_mm256_dpwssds_avx_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpwssds_avx_epi32)
+ * [ ] [`_mm_dpbusd_avx_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpbusd_avx_epi32)
+ * [ ] [`_mm_dpbusds_avx_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpbusds_avx_epi32)
+ * [ ] [`_mm_dpwssd_avx_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpwssd_avx_epi32)
+ * [ ] [`_mm_dpwssds_avx_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpwssds_avx_epi32)
+
+
+
+["AVX_VNNI_INT16"]
+
+ * [ ] [`_mm256_dpwsud_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpwsud_epi32)
+ * [ ] [`_mm256_dpwsuds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpwsuds_epi32)
+ * [ ] [`_mm256_dpwusd_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpwusd_epi32)
+ * [ ] [`_mm256_dpwusds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpwusds_epi32)
+ * [ ] [`_mm256_dpwuud_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpwuud_epi32)
+ * [ ] [`_mm256_dpwuuds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpwuuds_epi32)
+ * [ ] [`_mm_dpwsud_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpwsud_epi32)
+ * [ ] [`_mm_dpwsuds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpwsuds_epi32)
+ * [ ] [`_mm_dpwusd_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpwusd_epi32)
+ * [ ] [`_mm_dpwusds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpwusds_epi32)
+ * [ ] [`_mm_dpwuud_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpwuud_epi32)
+ * [ ] [`_mm_dpwuuds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpwuuds_epi32)
+
+
+
+["AVX_VNNI_INT8"]
+
+ * [ ] [`_mm256_dpbssd_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpbssd_epi32)
+ * [ ] [`_mm256_dpbssds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpbssds_epi32)
+ * [ ] [`_mm256_dpbsud_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpbsud_epi32)
+ * [ ] [`_mm256_dpbsuds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpbsuds_epi32)
+ * [ ] [`_mm256_dpbuud_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpbuud_epi32)
+ * [ ] [`_mm256_dpbuuds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_dpbuuds_epi32)
+ * [ ] [`_mm_dpbssd_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpbssd_epi32)
+ * [ ] [`_mm_dpbssds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpbssds_epi32)
+ * [ ] [`_mm_dpbsud_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpbsud_epi32)
+ * [ ] [`_mm_dpbsuds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpbsuds_epi32)
+ * [ ] [`_mm_dpbuud_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpbuud_epi32)
+ * [ ] [`_mm_dpbuuds_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_dpbuuds_epi32)
+
+
+
+["CET_SS"]
+
+ * [ ] [`_clrssbsy`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_clrssbsy)
+ * [ ] [`_get_ssp`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_get_ssp)
+ * [ ] [`_get_ssp`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_get_ssp)
+ * [ ] [`_inc_ssp`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_inc_ssp)
+ * [ ] [`_incsspd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_incsspd)
+ * [ ] [`_incsspq`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_incsspq)
+ * [ ] [`_rdsspd_i32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_rdsspd_i32)
+ * [ ] [`_rdsspq_i64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_rdsspq_i64)
+ * [ ] [`_rstorssp`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_rstorssp)
+ * [ ] [`_saveprevssp`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_saveprevssp)
+ * [ ] [`_setssbsy`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_setssbsy)
+ * [ ] [`_wrssd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_wrssd)
+ * [ ] [`_wrssq`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_wrssq)
+ * [ ] [`_wrussd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_wrussd)
+ * [ ] [`_wrussq`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_wrussq)
+
+
+
+["CLDEMOTE"]
+
+ * [ ] [`_mm_cldemote`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cldemote)
+
+
+
+["CLFLUSHOPT"]
+
+ * [ ] [`_mm_clflushopt`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_clflushopt)
+
+
+
+["CLWB"]
+
+ * [ ] [`_mm_clwb`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_clwb)
+
+
+
+["CMPCCXADD"]
+
+ * [ ] [`_cmpccxadd_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_cmpccxadd_epi32)
+ * [ ] [`_cmpccxadd_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_cmpccxadd_epi64)
+
+
+
+["ENQCMD"]
+
+ * [ ] [`_enqcmd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_enqcmd)
+ * [ ] [`_enqcmds`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_enqcmds)
+
+
+
+["FSGSBASE"]
+
+ * [ ] [`_readfsbase_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_readfsbase_u32)
+ * [ ] [`_readfsbase_u64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_readfsbase_u64)
+ * [ ] [`_readgsbase_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_readgsbase_u32)
+ * [ ] [`_readgsbase_u64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_readgsbase_u64)
+ * [ ] [`_writefsbase_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_writefsbase_u32)
+ * [ ] [`_writefsbase_u64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_writefsbase_u64)
+ * [ ] [`_writegsbase_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_writegsbase_u32)
+ * [ ] [`_writegsbase_u64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_writegsbase_u64)
+
+
+
+["HRESET"]
+
+ * [ ] [`_hreset`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_hreset)
+
+
+
+["INVPCID"]
+
+ * [ ] [`_invpcid`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_invpcid)
+
+
+
+["KEYLOCKER"]
+
+ * [ ] [`_mm_aesdec128kl_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_aesdec128kl_u8)
+ * [ ] [`_mm_aesdec256kl_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_aesdec256kl_u8)
+ * [ ] [`_mm_aesenc128kl_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_aesenc128kl_u8)
+ * [ ] [`_mm_aesenc256kl_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_aesenc256kl_u8)
+ * [ ] [`_mm_encodekey128_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_encodekey128_u32)
+ * [ ] [`_mm_encodekey256_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_encodekey256_u32)
+ * [ ] [`_mm_loadiwkey`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_loadiwkey)
+
+
+
+["KEYLOCKER_WIDE"]
+
+ * [ ] [`_mm_aesdecwide128kl_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_aesdecwide128kl_u8)
+ * [ ] [`_mm_aesdecwide256kl_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_aesdecwide256kl_u8)
+ * [ ] [`_mm_aesencwide128kl_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_aesencwide128kl_u8)
+ * [ ] [`_mm_aesencwide256kl_u8`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_aesencwide256kl_u8)
+
+
+
+["MONITOR"]
+
+ * [ ] [`_mm_monitor`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_monitor)
+ * [ ] [`_mm_mwait`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_mwait)
+
+
+
+["MOVBE"]
+
+ * [ ] [`_loadbe_i16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_loadbe_i16)
+ * [ ] [`_loadbe_i32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_loadbe_i32)
+ * [ ] [`_loadbe_i64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_loadbe_i64)
+ * [ ] [`_storebe_i16`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_storebe_i16)
+ * [ ] [`_storebe_i32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_storebe_i32)
+ * [ ] [`_storebe_i64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_storebe_i64)
+
+
+
+["MOVDIR64B"]
+
+ * [ ] [`_movdir64b`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_movdir64b)
+
+
+
+["MOVDIRI"]
+
+ * [ ] [`_directstoreu_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_directstoreu_u32)
+ * [ ] [`_directstoreu_u64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_directstoreu_u64)
+
+
+
+["PCONFIG"]
+
+ * [ ] [`_pconfig_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_pconfig_u32)
+
+
+
+["POPCNT"]
+
+ * [ ] [`_mm_popcnt_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_popcnt_u32)
+ * [ ] [`_mm_popcnt_u64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_popcnt_u64)
+
+
+
+["PREFETCHI"]
+
+ * [ ] [`_m_prefetchit0`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_m_prefetchit0)
+ * [ ] [`_m_prefetchit1`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_m_prefetchit1)
+
+
+
+["RAO_INT"]
+
+ * [ ] [`_aadd_i32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_aadd_i32)
+ * [ ] [`_aadd_i64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_aadd_i64)
+ * [ ] [`_aand_i32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_aand_i32)
+ * [ ] [`_aand_i64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_aand_i64)
+ * [ ] [`_aor_i32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_aor_i32)
+ * [ ] [`_aor_i64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_aor_i64)
+ * [ ] [`_axor_i32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_axor_i32)
+ * [ ] [`_axor_i64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_axor_i64)
+
+
+
+["RDPID"]
+
+ * [ ] [`_rdpid_u32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_rdpid_u32)
+
+
+
+["SERIALIZE"]
+
+ * [ ] [`_serialize`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_serialize)
+
+
+
+["SHA512", "SHA512"]
+
+ * [ ] [`_mm256_sha512msg1_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_sha512msg1_epi64)
+ * [ ] [`_mm256_sha512msg2_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_sha512msg2_epi64)
+ * [ ] [`_mm256_sha512rnds2_epi64`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_sha512rnds2_epi64)
+
+
+
+["SM3"]
+
+ * [ ] [`_mm_sm3msg1_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sm3msg1_epi32)
+ * [ ] [`_mm_sm3msg2_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sm3msg2_epi32)
+ * [ ] [`_mm_sm3rnds2_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sm3rnds2_epi32)
+
+
+
+["SM4"]
+
+ * [ ] [`_mm256_sm4key4_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_sm4key4_epi32)
+ * [ ] [`_mm256_sm4rnds4_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_sm4rnds4_epi32)
+ * [ ] [`_mm_sm4key4_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sm4key4_epi32)
+ * [ ] [`_mm_sm4rnds4_epi32`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_sm4rnds4_epi32)
+
+
+
+["SSE"]
+
+ * [ ] [`_mm_free`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_free)
+ * [ ] [`_mm_malloc`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_malloc)
+
+
+
+["TSXLDTRK"]
+
+ * [ ] [`_xresldtrk`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_xresldtrk)
+ * [ ] [`_xsusldtrk`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_xsusldtrk)
+
+
+
+["UINTR"]
+
+ * [ ] [`_clui`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_clui)
+ * [ ] [`_senduipi`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_senduipi)
+ * [ ] [`_stui`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_stui)
+ * [ ] [`_testui`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_testui)
+
+
+
+["USER_MSR"]
+
+ * [ ] [`_urdmsr`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_urdmsr)
+ * [ ] [`_uwrmsr`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_uwrmsr)
+
+
+
+["WAITPKG"]
+
+ * [ ] [`_tpause`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_tpause)
+ * [ ] [`_umonitor`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_umonitor)
+ * [ ] [`_umwait`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_umwait)
+
+
+
+["WBNOINVD"]
+
+ * [ ] [`_wbnoinvd`](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_wbnoinvd)
+
+
diff --git a/crates/core_arch/src/x86/avx.rs b/crates/core_arch/src/x86/avx.rs
index 82fe0acd23..aa5a5d8c18 100644
--- a/crates/core_arch/src/x86/avx.rs
+++ b/crates/core_arch/src/x86/avx.rs
@@ -52,9 +52,8 @@ pub unsafe fn _mm256_add_ps(a: __m256, b: __m256) -> __m256 {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_and_pd)
#[inline]
#[target_feature(enable = "avx")]
-// FIXME: Should be 'vandpd' instruction.
// See https://github.com/rust-lang/stdarch/issues/71
-#[cfg_attr(test, assert_instr(vandps))]
+#[cfg_attr(test, assert_instr(vandp))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm256_and_pd(a: __m256d, b: __m256d) -> __m256d {
let a: u64x4 = transmute(a);
@@ -82,9 +81,8 @@ pub unsafe fn _mm256_and_ps(a: __m256, b: __m256) -> __m256 {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_or_pd)
#[inline]
#[target_feature(enable = "avx")]
-// FIXME: should be `vorpd` instruction.
// See .
-#[cfg_attr(test, assert_instr(vorps))]
+#[cfg_attr(test, assert_instr(vorp))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm256_or_pd(a: __m256d, b: __m256d) -> __m256d {
let a: u64x4 = transmute(a);
@@ -162,8 +160,7 @@ pub unsafe fn _mm256_shuffle_ps(a: __m256, b: __m256) -> __m256
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_andnot_pd)
#[inline]
#[target_feature(enable = "avx")]
-// FIXME: should be `vandnpd` instruction.
-#[cfg_attr(test, assert_instr(vandnps))]
+#[cfg_attr(test, assert_instr(vandnp))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm256_andnot_pd(a: __m256d, b: __m256d) -> __m256d {
let a: u64x4 = transmute(a);
@@ -615,8 +612,7 @@ pub unsafe fn _mm256_hsub_ps(a: __m256, b: __m256) -> __m256 {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_xor_pd)
#[inline]
#[target_feature(enable = "avx")]
-// FIXME Should be 'vxorpd' instruction.
-#[cfg_attr(test, assert_instr(vxorps))]
+#[cfg_attr(test, assert_instr(vxorp))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm256_xor_pd(a: __m256d, b: __m256d) -> __m256d {
let a: u64x4 = transmute(a);
@@ -943,7 +939,7 @@ pub unsafe fn _mm256_cvttps_epi32(a: __m256) -> __m256i {
#[inline]
#[target_feature(enable = "avx")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf128, IMM1 = 1)
)]
#[rustc_legacy_const_generics(1)]
@@ -964,7 +960,7 @@ pub unsafe fn _mm256_extractf128_ps(a: __m256) -> __m128 {
#[inline]
#[target_feature(enable = "avx")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf128, IMM1 = 1)
)]
#[rustc_legacy_const_generics(1)]
@@ -980,7 +976,7 @@ pub unsafe fn _mm256_extractf128_pd(a: __m256d) -> __m128d {
#[inline]
#[target_feature(enable = "avx")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf128, IMM1 = 1)
)]
#[rustc_legacy_const_generics(1)]
@@ -995,6 +991,29 @@ pub unsafe fn _mm256_extractf128_si256(a: __m256i) -> __m128i {
transmute(dst)
}
+/// Extracts a 32-bit integer from `a`, selected with `INDEX`.
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_extract_epi32)
+#[inline]
+#[target_feature(enable = "avx")]
+// This intrinsic has no corresponding instruction.
+#[rustc_legacy_const_generics(1)]
+#[stable(feature = "simd_x86", since = "1.27.0")]
+pub unsafe fn _mm256_extract_epi32(a: __m256i) -> i32 {
+ static_assert_uimm_bits!(INDEX, 3);
+ simd_extract!(a.as_i32x8(), INDEX as u32)
+}
+
+/// Returns the first element of the input vector of `[8 x i32]`.
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_cvtsi256_si32)
+#[inline]
+#[target_feature(enable = "avx")]
+#[stable(feature = "simd_x86", since = "1.27.0")]
+pub unsafe fn _mm256_cvtsi256_si32(a: __m256i) -> i32 {
+ simd_extract!(a.as_i32x8(), 0)
+}
+
/// Zeroes the contents of all XMM or YMM registers.
///
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_zeroall)
@@ -1270,7 +1289,7 @@ pub unsafe fn _mm256_broadcast_pd(a: &__m128d) -> __m256d {
#[inline]
#[target_feature(enable = "avx")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vinsertf128, IMM1 = 1)
)]
#[rustc_legacy_const_generics(2)]
@@ -1292,7 +1311,7 @@ pub unsafe fn _mm256_insertf128_ps(a: __m256, b: __m128) -> __m
#[inline]
#[target_feature(enable = "avx")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vinsertf128, IMM1 = 1)
)]
#[rustc_legacy_const_generics(2)]
@@ -1313,7 +1332,7 @@ pub unsafe fn _mm256_insertf128_pd(a: __m256d, b: __m128d) -> _
#[inline]
#[target_feature(enable = "avx")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vinsertf128, IMM1 = 1)
)]
#[rustc_legacy_const_generics(2)]
@@ -1378,7 +1397,7 @@ pub unsafe fn _mm256_insert_epi32(a: __m256i, i: i32) -> __m25
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_load_pd)
#[inline]
#[target_feature(enable = "avx")]
-#[cfg_attr(test, assert_instr(vmovaps))] // FIXME vmovapd expected
+#[cfg_attr(test, assert_instr(vmovap))]
#[stable(feature = "simd_x86", since = "1.27.0")]
#[allow(clippy::cast_ptr_alignment)]
pub unsafe fn _mm256_load_pd(mem_addr: *const f64) -> __m256d {
@@ -1393,7 +1412,7 @@ pub unsafe fn _mm256_load_pd(mem_addr: *const f64) -> __m256d {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_store_pd)
#[inline]
#[target_feature(enable = "avx")]
-#[cfg_attr(test, assert_instr(vmovaps))] // FIXME vmovapd expected
+#[cfg_attr(test, assert_instr(vmovap))]
#[stable(feature = "simd_x86", since = "1.27.0")]
#[allow(clippy::cast_ptr_alignment)]
pub unsafe fn _mm256_store_pd(mem_addr: *mut f64, a: __m256d) {
@@ -1437,7 +1456,7 @@ pub unsafe fn _mm256_store_ps(mem_addr: *mut f32, a: __m256) {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_loadu_pd)
#[inline]
#[target_feature(enable = "avx")]
-#[cfg_attr(test, assert_instr(vmovups))] // FIXME vmovupd expected
+#[cfg_attr(test, assert_instr(vmovup))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm256_loadu_pd(mem_addr: *const f64) -> __m256d {
let mut dst = _mm256_undefined_pd();
@@ -1456,7 +1475,7 @@ pub unsafe fn _mm256_loadu_pd(mem_addr: *const f64) -> __m256d {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_storeu_pd)
#[inline]
#[target_feature(enable = "avx")]
-#[cfg_attr(test, assert_instr(vmovups))] // FIXME vmovupd expected
+#[cfg_attr(test, assert_instr(vmovup))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm256_storeu_pd(mem_addr: *mut f64, a: __m256d) {
mem_addr.cast::<__m256d>().write_unaligned(a);
@@ -1715,11 +1734,11 @@ pub unsafe fn _mm256_lddqu_si256(mem_addr: *const __m256i) -> __m256i {
/// See [`_mm_sfence`] for details.
#[inline]
#[target_feature(enable = "avx")]
-#[cfg_attr(test, assert_instr(vmovntps))] // FIXME vmovntdq
+#[cfg_attr(test, assert_instr(vmovntdq))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm256_stream_si256(mem_addr: *mut __m256i, a: __m256i) {
crate::arch::asm!(
- "vmovntps [{mem_addr}], {a}",
+ "vmovntdq [{mem_addr}], {a}",
mem_addr = in(reg) mem_addr,
a = in(ymm_reg) a,
options(nostack, preserves_flags),
@@ -1742,12 +1761,12 @@ pub unsafe fn _mm256_stream_si256(mem_addr: *mut __m256i, a: __m256i) {
/// See [`_mm_sfence`] for details.
#[inline]
#[target_feature(enable = "avx")]
-#[cfg_attr(test, assert_instr(vmovntps))] // FIXME vmovntpd
+#[cfg_attr(test, assert_instr(vmovntpd))]
#[stable(feature = "simd_x86", since = "1.27.0")]
#[allow(clippy::cast_ptr_alignment)]
pub unsafe fn _mm256_stream_pd(mem_addr: *mut f64, a: __m256d) {
crate::arch::asm!(
- "vmovntps [{mem_addr}], {a}",
+ "vmovntpd [{mem_addr}], {a}",
mem_addr = in(reg) mem_addr,
a = in(ymm_reg) a,
options(nostack, preserves_flags),
@@ -2145,7 +2164,7 @@ pub unsafe fn _mm256_movemask_ps(a: __m256) -> i32 {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_setzero_pd)
#[inline]
#[target_feature(enable = "avx")]
-#[cfg_attr(test, assert_instr(vxorps))] // FIXME vxorpd expected
+#[cfg_attr(test, assert_instr(vxorp))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm256_setzero_pd() -> __m256d {
_mm256_set1_pd(0.0)
@@ -2676,8 +2695,7 @@ pub unsafe fn _mm256_castsi256_si128(a: __m256i) -> __m128i {
// instructions, thus it has zero latency.
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm256_castps128_ps256(a: __m128) -> __m256 {
- // FIXME simd_shuffle!(a, a, [0, 1, 2, 3, -1, -1, -1, -1])
- simd_shuffle!(a, a, [0, 1, 2, 3, 0, 0, 0, 0])
+ simd_shuffle!(a, _mm_undefined_ps(), [0, 1, 2, 3, 4, 4, 4, 4])
}
/// Casts vector of type __m128d to type __m256d;
@@ -2690,8 +2708,7 @@ pub unsafe fn _mm256_castps128_ps256(a: __m128) -> __m256 {
// instructions, thus it has zero latency.
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm256_castpd128_pd256(a: __m128d) -> __m256d {
- // FIXME simd_shuffle!(a, a, [0, 1, -1, -1])
- simd_shuffle!(a, a, [0, 1, 0, 0])
+ simd_shuffle!(a, _mm_undefined_pd(), [0, 1, 2, 2])
}
/// Casts vector of type __m128i to type __m256i;
@@ -2705,8 +2722,8 @@ pub unsafe fn _mm256_castpd128_pd256(a: __m128d) -> __m256d {
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm256_castsi128_si256(a: __m128i) -> __m256i {
let a = a.as_i64x2();
- // FIXME simd_shuffle!(a, a, [0, 1, -1, -1])
- let dst: i64x4 = simd_shuffle!(a, a, [0, 1, 0, 0]);
+ let undefined = _mm_undefined_si128().as_i64x2();
+ let dst: i64x4 = simd_shuffle!(a, undefined, [0, 1, 2, 2]);
transmute(dst)
}
@@ -3719,6 +3736,22 @@ mod tests {
assert_eq_m128i(r, e);
}
+ #[simd_test(enable = "avx")]
+ unsafe fn test_mm256_extract_epi32() {
+ let a = _mm256_setr_epi32(-1, 1, 2, 3, 4, 5, 6, 7);
+ let r1 = _mm256_extract_epi32::<0>(a);
+ let r2 = _mm256_extract_epi32::<3>(a);
+ assert_eq!(r1, -1);
+ assert_eq!(r2, 3);
+ }
+
+ #[simd_test(enable = "avx")]
+ unsafe fn test_mm256_cvtsi256_si32() {
+ let a = _mm256_setr_epi32(1, 2, 3, 4, 5, 6, 7, 8);
+ let r = _mm256_cvtsi256_si32(a);
+ assert_eq!(r, 1);
+ }
+
#[simd_test(enable = "avx")]
#[cfg_attr(miri, ignore)] // Register-level operation not supported by Miri
unsafe fn test_mm256_zeroall() {
@@ -4698,6 +4731,27 @@ mod tests {
assert_eq_m128i(r, _mm_setr_epi64x(1, 2));
}
+ #[simd_test(enable = "avx")]
+ unsafe fn test_mm256_castps128_ps256() {
+ let a = _mm_setr_ps(1., 2., 3., 4.);
+ let r = _mm256_castps128_ps256(a);
+ assert_eq_m128(_mm256_castps256_ps128(r), a);
+ }
+
+ #[simd_test(enable = "avx")]
+ unsafe fn test_mm256_castpd128_pd256() {
+ let a = _mm_setr_pd(1., 2.);
+ let r = _mm256_castpd128_pd256(a);
+ assert_eq_m128d(_mm256_castpd256_pd128(r), a);
+ }
+
+ #[simd_test(enable = "avx")]
+ unsafe fn test_mm256_castsi128_si256() {
+ let a = _mm_setr_epi32(1, 2, 3, 4);
+ let r = _mm256_castsi128_si256(a);
+ assert_eq_m128i(_mm256_castsi256_si128(r), a);
+ }
+
#[simd_test(enable = "avx")]
unsafe fn test_mm256_zextps128_ps256() {
let a = _mm_setr_ps(1., 2., 3., 4.);
diff --git a/crates/core_arch/src/x86/avx2.rs b/crates/core_arch/src/x86/avx2.rs
index fa70661003..0343416a92 100644
--- a/crates/core_arch/src/x86/avx2.rs
+++ b/crates/core_arch/src/x86/avx2.rs
@@ -587,6 +587,19 @@ pub unsafe fn _mm256_broadcastsd_pd(a: __m128d) -> __m256d {
simd_shuffle!(a, _mm_setzero_pd(), [0_u32; 4])
}
+/// Broadcasts 128 bits of integer data from a to all 128-bit lanes in
+/// the 256-bit returned value.
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_broadcastsi128_si256)
+#[inline]
+#[target_feature(enable = "avx2")]
+#[unstable(feature = "simd_x86_updates", issue = "126936")]
+pub unsafe fn _mm_broadcastsi128_si256(a: __m128i) -> __m256i {
+ let zero = _mm_setzero_si128();
+ let ret = simd_shuffle!(a.as_i64x2(), zero.as_i64x2(), [0, 1, 0, 1]);
+ transmute::(ret)
+}
+
// N.B., `broadcastsi128_si256` is often compiled to `vinsertf128` or
// `vbroadcastf128`.
/// Broadcasts 128 bits of integer data from a to all 128-bit lanes in
@@ -896,7 +909,7 @@ pub unsafe fn _mm256_cvtepu8_epi64(a: __m128i) -> __m256i {
#[inline]
#[target_feature(enable = "avx2")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf128, IMM1 = 1)
)]
#[rustc_legacy_const_generics(1)]
@@ -1718,7 +1731,7 @@ pub unsafe fn _mm256_mask_i64gather_pd(
#[inline]
#[target_feature(enable = "avx2")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vinsertf128, IMM1 = 1)
)]
#[rustc_legacy_const_generics(2)]
@@ -3124,7 +3137,25 @@ pub unsafe fn _mm256_srlv_epi64(a: __m256i, count: __m256i) -> __m256i {
transmute(psrlvq256(a.as_i64x4(), count.as_i64x4()))
}
-// TODO _mm256_stream_load_si256 (__m256i const* mem_addr)
+/// Load 256-bits of integer data from memory into dst using a non-temporal memory hint. mem_addr
+/// must be aligned on a 32-byte boundary or a general-protection exception may be generated. To
+/// minimize caching, the data is flagged as non-temporal (unlikely to be used again soon)
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_stream_load_si256)
+#[inline]
+#[target_feature(enable = "avx,avx2")]
+#[cfg_attr(test, assert_instr(vmovntdqa))]
+#[unstable(feature = "simd_x86_updates", issue = "126936")]
+pub unsafe fn _mm256_stream_load_si256(mem_addr: *const __m256i) -> __m256i {
+ let dst: __m256i;
+ crate::arch::asm!(
+ "vmovntdqa {a}, [{mem_addr}]",
+ a = out(ymm_reg) dst,
+ mem_addr = in(reg) mem_addr,
+ options(pure, readonly, nostack, preserves_flags),
+ );
+ dst
+}
/// Subtract packed 16-bit integers in `b` from packed 16-bit integers in `a`
///
@@ -3612,29 +3643,6 @@ pub unsafe fn _mm256_extract_epi16(a: __m256i) -> i32 {
simd_extract!(a.as_u16x16(), INDEX as u32, u16) as i32
}
-/// Extracts a 32-bit integer from `a`, selected with `INDEX`.
-///
-/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_extract_epi32)
-#[inline]
-#[target_feature(enable = "avx2")]
-// This intrinsic has no corresponding instruction.
-#[rustc_legacy_const_generics(1)]
-#[stable(feature = "simd_x86", since = "1.27.0")]
-pub unsafe fn _mm256_extract_epi32(a: __m256i) -> i32 {
- static_assert_uimm_bits!(INDEX, 3);
- simd_extract!(a.as_i32x8(), INDEX as u32)
-}
-
-/// Returns the first element of the input vector of `[8 x i32]`.
-///
-/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_cvtsi256_si32)
-#[inline]
-#[target_feature(enable = "avx2")]
-#[stable(feature = "simd_x86", since = "1.27.0")]
-pub unsafe fn _mm256_cvtsi256_si32(a: __m256i) -> i32 {
- simd_extract!(a.as_i32x8(), 0)
-}
-
#[allow(improper_ctypes)]
extern "C" {
#[link_name = "llvm.x86.avx2.phadd.w"]
@@ -4209,6 +4217,19 @@ mod tests {
assert_eq_m256d(res, _mm256_set1_pd(6.88f64));
}
+ #[simd_test(enable = "avx2")]
+ unsafe fn test_mm_broadcastsi128_si256() {
+ let a = _mm_setr_epi64x(0x0987654321012334, 0x5678909876543210);
+ let res = _mm_broadcastsi128_si256(a);
+ let retval = _mm256_setr_epi64x(
+ 0x0987654321012334,
+ 0x5678909876543210,
+ 0x0987654321012334,
+ 0x5678909876543210,
+ );
+ assert_eq_m256i(res, retval);
+ }
+
#[simd_test(enable = "avx2")]
unsafe fn test_mm256_broadcastsi128_si256() {
let a = _mm_setr_epi64x(0x0987654321012334, 0x5678909876543210);
@@ -5178,6 +5199,13 @@ mod tests {
assert_eq_m256i(r, e);
}
+ #[simd_test(enable = "avx2")]
+ unsafe fn test_mm256_stream_load_si256() {
+ let a = _mm256_set_epi64x(5, 6, 7, 8);
+ let r = _mm256_stream_load_si256(core::ptr::addr_of!(a) as *const _);
+ assert_eq_m256i(a, r);
+ }
+
#[simd_test(enable = "avx2")]
unsafe fn test_mm256_sub_epi16() {
let a = _mm256_set1_epi16(4);
@@ -5751,20 +5779,4 @@ mod tests {
assert_eq!(r1, 0xFFFF);
assert_eq!(r2, 3);
}
-
- #[simd_test(enable = "avx2")]
- unsafe fn test_mm256_extract_epi32() {
- let a = _mm256_setr_epi32(-1, 1, 2, 3, 4, 5, 6, 7);
- let r1 = _mm256_extract_epi32::<0>(a);
- let r2 = _mm256_extract_epi32::<3>(a);
- assert_eq!(r1, -1);
- assert_eq!(r2, 3);
- }
-
- #[simd_test(enable = "avx2")]
- unsafe fn test_mm256_cvtsi256_si32() {
- let a = _mm256_setr_epi32(1, 2, 3, 4, 5, 6, 7, 8);
- let r = _mm256_cvtsi256_si32(a);
- assert_eq!(r, 1);
- }
}
diff --git a/crates/core_arch/src/x86/avx512bw.rs b/crates/core_arch/src/x86/avx512bw.rs
index 936d4a0041..1f786d01f0 100644
--- a/crates/core_arch/src/x86/avx512bw.rs
+++ b/crates/core_arch/src/x86/avx512bw.rs
@@ -4575,6 +4575,7 @@ pub unsafe fn _mm_storeu_epi8(mem_addr: *mut i8, a: __m128i) {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_loadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512bw")]
+#[cfg_attr(test, assert_instr(vmovdqu16))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_loadu_epi16(src: __m512i, k: __mmask32, mem_addr: *const i16) -> __m512i {
let mut dst: __m512i = src;
@@ -4583,7 +4584,7 @@ pub unsafe fn _mm512_mask_loadu_epi16(src: __m512i, k: __mmask32, mem_addr: *con
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4595,6 +4596,7 @@ pub unsafe fn _mm512_mask_loadu_epi16(src: __m512i, k: __mmask32, mem_addr: *con
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_loadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512bw")]
+#[cfg_attr(test, assert_instr(vmovdqu16))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_loadu_epi16(k: __mmask32, mem_addr: *const i16) -> __m512i {
let mut dst: __m512i;
@@ -4603,7 +4605,7 @@ pub unsafe fn _mm512_maskz_loadu_epi16(k: __mmask32, mem_addr: *const i16) -> __
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4615,6 +4617,7 @@ pub unsafe fn _mm512_maskz_loadu_epi16(k: __mmask32, mem_addr: *const i16) -> __
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_loadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw")]
+#[cfg_attr(test, assert_instr(vmovdqu8))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_loadu_epi8(src: __m512i, k: __mmask64, mem_addr: *const i8) -> __m512i {
let mut dst: __m512i = src;
@@ -4623,7 +4626,7 @@ pub unsafe fn _mm512_mask_loadu_epi8(src: __m512i, k: __mmask64, mem_addr: *cons
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4635,6 +4638,7 @@ pub unsafe fn _mm512_mask_loadu_epi8(src: __m512i, k: __mmask64, mem_addr: *cons
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_loadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw")]
+#[cfg_attr(test, assert_instr(vmovdqu8))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_loadu_epi8(k: __mmask64, mem_addr: *const i8) -> __m512i {
let mut dst: __m512i;
@@ -4643,7 +4647,7 @@ pub unsafe fn _mm512_maskz_loadu_epi8(k: __mmask64, mem_addr: *const i8) -> __m5
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4655,6 +4659,7 @@ pub unsafe fn _mm512_maskz_loadu_epi8(k: __mmask64, mem_addr: *const i8) -> __m5
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_loadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu16))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_loadu_epi16(src: __m256i, k: __mmask16, mem_addr: *const i16) -> __m256i {
let mut dst: __m256i = src;
@@ -4663,7 +4668,7 @@ pub unsafe fn _mm256_mask_loadu_epi16(src: __m256i, k: __mmask16, mem_addr: *con
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4675,6 +4680,7 @@ pub unsafe fn _mm256_mask_loadu_epi16(src: __m256i, k: __mmask16, mem_addr: *con
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_loadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu16))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_loadu_epi16(k: __mmask16, mem_addr: *const i16) -> __m256i {
let mut dst: __m256i;
@@ -4683,7 +4689,7 @@ pub unsafe fn _mm256_maskz_loadu_epi16(k: __mmask16, mem_addr: *const i16) -> __
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4695,6 +4701,7 @@ pub unsafe fn _mm256_maskz_loadu_epi16(k: __mmask16, mem_addr: *const i16) -> __
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_loadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu8))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_loadu_epi8(src: __m256i, k: __mmask32, mem_addr: *const i8) -> __m256i {
let mut dst: __m256i = src;
@@ -4703,7 +4710,7 @@ pub unsafe fn _mm256_mask_loadu_epi8(src: __m256i, k: __mmask32, mem_addr: *cons
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4715,6 +4722,7 @@ pub unsafe fn _mm256_mask_loadu_epi8(src: __m256i, k: __mmask32, mem_addr: *cons
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_loadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu8))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_loadu_epi8(k: __mmask32, mem_addr: *const i8) -> __m256i {
let mut dst: __m256i;
@@ -4723,7 +4731,7 @@ pub unsafe fn _mm256_maskz_loadu_epi8(k: __mmask32, mem_addr: *const i8) -> __m2
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4735,6 +4743,7 @@ pub unsafe fn _mm256_maskz_loadu_epi8(k: __mmask32, mem_addr: *const i8) -> __m2
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_loadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu16))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_loadu_epi16(src: __m128i, k: __mmask8, mem_addr: *const i16) -> __m128i {
let mut dst: __m128i = src;
@@ -4743,7 +4752,7 @@ pub unsafe fn _mm_mask_loadu_epi16(src: __m128i, k: __mmask8, mem_addr: *const i
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4755,6 +4764,7 @@ pub unsafe fn _mm_mask_loadu_epi16(src: __m128i, k: __mmask8, mem_addr: *const i
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_loadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu16))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_loadu_epi16(k: __mmask8, mem_addr: *const i16) -> __m128i {
let mut dst: __m128i;
@@ -4763,7 +4773,7 @@ pub unsafe fn _mm_maskz_loadu_epi16(k: __mmask8, mem_addr: *const i16) -> __m128
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4775,6 +4785,7 @@ pub unsafe fn _mm_maskz_loadu_epi16(k: __mmask8, mem_addr: *const i16) -> __m128
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_loadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu8))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_loadu_epi8(src: __m128i, k: __mmask16, mem_addr: *const i8) -> __m128i {
let mut dst: __m128i = src;
@@ -4783,7 +4794,7 @@ pub unsafe fn _mm_mask_loadu_epi8(src: __m128i, k: __mmask16, mem_addr: *const i
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4795,6 +4806,7 @@ pub unsafe fn _mm_mask_loadu_epi8(src: __m128i, k: __mmask16, mem_addr: *const i
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_loadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu8))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_loadu_epi8(k: __mmask16, mem_addr: *const i8) -> __m128i {
let mut dst: __m128i;
@@ -4803,7 +4815,7 @@ pub unsafe fn _mm_maskz_loadu_epi8(k: __mmask16, mem_addr: *const i8) -> __m128i
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -4814,6 +4826,7 @@ pub unsafe fn _mm_maskz_loadu_epi8(k: __mmask16, mem_addr: *const i8) -> __m128i
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_storeu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512bw")]
+#[cfg_attr(test, assert_instr(vmovdqu16))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_storeu_epi16(mem_addr: *mut i16, mask: __mmask32, a: __m512i) {
asm!(
@@ -4821,7 +4834,7 @@ pub unsafe fn _mm512_mask_storeu_epi16(mem_addr: *mut i16, mask: __mmask32, a: _
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(zmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -4831,6 +4844,7 @@ pub unsafe fn _mm512_mask_storeu_epi16(mem_addr: *mut i16, mask: __mmask32, a: _
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_storeu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw")]
+#[cfg_attr(test, assert_instr(vmovdqu8))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_storeu_epi8(mem_addr: *mut i8, mask: __mmask64, a: __m512i) {
asm!(
@@ -4838,7 +4852,7 @@ pub unsafe fn _mm512_mask_storeu_epi8(mem_addr: *mut i8, mask: __mmask64, a: __m
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(zmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -4848,6 +4862,7 @@ pub unsafe fn _mm512_mask_storeu_epi8(mem_addr: *mut i8, mask: __mmask64, a: __m
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_storeu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu16))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_storeu_epi16(mem_addr: *mut i16, mask: __mmask16, a: __m256i) {
asm!(
@@ -4855,7 +4870,7 @@ pub unsafe fn _mm256_mask_storeu_epi16(mem_addr: *mut i16, mask: __mmask16, a: _
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(ymm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -4865,6 +4880,7 @@ pub unsafe fn _mm256_mask_storeu_epi16(mem_addr: *mut i16, mask: __mmask16, a: _
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_storeu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu8))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_storeu_epi8(mem_addr: *mut i8, mask: __mmask32, a: __m256i) {
asm!(
@@ -4872,7 +4888,7 @@ pub unsafe fn _mm256_mask_storeu_epi8(mem_addr: *mut i8, mask: __mmask32, a: __m
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(ymm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -4882,6 +4898,7 @@ pub unsafe fn _mm256_mask_storeu_epi8(mem_addr: *mut i8, mask: __mmask32, a: __m
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_storeu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu16))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_storeu_epi16(mem_addr: *mut i16, mask: __mmask8, a: __m128i) {
asm!(
@@ -4889,7 +4906,7 @@ pub unsafe fn _mm_mask_storeu_epi16(mem_addr: *mut i16, mask: __mmask8, a: __m12
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(xmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -4899,6 +4916,7 @@ pub unsafe fn _mm_mask_storeu_epi16(mem_addr: *mut i16, mask: __mmask8, a: __m12
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_storeu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu8))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_storeu_epi8(mem_addr: *mut i8, mask: __mmask16, a: __m128i) {
asm!(
@@ -4906,7 +4924,7 @@ pub unsafe fn _mm_mask_storeu_epi8(mem_addr: *mut i8, mask: __mmask16, a: __m128
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(xmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -8761,7 +8779,7 @@ pub unsafe fn _mm_mask_testn_epi8_mask(k: __mmask16, a: __m128i, b: __m128i) ->
#[target_feature(enable = "avx512bw")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(test, assert_instr(mov))] //should be kmovq
-pub unsafe fn _store_mask64(mem_addr: *mut u64, a: __mmask64) {
+pub unsafe fn _store_mask64(mem_addr: *mut __mmask64, a: __mmask64) {
ptr::write(mem_addr as *mut __mmask64, a);
}
@@ -8772,7 +8790,7 @@ pub unsafe fn _store_mask64(mem_addr: *mut u64, a: __mmask64) {
#[target_feature(enable = "avx512bw")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(test, assert_instr(mov))] //should be kmovd
-pub unsafe fn _store_mask32(mem_addr: *mut u32, a: __mmask32) {
+pub unsafe fn _store_mask32(mem_addr: *mut __mmask32, a: __mmask32) {
ptr::write(mem_addr as *mut __mmask32, a);
}
@@ -8783,7 +8801,7 @@ pub unsafe fn _store_mask32(mem_addr: *mut u32, a: __mmask32) {
#[target_feature(enable = "avx512bw")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(test, assert_instr(mov))] //should be kmovq
-pub unsafe fn _load_mask64(mem_addr: *const u64) -> __mmask64 {
+pub unsafe fn _load_mask64(mem_addr: *const __mmask64) -> __mmask64 {
ptr::read(mem_addr as *const __mmask64)
}
@@ -8794,7 +8812,7 @@ pub unsafe fn _load_mask64(mem_addr: *const u64) -> __mmask64 {
#[target_feature(enable = "avx512bw")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(test, assert_instr(mov))] //should be kmovd
-pub unsafe fn _load_mask32(mem_addr: *const u32) -> __mmask32 {
+pub unsafe fn _load_mask32(mem_addr: *const __mmask32) -> __mmask32 {
ptr::read(mem_addr as *const __mmask32)
}
diff --git a/crates/core_arch/src/x86/avx512dq.rs b/crates/core_arch/src/x86/avx512dq.rs
index 08018bef86..ac88f0eca7 100644
--- a/crates/core_arch/src/x86/avx512dq.rs
+++ b/crates/core_arch/src/x86/avx512dq.rs
@@ -68,7 +68,7 @@ pub unsafe fn _mm256_maskz_and_pd(k: __mmask8, a: __m256d, b: __m256d) -> __m256
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_and_pd&ig_expand=293)
#[inline]
#[target_feature(enable = "avx512dq")]
-#[cfg_attr(test, assert_instr(vandps))] // FIXME: should be `vandpd` instruction.
+#[cfg_attr(test, assert_instr(vandp))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_and_pd(a: __m512d, b: __m512d) -> __m512d {
transmute(simd_and(transmute::<_, u64x8>(a), transmute::<_, u64x8>(b)))
@@ -267,7 +267,7 @@ pub unsafe fn _mm256_maskz_andnot_pd(k: __mmask8, a: __m256d, b: __m256d) -> __m
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_andnot_pd&ig_expand=331)
#[inline]
#[target_feature(enable = "avx512dq")]
-#[cfg_attr(test, assert_instr(vandnps))] // FIXME: should be `vandnpd` instruction.
+#[cfg_attr(test, assert_instr(vandnp))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_andnot_pd(a: __m512d, b: __m512d) -> __m512d {
_mm512_and_pd(_mm512_xor_pd(a, transmute(_mm512_set1_epi64(-1))), b)
@@ -465,7 +465,7 @@ pub unsafe fn _mm256_maskz_or_pd(k: __mmask8, a: __m256d, b: __m256d) -> __m256d
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_or_pd&ig_expand=4829)
#[inline]
#[target_feature(enable = "avx512dq")]
-#[cfg_attr(test, assert_instr(vorps))] // FIXME: should be `vorpd` instruction.
+#[cfg_attr(test, assert_instr(vorp))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_or_pd(a: __m512d, b: __m512d) -> __m512d {
transmute(simd_or(transmute::<_, u64x8>(a), transmute::<_, u64x8>(b)))
@@ -662,7 +662,7 @@ pub unsafe fn _mm256_maskz_xor_pd(k: __mmask8, a: __m256d, b: __m256d) -> __m256
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_xor_pd&ig_expand=7102)
#[inline]
#[target_feature(enable = "avx512dq")]
-#[cfg_attr(test, assert_instr(vxorps))] // FIXME: should be `vxorpd` instruction.
+#[cfg_attr(test, assert_instr(vxorp))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_xor_pd(a: __m512d, b: __m512d) -> __m512d {
transmute(simd_xor(transmute::<_, u64x8>(a), transmute::<_, u64x8>(b)))
@@ -5211,7 +5211,7 @@ pub unsafe fn _mm512_maskz_range_ps(k: __mmask16, a: __m512, b:
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_range_round_sd&ig_expand=5216)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vrangesd, IMM8 = 5, SAE = 8))]
#[rustc_legacy_const_generics(2, 3)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -5236,7 +5236,7 @@ pub unsafe fn _mm_range_round_sd(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_range_round_sd&ig_expand=5214)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vrangesd, IMM8 = 5, SAE = 8))]
#[rustc_legacy_const_generics(4, 5)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -5270,7 +5270,7 @@ pub unsafe fn _mm_mask_range_round_sd(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_range_round_sd&ig_expand=5215)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vrangesd, IMM8 = 5, SAE = 8))]
#[rustc_legacy_const_generics(3, 4)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -5295,7 +5295,7 @@ pub unsafe fn _mm_maskz_range_round_sd(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_range_sd&ig_expand=5220)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vrangesd, IMM8 = 5))]
#[rustc_legacy_const_generics(4)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -5327,7 +5327,7 @@ pub unsafe fn _mm_mask_range_sd(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_range_sd&ig_expand=5221)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vrangesd, IMM8 = 5))]
#[rustc_legacy_const_generics(3)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -5347,7 +5347,7 @@ pub unsafe fn _mm_maskz_range_sd(k: __mmask8, a: __m128d, b: __
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_range_round_ss&ig_expand=5219)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vrangess, IMM8 = 5, SAE = 8))]
#[rustc_legacy_const_generics(2, 3)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -5369,7 +5369,7 @@ pub unsafe fn _mm_range_round_ss(a: __m128, b:
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_range_round_ss&ig_expand=5217)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vrangess, IMM8 = 5, SAE = 8))]
#[rustc_legacy_const_generics(4, 5)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -5403,7 +5403,7 @@ pub unsafe fn _mm_mask_range_round_ss(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_range_round_ss&ig_expand=5218)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vrangess, IMM8 = 5, SAE = 8))]
#[rustc_legacy_const_generics(3, 4)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -5428,7 +5428,7 @@ pub unsafe fn _mm_maskz_range_round_ss(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_range_ss&ig_expand=5222)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vrangess, IMM8 = 5))]
#[rustc_legacy_const_generics(4)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -5460,7 +5460,7 @@ pub unsafe fn _mm_mask_range_ss(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_range_ss&ig_expand=5223)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vrangess, IMM8 = 5))]
#[rustc_legacy_const_generics(3)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6070,7 +6070,7 @@ pub unsafe fn _mm512_maskz_reduce_ps(k: __mmask16, a: __m512) -
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_reduce_round_sd&ig_expand=5447)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducesd, IMM8 = 0, SAE = 8))]
#[rustc_legacy_const_generics(2, 3)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6099,7 +6099,7 @@ pub unsafe fn _mm_reduce_round_sd(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_reduce_round_sd&ig_expand=5445)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducesd, IMM8 = 0, SAE = 8))]
#[rustc_legacy_const_generics(4, 5)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6137,7 +6137,7 @@ pub unsafe fn _mm_mask_reduce_round_sd(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_reduce_round_sd&ig_expand=5446)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducesd, IMM8 = 0, SAE = 8))]
#[rustc_legacy_const_generics(3, 4)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6165,7 +6165,7 @@ pub unsafe fn _mm_maskz_reduce_round_sd(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_reduce_sd&ig_expand=5456)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducesd, IMM8 = 0))]
#[rustc_legacy_const_generics(2)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6188,7 +6188,7 @@ pub unsafe fn _mm_reduce_sd(a: __m128d, b: __m128d) -> __m128d
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_reduce_sd&ig_expand=5454)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducesd, IMM8 = 0))]
#[rustc_legacy_const_generics(4)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6223,7 +6223,7 @@ pub unsafe fn _mm_mask_reduce_sd(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_reduce_sd&ig_expand=5455)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducesd, IMM8 = 0))]
#[rustc_legacy_const_generics(3)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6248,7 +6248,7 @@ pub unsafe fn _mm_maskz_reduce_sd(k: __mmask8, a: __m128d, b: _
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_reduce_round_ss&ig_expand=5453)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducess, IMM8 = 0, SAE = 8))]
#[rustc_legacy_const_generics(2, 3)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6274,7 +6274,7 @@ pub unsafe fn _mm_reduce_round_ss(a: __m128, b:
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_reduce_round_ss&ig_expand=5451)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducess, IMM8 = 0, SAE = 8))]
#[rustc_legacy_const_generics(4, 5)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6312,7 +6312,7 @@ pub unsafe fn _mm_mask_reduce_round_ss(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_reduce_round_ss&ig_expand=5452)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducess, IMM8 = 0, SAE = 8))]
#[rustc_legacy_const_generics(3, 4)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6340,7 +6340,7 @@ pub unsafe fn _mm_maskz_reduce_round_ss(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_reduce_ss&ig_expand=5462)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducess, IMM8 = 0))]
#[rustc_legacy_const_generics(2)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6363,7 +6363,7 @@ pub unsafe fn _mm_reduce_ss(a: __m128, b: __m128) -> __m128 {
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_reduce_ss&ig_expand=5460)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducess, IMM8 = 0))]
#[rustc_legacy_const_generics(4)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6398,7 +6398,7 @@ pub unsafe fn _mm_mask_reduce_ss(
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_reduce_ss&ig_expand=5461)
#[inline]
-#[target_feature(enable = "avx512dq,avx512vl")]
+#[target_feature(enable = "avx512dq")]
#[cfg_attr(test, assert_instr(vreducess, IMM8 = 0))]
#[rustc_legacy_const_generics(3)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6745,7 +6745,7 @@ pub unsafe fn _mm512_mask_fpclass_ps_mask(k1: __mmask16, a: __m
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_fpclass_sd_mask&ig_expand=3511)
#[inline]
-#[target_feature(enable = "sse,avx512f,avx512dq,avx512vl")]
+#[target_feature(enable = "sse,avx512f,avx512dq")]
#[cfg_attr(test, assert_instr(vfpclasssd, IMM8 = 0))]
#[rustc_legacy_const_generics(1)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6770,7 +6770,7 @@ pub unsafe fn _mm_fpclass_sd_mask(a: __m128d) -> __mmask8 {
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_fpclass_sd_mask&ig_expand=3512)
#[inline]
-#[target_feature(enable = "sse,avx512f,avx512dq,avx512vl")]
+#[target_feature(enable = "sse,avx512f,avx512dq")]
#[cfg_attr(test, assert_instr(vfpclasssd, IMM8 = 0))]
#[rustc_legacy_const_generics(2)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6794,7 +6794,7 @@ pub unsafe fn _mm_mask_fpclass_sd_mask(k1: __mmask8, a: __m128d
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_fpclass_ss_mask&ig_expand=3515)
#[inline]
-#[target_feature(enable = "sse,avx512f,avx512dq,avx512vl")]
+#[target_feature(enable = "sse,avx512f,avx512dq")]
#[cfg_attr(test, assert_instr(vfpclassss, IMM8 = 0))]
#[rustc_legacy_const_generics(1)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -6819,7 +6819,7 @@ pub unsafe fn _mm_fpclass_ss_mask(a: __m128) -> __mmask8 {
///
/// [Intel's Documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_fpclass_ss_mask&ig_expand=3516)
#[inline]
-#[target_feature(enable = "sse,avx512f,avx512dq,avx512vl")]
+#[target_feature(enable = "sse,avx512f,avx512dq")]
#[cfg_attr(test, assert_instr(vfpclassss, IMM8 = 0))]
#[rustc_legacy_const_generics(2)]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
@@ -10052,7 +10052,7 @@ mod tests {
assert_eq_m512(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_range_round_sd() {
let a = _mm_set_sd(1.);
let b = _mm_set_sd(2.);
@@ -10061,7 +10061,7 @@ mod tests {
assert_eq_m128d(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_mask_range_round_sd() {
let a = _mm_set_sd(1.);
let b = _mm_set_sd(2.);
@@ -10071,7 +10071,7 @@ mod tests {
assert_eq_m128d(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_maskz_range_round_sd() {
let a = _mm_set_sd(1.);
let b = _mm_set_sd(2.);
@@ -10080,7 +10080,7 @@ mod tests {
assert_eq_m128d(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_mask_range_sd() {
let a = _mm_set_sd(1.);
let b = _mm_set_sd(2.);
@@ -10090,7 +10090,7 @@ mod tests {
assert_eq_m128d(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_maskz_range_sd() {
let a = _mm_set_sd(1.);
let b = _mm_set_sd(2.);
@@ -10099,7 +10099,7 @@ mod tests {
assert_eq_m128d(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_range_round_ss() {
let a = _mm_set_ss(1.);
let b = _mm_set_ss(2.);
@@ -10108,7 +10108,7 @@ mod tests {
assert_eq_m128(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_mask_range_round_ss() {
let a = _mm_set_ss(1.);
let b = _mm_set_ss(2.);
@@ -10118,7 +10118,7 @@ mod tests {
assert_eq_m128(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_maskz_range_round_ss() {
let a = _mm_set_ss(1.);
let b = _mm_set_ss(2.);
@@ -10127,7 +10127,7 @@ mod tests {
assert_eq_m128(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_mask_range_ss() {
let a = _mm_set_ss(1.);
let b = _mm_set_ss(2.);
@@ -10137,7 +10137,7 @@ mod tests {
assert_eq_m128(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_maskz_range_ss() {
let a = _mm_set_ss(1.);
let b = _mm_set_ss(2.);
@@ -10391,7 +10391,7 @@ mod tests {
assert_eq_m512(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_reduce_round_sd() {
let a = _mm_set_pd(1., 2.);
let b = _mm_set_sd(0.25);
@@ -10400,7 +10400,7 @@ mod tests {
assert_eq_m128d(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_mask_reduce_round_sd() {
let a = _mm_set_pd(1., 2.);
let b = _mm_set_sd(0.25);
@@ -10412,7 +10412,7 @@ mod tests {
assert_eq_m128d(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_maskz_reduce_round_sd() {
let a = _mm_set_pd(1., 2.);
let b = _mm_set_sd(0.25);
@@ -10422,7 +10422,7 @@ mod tests {
assert_eq_m128d(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_reduce_sd() {
let a = _mm_set_pd(1., 2.);
let b = _mm_set_sd(0.25);
@@ -10431,7 +10431,7 @@ mod tests {
assert_eq_m128d(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_mask_reduce_sd() {
let a = _mm_set_pd(1., 2.);
let b = _mm_set_sd(0.25);
@@ -10441,7 +10441,7 @@ mod tests {
assert_eq_m128d(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_maskz_reduce_sd() {
let a = _mm_set_pd(1., 2.);
let b = _mm_set_sd(0.25);
@@ -10450,7 +10450,7 @@ mod tests {
assert_eq_m128d(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_reduce_round_ss() {
let a = _mm_set_ps(1., 2., 3., 4.);
let b = _mm_set_ss(0.25);
@@ -10459,7 +10459,7 @@ mod tests {
assert_eq_m128(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_mask_reduce_round_ss() {
let a = _mm_set_ps(1., 2., 3., 4.);
let b = _mm_set_ss(0.25);
@@ -10471,7 +10471,7 @@ mod tests {
assert_eq_m128(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_maskz_reduce_round_ss() {
let a = _mm_set_ps(1., 2., 3., 4.);
let b = _mm_set_ss(0.25);
@@ -10481,7 +10481,7 @@ mod tests {
assert_eq_m128(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_reduce_ss() {
let a = _mm_set_ps(1., 2., 3., 4.);
let b = _mm_set_ss(0.25);
@@ -10490,7 +10490,7 @@ mod tests {
assert_eq_m128(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_mask_reduce_ss() {
let a = _mm_set_ps(1., 2., 3., 4.);
let b = _mm_set_ss(0.25);
@@ -10500,7 +10500,7 @@ mod tests {
assert_eq_m128(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_maskz_reduce_ss() {
let a = _mm_set_ps(1., 2., 3., 4.);
let b = _mm_set_ss(0.25);
@@ -10675,7 +10675,7 @@ mod tests {
assert_eq!(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_fpclass_sd_mask() {
let a = _mm_set_pd(1., f64::INFINITY);
let r = _mm_fpclass_sd_mask::<0x18>(a);
@@ -10683,7 +10683,7 @@ mod tests {
assert_eq!(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_mask_fpclass_sd_mask() {
let a = _mm_set_sd(f64::INFINITY);
let r = _mm_mask_fpclass_sd_mask::<0x18>(0b0, a);
@@ -10691,7 +10691,7 @@ mod tests {
assert_eq!(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_fpclass_ss_mask() {
let a = _mm_set_ss(f32::INFINITY);
let r = _mm_fpclass_ss_mask::<0x18>(a);
@@ -10699,7 +10699,7 @@ mod tests {
assert_eq!(r, e);
}
- #[simd_test(enable = "avx512dq,avx512vl")]
+ #[simd_test(enable = "avx512dq")]
unsafe fn test_mm_mask_fpclass_ss_mask() {
let a = _mm_set_ss(f32::INFINITY);
let r = _mm_mask_fpclass_ss_mask::<0x18>(0b0, a);
diff --git a/crates/core_arch/src/x86/avx512f.rs b/crates/core_arch/src/x86/avx512f.rs
index 886c533d79..e5f78a2ffb 100644
--- a/crates/core_arch/src/x86/avx512f.rs
+++ b/crates/core_arch/src/x86/avx512f.rs
@@ -23499,7 +23499,7 @@ pub unsafe fn _mm256_maskz_shuffle_f64x2(
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf32x4, IMM8 = 3)
)]
#[rustc_legacy_const_generics(1)]
@@ -23520,7 +23520,7 @@ pub unsafe fn _mm512_extractf32x4_ps(a: __m512) -> __m128 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf32x4, IMM8 = 3)
)]
#[rustc_legacy_const_generics(3)]
@@ -23541,7 +23541,7 @@ pub unsafe fn _mm512_mask_extractf32x4_ps(
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf32x4, IMM8 = 3)
)]
#[rustc_legacy_const_generics(2)]
@@ -23559,7 +23559,7 @@ pub unsafe fn _mm512_maskz_extractf32x4_ps(k: __mmask8, a: __m5
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextract, IMM8 = 1) //should be vextractf32x4
)]
#[rustc_legacy_const_generics(1)]
@@ -23578,7 +23578,7 @@ pub unsafe fn _mm256_extractf32x4_ps(a: __m256) -> __m128 {
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf32x4, IMM8 = 1)
)]
#[rustc_legacy_const_generics(3)]
@@ -23599,7 +23599,7 @@ pub unsafe fn _mm256_mask_extractf32x4_ps(
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf32x4, IMM8 = 1)
)]
#[rustc_legacy_const_generics(2)]
@@ -23617,7 +23617,7 @@ pub unsafe fn _mm256_maskz_extractf32x4_ps(k: __mmask8, a: __m2
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf64x4, IMM1 = 1) //should be vextracti64x4
)]
#[rustc_legacy_const_generics(1)]
@@ -23636,7 +23636,7 @@ pub unsafe fn _mm512_extracti64x4_epi64(a: __m512i) -> __m256i
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextracti64x4, IMM1 = 1)
)]
#[rustc_legacy_const_generics(3)]
@@ -23657,7 +23657,7 @@ pub unsafe fn _mm512_mask_extracti64x4_epi64(
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextracti64x4, IMM1 = 1)
)]
#[rustc_legacy_const_generics(2)]
@@ -23675,7 +23675,7 @@ pub unsafe fn _mm512_maskz_extracti64x4_epi64(k: __mmask8, a: _
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf64x4, IMM8 = 1)
)]
#[rustc_legacy_const_generics(1)]
@@ -23694,7 +23694,7 @@ pub unsafe fn _mm512_extractf64x4_pd(a: __m512d) -> __m256d {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf64x4, IMM8 = 1)
)]
#[rustc_legacy_const_generics(3)]
@@ -23715,7 +23715,7 @@ pub unsafe fn _mm512_mask_extractf64x4_pd(
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf64x4, IMM8 = 1)
)]
#[rustc_legacy_const_generics(2)]
@@ -23733,7 +23733,7 @@ pub unsafe fn _mm512_maskz_extractf64x4_pd(k: __mmask8, a: __m5
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextractf32x4, IMM2 = 3) //should be vextracti32x4
)]
#[rustc_legacy_const_generics(1)]
@@ -23757,7 +23757,7 @@ pub unsafe fn _mm512_extracti32x4_epi32(a: __m512i) -> __m128i
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextracti32x4, IMM2 = 3)
)]
#[rustc_legacy_const_generics(3)]
@@ -23778,7 +23778,7 @@ pub unsafe fn _mm512_mask_extracti32x4_epi32(
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextracti32x4, IMM2 = 3)
)]
#[rustc_legacy_const_generics(2)]
@@ -23796,7 +23796,7 @@ pub unsafe fn _mm512_maskz_extracti32x4_epi32(k: __mmask8, a: _
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextract, IMM1 = 1) //should be vextracti32x4
)]
#[rustc_legacy_const_generics(1)]
@@ -23818,7 +23818,7 @@ pub unsafe fn _mm256_extracti32x4_epi32(a: __m256i) -> __m128i
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextracti32x4, IMM1 = 1)
)]
#[rustc_legacy_const_generics(3)]
@@ -23839,7 +23839,7 @@ pub unsafe fn _mm256_mask_extracti32x4_epi32(
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vextracti32x4, IMM1 = 1)
)]
#[rustc_legacy_const_generics(2)]
@@ -24189,7 +24189,7 @@ pub unsafe fn _mm512_maskz_inserti32x4(
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vinsert, IMM8 = 1) //should be vinserti32x4
)]
#[rustc_legacy_const_generics(2)]
@@ -24211,7 +24211,7 @@ pub unsafe fn _mm256_inserti32x4(a: __m256i, b: __m128i) -> __m
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vinserti32x4, IMM8 = 1)
)]
#[rustc_legacy_const_generics(4)]
@@ -24233,7 +24233,7 @@ pub unsafe fn _mm256_mask_inserti32x4(
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vinserti32x4, IMM8 = 1)
)]
#[rustc_legacy_const_generics(3)]
@@ -24379,7 +24379,7 @@ pub unsafe fn _mm512_maskz_insertf32x4(
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vinsert, IMM8 = 1) //should be vinsertf32x4
)]
#[rustc_legacy_const_generics(2)]
@@ -24399,7 +24399,7 @@ pub unsafe fn _mm256_insertf32x4(a: __m256, b: __m128) -> __m25
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vinsertf32x4, IMM8 = 1)
)]
#[rustc_legacy_const_generics(4)]
@@ -24421,7 +24421,7 @@ pub unsafe fn _mm256_mask_insertf32x4(
#[target_feature(enable = "avx512f,avx512vl")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(
- all(test, not(target_os = "windows")),
+ all(test, not(target_env = "msvc")),
assert_instr(vinsertf32x4, IMM8 = 1)
)]
#[rustc_legacy_const_generics(3)]
@@ -25301,7 +25301,7 @@ pub unsafe fn _mm_maskz_unpacklo_pd(k: __mmask8, a: __m128d, b: __m128d) -> __m1
pub unsafe fn _mm512_castps128_ps512(a: __m128) -> __m512 {
simd_shuffle!(
a,
- _mm_set1_ps(-1.),
+ _mm_undefined_ps(),
[0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
)
}
@@ -25315,7 +25315,7 @@ pub unsafe fn _mm512_castps128_ps512(a: __m128) -> __m512 {
pub unsafe fn _mm512_castps256_ps512(a: __m256) -> __m512 {
simd_shuffle!(
a,
- _mm256_set1_ps(-1.),
+ _mm256_undefined_ps(),
[0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8],
)
}
@@ -25375,7 +25375,7 @@ pub unsafe fn _mm512_castps512_ps256(a: __m512) -> __m256 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_castps_pd(a: __m512) -> __m512d {
- transmute(a.as_m512())
+ transmute(a)
}
/// Cast vector of type __m512 to type __m512i. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
@@ -25385,7 +25385,7 @@ pub unsafe fn _mm512_castps_pd(a: __m512) -> __m512d {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_castps_si512(a: __m512) -> __m512i {
- transmute(a.as_m512())
+ transmute(a)
}
/// Cast vector of type __m128d to type __m512d; the upper 384 bits of the result are undefined. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
@@ -25395,7 +25395,7 @@ pub unsafe fn _mm512_castps_si512(a: __m512) -> __m512i {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_castpd128_pd512(a: __m128d) -> __m512d {
- simd_shuffle!(a, _mm_set1_pd(-1.), [0, 1, 2, 2, 2, 2, 2, 2])
+ simd_shuffle!(a, _mm_undefined_pd(), [0, 1, 2, 2, 2, 2, 2, 2])
}
/// Cast vector of type __m256d to type __m512d; the upper 256 bits of the result are undefined. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
@@ -25405,7 +25405,7 @@ pub unsafe fn _mm512_castpd128_pd512(a: __m128d) -> __m512d {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_castpd256_pd512(a: __m256d) -> __m512d {
- simd_shuffle!(a, _mm256_set1_pd(-1.), [0, 1, 2, 3, 4, 4, 4, 4])
+ simd_shuffle!(a, _mm256_undefined_pd(), [0, 1, 2, 3, 4, 4, 4, 4])
}
/// Cast vector of type __m128d to type __m512d; the upper 384 bits of the result are zeroed. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
@@ -25455,7 +25455,7 @@ pub unsafe fn _mm512_castpd512_pd256(a: __m512d) -> __m256d {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_castpd_ps(a: __m512d) -> __m512 {
- transmute(a.as_m512d())
+ transmute(a)
}
/// Cast vector of type __m512d to type __m512i. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
@@ -25465,7 +25465,7 @@ pub unsafe fn _mm512_castpd_ps(a: __m512d) -> __m512 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_castpd_si512(a: __m512d) -> __m512i {
- transmute(a.as_m512d())
+ transmute(a)
}
/// Cast vector of type __m128i to type __m512i; the upper 384 bits of the result are undefined. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
@@ -25475,7 +25475,7 @@ pub unsafe fn _mm512_castpd_si512(a: __m512d) -> __m512i {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_castsi128_si512(a: __m128i) -> __m512i {
- simd_shuffle!(a, _mm_set1_epi64x(-1), [0, 1, 2, 2, 2, 2, 2, 2])
+ simd_shuffle!(a, _mm_undefined_si128(), [0, 1, 2, 2, 2, 2, 2, 2])
}
/// Cast vector of type __m256i to type __m512i; the upper 256 bits of the result are undefined. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
@@ -25485,7 +25485,7 @@ pub unsafe fn _mm512_castsi128_si512(a: __m128i) -> __m512i {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_castsi256_si512(a: __m256i) -> __m512i {
- simd_shuffle!(a, _mm256_set1_epi64x(-1), [0, 1, 2, 3, 4, 4, 4, 4])
+ simd_shuffle!(a, _mm256_undefined_si256(), [0, 1, 2, 3, 4, 4, 4, 4])
}
/// Cast vector of type __m128i to type __m512i; the upper 384 bits of the result are zeroed. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
@@ -25554,7 +25554,7 @@ pub unsafe fn _mm512_castsi512_pd(a: __m512i) -> __m512d {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(all(test, not(target_os = "windows")), assert_instr(vmovd))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(vmovd))]
pub unsafe fn _mm512_cvtsi512_si32(a: __m512i) -> i32 {
let extract: i32 = simd_extract!(a.as_i32x16(), 0);
extract
@@ -25654,7 +25654,7 @@ pub unsafe fn _mm_maskz_broadcastd_epi32(k: __mmask8, a: __m128i) -> __m128i {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vbroadcas))] //should be vpbroadcastq
+#[cfg_attr(test, assert_instr(vbroadcast))] //should be vpbroadcastq
pub unsafe fn _mm512_broadcastq_epi64(a: __m128i) -> __m512i {
simd_shuffle!(a, a, [0, 0, 0, 0, 0, 0, 0, 0])
}
@@ -27663,9 +27663,7 @@ pub unsafe fn _mm512_mask2int(k1: __mmask16) -> i32 {
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(test, assert_instr(mov))] // generate normal and code instead of kunpckbw
pub unsafe fn _mm512_kunpackb(a: __mmask16, b: __mmask16) -> __mmask16 {
- let a = a & 0b00000000_11111111;
- let b = b & 0b11111111_00000000;
- a | b
+ ((a & 0xff) << 8) | (b & 0xff)
}
/// Performs bitwise OR between k1 and k2, storing the result in dst. CF flag is set if dst consists of all 1's.
@@ -28037,11 +28035,11 @@ pub unsafe fn _mm512_stream_ps(mem_addr: *mut f32, a: __m512) {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vmovntps))] //should be vmovntpd
+#[cfg_attr(test, assert_instr(vmovntpd))]
#[allow(clippy::cast_ptr_alignment)]
pub unsafe fn _mm512_stream_pd(mem_addr: *mut f64, a: __m512d) {
crate::arch::asm!(
- "vmovntps [{mem_addr}], {a}",
+ "vmovntpd [{mem_addr}], {a}",
mem_addr = in(reg) mem_addr,
a = in(zmm_reg) a,
options(nostack, preserves_flags),
@@ -28063,11 +28061,11 @@ pub unsafe fn _mm512_stream_pd(mem_addr: *mut f64, a: __m512d) {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vmovntps))] //should be vmovntdq
+#[cfg_attr(test, assert_instr(vmovntdq))]
#[allow(clippy::cast_ptr_alignment)]
-pub unsafe fn _mm512_stream_si512(mem_addr: *mut i64, a: __m512i) {
+pub unsafe fn _mm512_stream_si512(mem_addr: *mut i32, a: __m512i) {
crate::arch::asm!(
- "vmovntps [{mem_addr}], {a}",
+ "vmovntdq [{mem_addr}], {a}",
mem_addr = in(reg) mem_addr,
a = in(zmm_reg) a,
options(nostack, preserves_flags),
@@ -31306,7 +31304,14 @@ pub unsafe fn _mm512_mask_reduce_add_epi64(k: __mmask8, a: __m512i) -> i64 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_reduce_add_ps(a: __m512) -> f32 {
- simd_reduce_add_unordered(a.as_f32x16())
+ // we have to use `simd_shuffle` here because `_mm512_extractf32x8_ps` is in AVX512DQ
+ let a = _mm256_add_ps(
+ simd_shuffle!(a, a, [0, 1, 2, 3, 4, 5, 6, 7]),
+ simd_shuffle!(a, a, [8, 9, 10, 11, 12, 13, 14, 15]),
+ );
+ let a = _mm_add_ps(_mm256_extractf128_ps::<0>(a), _mm256_extractf128_ps::<1>(a));
+ let a = _mm_add_ps(a, simd_shuffle!(a, a, [2, 3, 0, 1]));
+ simd_extract::<_, f32>(a, 0) + simd_extract::<_, f32>(a, 1)
}
/// Reduce the packed single-precision (32-bit) floating-point elements in a by addition using mask k. Returns the sum of all active elements in a.
@@ -31316,11 +31321,7 @@ pub unsafe fn _mm512_reduce_add_ps(a: __m512) -> f32 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_reduce_add_ps(k: __mmask16, a: __m512) -> f32 {
- simd_reduce_add_unordered(simd_select_bitmask(
- k,
- a.as_f32x16(),
- _mm512_setzero_ps().as_f32x16(),
- ))
+ _mm512_reduce_add_ps(simd_select_bitmask(k, a, _mm512_setzero_ps()))
}
/// Reduce the packed double-precision (64-bit) floating-point elements in a by addition. Returns the sum of all elements in a.
@@ -31330,7 +31331,12 @@ pub unsafe fn _mm512_mask_reduce_add_ps(k: __mmask16, a: __m512) -> f32 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_reduce_add_pd(a: __m512d) -> f64 {
- simd_reduce_add_unordered(a.as_f64x8())
+ let a = _mm256_add_pd(
+ _mm512_extractf64x4_pd::<0>(a),
+ _mm512_extractf64x4_pd::<1>(a),
+ );
+ let a = _mm_add_pd(_mm256_extractf128_pd::<0>(a), _mm256_extractf128_pd::<1>(a));
+ simd_extract::<_, f64>(a, 0) + simd_extract::<_, f64>(a, 1)
}
/// Reduce the packed double-precision (64-bit) floating-point elements in a by addition using mask k. Returns the sum of all active elements in a.
@@ -31340,11 +31346,7 @@ pub unsafe fn _mm512_reduce_add_pd(a: __m512d) -> f64 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_reduce_add_pd(k: __mmask8, a: __m512d) -> f64 {
- simd_reduce_add_unordered(simd_select_bitmask(
- k,
- a.as_f64x8(),
- _mm512_setzero_pd().as_f64x8(),
- ))
+ _mm512_reduce_add_pd(simd_select_bitmask(k, a, _mm512_setzero_pd()))
}
/// Reduce the packed 32-bit integers in a by multiplication. Returns the product of all elements in a.
@@ -31402,7 +31404,14 @@ pub unsafe fn _mm512_mask_reduce_mul_epi64(k: __mmask8, a: __m512i) -> i64 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_reduce_mul_ps(a: __m512) -> f32 {
- simd_reduce_mul_unordered(a.as_f32x16())
+ // we have to use `simd_shuffle` here because `_mm512_extractf32x8_ps` is in AVX512DQ
+ let a = _mm256_mul_ps(
+ simd_shuffle!(a, a, [0, 1, 2, 3, 4, 5, 6, 7]),
+ simd_shuffle!(a, a, [8, 9, 10, 11, 12, 13, 14, 15]),
+ );
+ let a = _mm_mul_ps(_mm256_extractf128_ps::<0>(a), _mm256_extractf128_ps::<1>(a));
+ let a = _mm_mul_ps(a, simd_shuffle!(a, a, [2, 3, 0, 1]));
+ simd_extract::<_, f32>(a, 0) * simd_extract::<_, f32>(a, 1)
}
/// Reduce the packed single-precision (32-bit) floating-point elements in a by multiplication using mask k. Returns the product of all active elements in a.
@@ -31412,11 +31421,7 @@ pub unsafe fn _mm512_reduce_mul_ps(a: __m512) -> f32 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_reduce_mul_ps(k: __mmask16, a: __m512) -> f32 {
- simd_reduce_mul_unordered(simd_select_bitmask(
- k,
- a.as_f32x16(),
- _mm512_set1_ps(1.).as_f32x16(),
- ))
+ _mm512_reduce_mul_ps(simd_select_bitmask(k, a, _mm512_set1_ps(1.)))
}
/// Reduce the packed double-precision (64-bit) floating-point elements in a by multiplication. Returns the product of all elements in a.
@@ -31426,7 +31431,12 @@ pub unsafe fn _mm512_mask_reduce_mul_ps(k: __mmask16, a: __m512) -> f32 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_reduce_mul_pd(a: __m512d) -> f64 {
- simd_reduce_mul_unordered(a.as_f64x8())
+ let a = _mm256_mul_pd(
+ _mm512_extractf64x4_pd::<0>(a),
+ _mm512_extractf64x4_pd::<1>(a),
+ );
+ let a = _mm_mul_pd(_mm256_extractf128_pd::<0>(a), _mm256_extractf128_pd::<1>(a));
+ simd_extract::<_, f64>(a, 0) * simd_extract::<_, f64>(a, 1)
}
/// Reduce the packed double-precision (64-bit) floating-point elements in a by multiplication using mask k. Returns the product of all active elements in a.
@@ -31436,11 +31446,7 @@ pub unsafe fn _mm512_reduce_mul_pd(a: __m512d) -> f64 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_reduce_mul_pd(k: __mmask8, a: __m512d) -> f64 {
- simd_reduce_mul_unordered(simd_select_bitmask(
- k,
- a.as_f64x8(),
- _mm512_set1_pd(1.).as_f64x8(),
- ))
+ _mm512_reduce_mul_pd(simd_select_bitmask(k, a, _mm512_set1_pd(1.)))
}
/// Reduce the packed signed 32-bit integers in a by maximum. Returns the maximum of all elements in a.
@@ -31546,7 +31552,13 @@ pub unsafe fn _mm512_mask_reduce_max_epu64(k: __mmask8, a: __m512i) -> u64 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_reduce_max_ps(a: __m512) -> f32 {
- simd_reduce_max(a.as_f32x16())
+ let a = _mm256_max_ps(
+ simd_shuffle!(a, a, [0, 1, 2, 3, 4, 5, 6, 7]),
+ simd_shuffle!(a, a, [8, 9, 10, 11, 12, 13, 14, 15]),
+ );
+ let a = _mm_max_ps(_mm256_extractf128_ps::<0>(a), _mm256_extractf128_ps::<1>(a));
+ let a = _mm_max_ps(a, simd_shuffle!(a, a, [2, 3, 0, 1]));
+ _mm_cvtss_f32(_mm_max_ss(a, _mm_movehdup_ps(a)))
}
/// Reduce the packed single-precision (32-bit) floating-point elements in a by maximum using mask k. Returns the maximum of all active elements in a.
@@ -31556,11 +31568,7 @@ pub unsafe fn _mm512_reduce_max_ps(a: __m512) -> f32 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_reduce_max_ps(k: __mmask16, a: __m512) -> f32 {
- simd_reduce_max(simd_select_bitmask(
- k,
- a.as_f32x16(),
- _mm512_undefined_ps().as_f32x16(),
- ))
+ _mm512_reduce_max_ps(_mm512_mask_mov_ps(_mm512_set1_ps(f32::MIN), k, a))
}
/// Reduce the packed double-precision (64-bit) floating-point elements in a by maximum. Returns the maximum of all elements in a.
@@ -31570,7 +31578,12 @@ pub unsafe fn _mm512_mask_reduce_max_ps(k: __mmask16, a: __m512) -> f32 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_reduce_max_pd(a: __m512d) -> f64 {
- simd_reduce_max(a.as_f64x8())
+ let a = _mm256_max_pd(
+ _mm512_extractf64x4_pd::<0>(a),
+ _mm512_extractf64x4_pd::<1>(a),
+ );
+ let a = _mm_max_pd(_mm256_extractf128_pd::<0>(a), _mm256_extractf128_pd::<1>(a));
+ _mm_cvtsd_f64(_mm_max_sd(a, simd_shuffle!(a, a, [1, 0])))
}
/// Reduce the packed double-precision (64-bit) floating-point elements in a by maximum using mask k. Returns the maximum of all active elements in a.
@@ -31580,11 +31593,7 @@ pub unsafe fn _mm512_reduce_max_pd(a: __m512d) -> f64 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_reduce_max_pd(k: __mmask8, a: __m512d) -> f64 {
- simd_reduce_max(simd_select_bitmask(
- k,
- a.as_f64x8(),
- _mm512_undefined_pd().as_f64x8(),
- ))
+ _mm512_reduce_max_pd(_mm512_mask_mov_pd(_mm512_set1_pd(f64::MIN), k, a))
}
/// Reduce the packed signed 32-bit integers in a by minimum. Returns the minimum of all elements in a.
@@ -31690,7 +31699,13 @@ pub unsafe fn _mm512_mask_reduce_min_epu64(k: __mmask8, a: __m512i) -> u64 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_reduce_min_ps(a: __m512) -> f32 {
- simd_reduce_min(a.as_f32x16())
+ let a = _mm256_min_ps(
+ simd_shuffle!(a, a, [0, 1, 2, 3, 4, 5, 6, 7]),
+ simd_shuffle!(a, a, [8, 9, 10, 11, 12, 13, 14, 15]),
+ );
+ let a = _mm_min_ps(_mm256_extractf128_ps::<0>(a), _mm256_extractf128_ps::<1>(a));
+ let a = _mm_min_ps(a, simd_shuffle!(a, a, [2, 3, 0, 1]));
+ _mm_cvtss_f32(_mm_min_ss(a, _mm_movehdup_ps(a)))
}
/// Reduce the packed single-precision (32-bit) floating-point elements in a by maximum using mask k. Returns the minimum of all active elements in a.
@@ -31700,11 +31715,7 @@ pub unsafe fn _mm512_reduce_min_ps(a: __m512) -> f32 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_reduce_min_ps(k: __mmask16, a: __m512) -> f32 {
- simd_reduce_min(simd_select_bitmask(
- k,
- a.as_f32x16(),
- _mm512_undefined_ps().as_f32x16(),
- ))
+ _mm512_reduce_min_ps(_mm512_mask_mov_ps(_mm512_set1_ps(f32::MAX), k, a))
}
/// Reduce the packed double-precision (64-bit) floating-point elements in a by minimum. Returns the minimum of all elements in a.
@@ -31714,7 +31725,12 @@ pub unsafe fn _mm512_mask_reduce_min_ps(k: __mmask16, a: __m512) -> f32 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_reduce_min_pd(a: __m512d) -> f64 {
- simd_reduce_min(a.as_f64x8())
+ let a = _mm256_min_pd(
+ _mm512_extractf64x4_pd::<0>(a),
+ _mm512_extractf64x4_pd::<1>(a),
+ );
+ let a = _mm_min_pd(_mm256_extractf128_pd::<0>(a), _mm256_extractf128_pd::<1>(a));
+ _mm_cvtsd_f64(_mm_min_sd(a, simd_shuffle!(a, a, [1, 0])))
}
/// Reduce the packed double-precision (64-bit) floating-point elements in a by maximum using mask k. Returns the minimum of all active elements in a.
@@ -31724,11 +31740,7 @@ pub unsafe fn _mm512_reduce_min_pd(a: __m512d) -> f64 {
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_reduce_min_pd(k: __mmask8, a: __m512d) -> f64 {
- simd_reduce_min(simd_select_bitmask(
- k,
- a.as_f64x8(),
- _mm512_undefined_pd().as_f64x8(),
- ))
+ _mm512_reduce_min_pd(_mm512_mask_mov_pd(_mm512_set1_pd(f64::MAX), k, a))
}
/// Reduce the packed 32-bit integers in a by bitwise AND. Returns the bitwise AND of all elements in a.
@@ -32786,6 +32798,7 @@ pub unsafe fn _mm512_store_pd(mem_addr: *mut f64, a: __m512d) {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_loadu_epi32)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovdqu32))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_loadu_epi32(src: __m512i, k: __mmask16, mem_addr: *const i32) -> __m512i {
let mut dst: __m512i = src;
@@ -32794,7 +32807,7 @@ pub unsafe fn _mm512_mask_loadu_epi32(src: __m512i, k: __mmask16, mem_addr: *con
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -32806,6 +32819,7 @@ pub unsafe fn _mm512_mask_loadu_epi32(src: __m512i, k: __mmask16, mem_addr: *con
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_loadu_epi32)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovdqu32))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_loadu_epi32(k: __mmask16, mem_addr: *const i32) -> __m512i {
let mut dst: __m512i;
@@ -32814,7 +32828,7 @@ pub unsafe fn _mm512_maskz_loadu_epi32(k: __mmask16, mem_addr: *const i32) -> __
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -32826,6 +32840,7 @@ pub unsafe fn _mm512_maskz_loadu_epi32(k: __mmask16, mem_addr: *const i32) -> __
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_loadu_epi64)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovdqu64))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_loadu_epi64(src: __m512i, k: __mmask8, mem_addr: *const i64) -> __m512i {
let mut dst: __m512i = src;
@@ -32834,7 +32849,7 @@ pub unsafe fn _mm512_mask_loadu_epi64(src: __m512i, k: __mmask8, mem_addr: *cons
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -32846,6 +32861,7 @@ pub unsafe fn _mm512_mask_loadu_epi64(src: __m512i, k: __mmask8, mem_addr: *cons
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_loadu_epi64)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovdqu64))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_loadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m512i {
let mut dst: __m512i;
@@ -32854,7 +32870,7 @@ pub unsafe fn _mm512_maskz_loadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -32866,6 +32882,7 @@ pub unsafe fn _mm512_maskz_loadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_loadu_ps)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovups))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_loadu_ps(src: __m512, k: __mmask16, mem_addr: *const f32) -> __m512 {
let mut dst: __m512 = src;
@@ -32874,7 +32891,7 @@ pub unsafe fn _mm512_mask_loadu_ps(src: __m512, k: __mmask16, mem_addr: *const f
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -32886,6 +32903,7 @@ pub unsafe fn _mm512_mask_loadu_ps(src: __m512, k: __mmask16, mem_addr: *const f
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_loadu_ps)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovups))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_loadu_ps(k: __mmask16, mem_addr: *const f32) -> __m512 {
let mut dst: __m512;
@@ -32894,7 +32912,7 @@ pub unsafe fn _mm512_maskz_loadu_ps(k: __mmask16, mem_addr: *const f32) -> __m51
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -32906,6 +32924,7 @@ pub unsafe fn _mm512_maskz_loadu_ps(k: __mmask16, mem_addr: *const f32) -> __m51
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_loadu_pd)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovupd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_loadu_pd(src: __m512d, k: __mmask8, mem_addr: *const f64) -> __m512d {
let mut dst: __m512d = src;
@@ -32914,7 +32933,7 @@ pub unsafe fn _mm512_mask_loadu_pd(src: __m512d, k: __mmask8, mem_addr: *const f
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -32926,6 +32945,7 @@ pub unsafe fn _mm512_mask_loadu_pd(src: __m512d, k: __mmask8, mem_addr: *const f
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_loadu_pd)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovupd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_loadu_pd(k: __mmask8, mem_addr: *const f64) -> __m512d {
let mut dst: __m512d;
@@ -32934,7 +32954,7 @@ pub unsafe fn _mm512_maskz_loadu_pd(k: __mmask8, mem_addr: *const f64) -> __m512
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -32946,6 +32966,7 @@ pub unsafe fn _mm512_maskz_loadu_pd(k: __mmask8, mem_addr: *const f64) -> __m512
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_loadu_epi32)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu32))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_loadu_epi32(src: __m256i, k: __mmask8, mem_addr: *const i32) -> __m256i {
let mut dst: __m256i = src;
@@ -32954,7 +32975,7 @@ pub unsafe fn _mm256_mask_loadu_epi32(src: __m256i, k: __mmask8, mem_addr: *cons
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -32966,6 +32987,7 @@ pub unsafe fn _mm256_mask_loadu_epi32(src: __m256i, k: __mmask8, mem_addr: *cons
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_loadu_epi32)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu32))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_loadu_epi32(k: __mmask8, mem_addr: *const i32) -> __m256i {
let mut dst: __m256i;
@@ -32974,7 +32996,7 @@ pub unsafe fn _mm256_maskz_loadu_epi32(k: __mmask8, mem_addr: *const i32) -> __m
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -32986,6 +33008,7 @@ pub unsafe fn _mm256_maskz_loadu_epi32(k: __mmask8, mem_addr: *const i32) -> __m
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_loadu_epi64)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu64))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_loadu_epi64(src: __m256i, k: __mmask8, mem_addr: *const i64) -> __m256i {
let mut dst: __m256i = src;
@@ -32994,7 +33017,7 @@ pub unsafe fn _mm256_mask_loadu_epi64(src: __m256i, k: __mmask8, mem_addr: *cons
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33006,6 +33029,7 @@ pub unsafe fn _mm256_mask_loadu_epi64(src: __m256i, k: __mmask8, mem_addr: *cons
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_loadu_epi64)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu64))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_loadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m256i {
let mut dst: __m256i;
@@ -33014,7 +33038,7 @@ pub unsafe fn _mm256_maskz_loadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33026,6 +33050,7 @@ pub unsafe fn _mm256_maskz_loadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_loadu_ps)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovups))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_loadu_ps(src: __m256, k: __mmask8, mem_addr: *const f32) -> __m256 {
let mut dst: __m256 = src;
@@ -33034,7 +33059,7 @@ pub unsafe fn _mm256_mask_loadu_ps(src: __m256, k: __mmask8, mem_addr: *const f3
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33046,6 +33071,7 @@ pub unsafe fn _mm256_mask_loadu_ps(src: __m256, k: __mmask8, mem_addr: *const f3
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_loadu_ps)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovups))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_loadu_ps(k: __mmask8, mem_addr: *const f32) -> __m256 {
let mut dst: __m256;
@@ -33054,7 +33080,7 @@ pub unsafe fn _mm256_maskz_loadu_ps(k: __mmask8, mem_addr: *const f32) -> __m256
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33066,6 +33092,7 @@ pub unsafe fn _mm256_maskz_loadu_ps(k: __mmask8, mem_addr: *const f32) -> __m256
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_loadu_pd)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovupd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_loadu_pd(src: __m256d, k: __mmask8, mem_addr: *const f64) -> __m256d {
let mut dst: __m256d = src;
@@ -33074,7 +33101,7 @@ pub unsafe fn _mm256_mask_loadu_pd(src: __m256d, k: __mmask8, mem_addr: *const f
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33086,6 +33113,7 @@ pub unsafe fn _mm256_mask_loadu_pd(src: __m256d, k: __mmask8, mem_addr: *const f
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_loadu_pd)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovupd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_loadu_pd(k: __mmask8, mem_addr: *const f64) -> __m256d {
let mut dst: __m256d;
@@ -33094,7 +33122,7 @@ pub unsafe fn _mm256_maskz_loadu_pd(k: __mmask8, mem_addr: *const f64) -> __m256
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33106,6 +33134,7 @@ pub unsafe fn _mm256_maskz_loadu_pd(k: __mmask8, mem_addr: *const f64) -> __m256
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_loadu_epi32)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu32))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_loadu_epi32(src: __m128i, k: __mmask8, mem_addr: *const i32) -> __m128i {
let mut dst: __m128i = src;
@@ -33114,7 +33143,7 @@ pub unsafe fn _mm_mask_loadu_epi32(src: __m128i, k: __mmask8, mem_addr: *const i
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33126,6 +33155,7 @@ pub unsafe fn _mm_mask_loadu_epi32(src: __m128i, k: __mmask8, mem_addr: *const i
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_loadu_epi32)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu32))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_loadu_epi32(k: __mmask8, mem_addr: *const i32) -> __m128i {
let mut dst: __m128i;
@@ -33134,7 +33164,7 @@ pub unsafe fn _mm_maskz_loadu_epi32(k: __mmask8, mem_addr: *const i32) -> __m128
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33146,6 +33176,7 @@ pub unsafe fn _mm_maskz_loadu_epi32(k: __mmask8, mem_addr: *const i32) -> __m128
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_loadu_epi64)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu64))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_loadu_epi64(src: __m128i, k: __mmask8, mem_addr: *const i64) -> __m128i {
let mut dst: __m128i = src;
@@ -33154,7 +33185,7 @@ pub unsafe fn _mm_mask_loadu_epi64(src: __m128i, k: __mmask8, mem_addr: *const i
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33166,6 +33197,7 @@ pub unsafe fn _mm_mask_loadu_epi64(src: __m128i, k: __mmask8, mem_addr: *const i
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_loadu_epi64)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu64))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_loadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m128i {
let mut dst: __m128i;
@@ -33174,7 +33206,7 @@ pub unsafe fn _mm_maskz_loadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m128
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33186,6 +33218,7 @@ pub unsafe fn _mm_maskz_loadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m128
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_loadu_ps)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovups))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_loadu_ps(src: __m128, k: __mmask8, mem_addr: *const f32) -> __m128 {
let mut dst: __m128 = src;
@@ -33194,7 +33227,7 @@ pub unsafe fn _mm_mask_loadu_ps(src: __m128, k: __mmask8, mem_addr: *const f32)
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33206,6 +33239,7 @@ pub unsafe fn _mm_mask_loadu_ps(src: __m128, k: __mmask8, mem_addr: *const f32)
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_loadu_ps)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovups))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_loadu_ps(k: __mmask8, mem_addr: *const f32) -> __m128 {
let mut dst: __m128;
@@ -33214,7 +33248,7 @@ pub unsafe fn _mm_maskz_loadu_ps(k: __mmask8, mem_addr: *const f32) -> __m128 {
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33226,6 +33260,7 @@ pub unsafe fn _mm_maskz_loadu_ps(k: __mmask8, mem_addr: *const f32) -> __m128 {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_loadu_pd)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovupd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_loadu_pd(src: __m128d, k: __mmask8, mem_addr: *const f64) -> __m128d {
let mut dst: __m128d = src;
@@ -33234,7 +33269,7 @@ pub unsafe fn _mm_mask_loadu_pd(src: __m128d, k: __mmask8, mem_addr: *const f64)
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33246,6 +33281,7 @@ pub unsafe fn _mm_mask_loadu_pd(src: __m128d, k: __mmask8, mem_addr: *const f64)
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_loadu_pd)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovupd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_loadu_pd(k: __mmask8, mem_addr: *const f64) -> __m128d {
let mut dst: __m128d;
@@ -33254,7 +33290,7 @@ pub unsafe fn _mm_maskz_loadu_pd(k: __mmask8, mem_addr: *const f64) -> __m128d {
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33274,7 +33310,7 @@ pub unsafe fn _mm512_mask_load_epi32(src: __m512i, k: __mmask16, mem_addr: *cons
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33294,7 +33330,7 @@ pub unsafe fn _mm512_maskz_load_epi32(k: __mmask16, mem_addr: *const i32) -> __m
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33314,7 +33350,7 @@ pub unsafe fn _mm512_mask_load_epi64(src: __m512i, k: __mmask8, mem_addr: *const
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33334,7 +33370,7 @@ pub unsafe fn _mm512_maskz_load_epi64(k: __mmask8, mem_addr: *const i64) -> __m5
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33354,7 +33390,7 @@ pub unsafe fn _mm512_mask_load_ps(src: __m512, k: __mmask16, mem_addr: *const f3
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33374,7 +33410,7 @@ pub unsafe fn _mm512_maskz_load_ps(k: __mmask16, mem_addr: *const f32) -> __m512
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33394,7 +33430,7 @@ pub unsafe fn _mm512_mask_load_pd(src: __m512d, k: __mmask8, mem_addr: *const f6
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33414,7 +33450,7 @@ pub unsafe fn _mm512_maskz_load_pd(k: __mmask8, mem_addr: *const f64) -> __m512d
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33434,7 +33470,7 @@ pub unsafe fn _mm256_mask_load_epi32(src: __m256i, k: __mmask8, mem_addr: *const
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33454,7 +33490,7 @@ pub unsafe fn _mm256_maskz_load_epi32(k: __mmask8, mem_addr: *const i32) -> __m2
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33474,7 +33510,7 @@ pub unsafe fn _mm256_mask_load_epi64(src: __m256i, k: __mmask8, mem_addr: *const
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33494,7 +33530,7 @@ pub unsafe fn _mm256_maskz_load_epi64(k: __mmask8, mem_addr: *const i64) -> __m2
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33514,7 +33550,7 @@ pub unsafe fn _mm256_mask_load_ps(src: __m256, k: __mmask8, mem_addr: *const f32
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33534,7 +33570,7 @@ pub unsafe fn _mm256_maskz_load_ps(k: __mmask8, mem_addr: *const f32) -> __m256
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33554,7 +33590,7 @@ pub unsafe fn _mm256_mask_load_pd(src: __m256d, k: __mmask8, mem_addr: *const f6
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33574,7 +33610,7 @@ pub unsafe fn _mm256_maskz_load_pd(k: __mmask8, mem_addr: *const f64) -> __m256d
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33594,7 +33630,7 @@ pub unsafe fn _mm_mask_load_epi32(src: __m128i, k: __mmask8, mem_addr: *const i3
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33614,7 +33650,7 @@ pub unsafe fn _mm_maskz_load_epi32(k: __mmask8, mem_addr: *const i32) -> __m128i
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33634,7 +33670,7 @@ pub unsafe fn _mm_mask_load_epi64(src: __m128i, k: __mmask8, mem_addr: *const i6
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33654,7 +33690,7 @@ pub unsafe fn _mm_maskz_load_epi64(k: __mmask8, mem_addr: *const i64) -> __m128i
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33674,7 +33710,7 @@ pub unsafe fn _mm_mask_load_ps(src: __m128, k: __mmask8, mem_addr: *const f32) -
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33694,7 +33730,7 @@ pub unsafe fn _mm_maskz_load_ps(k: __mmask8, mem_addr: *const f32) -> __m128 {
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33714,7 +33750,7 @@ pub unsafe fn _mm_mask_load_pd(src: __m128d, k: __mmask8, mem_addr: *const f64)
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33734,7 +33770,7 @@ pub unsafe fn _mm_maskz_load_pd(k: __mmask8, mem_addr: *const f64) -> __m128d {
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -33745,6 +33781,7 @@ pub unsafe fn _mm_maskz_load_pd(k: __mmask8, mem_addr: *const f64) -> __m128d {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_storeu_epi32)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovdqu32))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_storeu_epi32(mem_addr: *mut i32, mask: __mmask16, a: __m512i) {
asm!(
@@ -33752,7 +33789,7 @@ pub unsafe fn _mm512_mask_storeu_epi32(mem_addr: *mut i32, mask: __mmask16, a: _
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(zmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33762,6 +33799,7 @@ pub unsafe fn _mm512_mask_storeu_epi32(mem_addr: *mut i32, mask: __mmask16, a: _
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_storeu_epi64)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovdqu64))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_storeu_epi64(mem_addr: *mut i64, mask: __mmask8, a: __m512i) {
asm!(
@@ -33769,7 +33807,7 @@ pub unsafe fn _mm512_mask_storeu_epi64(mem_addr: *mut i64, mask: __mmask8, a: __
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(zmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33779,6 +33817,7 @@ pub unsafe fn _mm512_mask_storeu_epi64(mem_addr: *mut i64, mask: __mmask8, a: __
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_storeu_ps)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovups))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_storeu_ps(mem_addr: *mut f32, mask: __mmask16, a: __m512) {
asm!(
@@ -33786,7 +33825,7 @@ pub unsafe fn _mm512_mask_storeu_ps(mem_addr: *mut f32, mask: __mmask16, a: __m5
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(zmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33796,6 +33835,7 @@ pub unsafe fn _mm512_mask_storeu_ps(mem_addr: *mut f32, mask: __mmask16, a: __m5
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_storeu_pd)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vmovupd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_storeu_pd(mem_addr: *mut f64, mask: __mmask8, a: __m512d) {
asm!(
@@ -33803,7 +33843,7 @@ pub unsafe fn _mm512_mask_storeu_pd(mem_addr: *mut f64, mask: __mmask8, a: __m51
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(zmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33813,6 +33853,7 @@ pub unsafe fn _mm512_mask_storeu_pd(mem_addr: *mut f64, mask: __mmask8, a: __m51
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_storeu_epi32)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu32))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_storeu_epi32(mem_addr: *mut i32, mask: __mmask8, a: __m256i) {
asm!(
@@ -33820,7 +33861,7 @@ pub unsafe fn _mm256_mask_storeu_epi32(mem_addr: *mut i32, mask: __mmask8, a: __
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(ymm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33830,6 +33871,7 @@ pub unsafe fn _mm256_mask_storeu_epi32(mem_addr: *mut i32, mask: __mmask8, a: __
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_storeu_epi64)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovdqu64))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_storeu_epi64(mem_addr: *mut i64, mask: __mmask8, a: __m256i) {
asm!(
@@ -33837,7 +33879,7 @@ pub unsafe fn _mm256_mask_storeu_epi64(mem_addr: *mut i64, mask: __mmask8, a: __
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(ymm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33847,6 +33889,7 @@ pub unsafe fn _mm256_mask_storeu_epi64(mem_addr: *mut i64, mask: __mmask8, a: __
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_storeu_ps)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovups))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_storeu_ps(mem_addr: *mut f32, mask: __mmask8, a: __m256) {
asm!(
@@ -33854,7 +33897,7 @@ pub unsafe fn _mm256_mask_storeu_ps(mem_addr: *mut f32, mask: __mmask8, a: __m25
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(ymm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33864,6 +33907,7 @@ pub unsafe fn _mm256_mask_storeu_ps(mem_addr: *mut f32, mask: __mmask8, a: __m25
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_storeu_pd)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vmovupd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_storeu_pd(mem_addr: *mut f64, mask: __mmask8, a: __m256d) {
asm!(
@@ -33871,7 +33915,7 @@ pub unsafe fn _mm256_mask_storeu_pd(mem_addr: *mut f64, mask: __mmask8, a: __m25
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(ymm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33881,6 +33925,7 @@ pub unsafe fn _mm256_mask_storeu_pd(mem_addr: *mut f64, mask: __mmask8, a: __m25
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_storeu_epi32)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu32))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_storeu_epi32(mem_addr: *mut i32, mask: __mmask8, a: __m128i) {
asm!(
@@ -33888,7 +33933,7 @@ pub unsafe fn _mm_mask_storeu_epi32(mem_addr: *mut i32, mask: __mmask8, a: __m12
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(xmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33898,6 +33943,7 @@ pub unsafe fn _mm_mask_storeu_epi32(mem_addr: *mut i32, mask: __mmask8, a: __m12
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_storeu_epi64)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovdqu64))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_storeu_epi64(mem_addr: *mut i64, mask: __mmask8, a: __m128i) {
asm!(
@@ -33905,7 +33951,7 @@ pub unsafe fn _mm_mask_storeu_epi64(mem_addr: *mut i64, mask: __mmask8, a: __m12
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(xmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33915,6 +33961,7 @@ pub unsafe fn _mm_mask_storeu_epi64(mem_addr: *mut i64, mask: __mmask8, a: __m12
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_storeu_ps)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovups))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_storeu_ps(mem_addr: *mut f32, mask: __mmask8, a: __m128) {
asm!(
@@ -33922,7 +33969,7 @@ pub unsafe fn _mm_mask_storeu_ps(mem_addr: *mut f32, mask: __mmask8, a: __m128)
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(xmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33932,6 +33979,7 @@ pub unsafe fn _mm_mask_storeu_ps(mem_addr: *mut f32, mask: __mmask8, a: __m128)
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_storeu_pd)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vmovupd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_storeu_pd(mem_addr: *mut f64, mask: __mmask8, a: __m128d) {
asm!(
@@ -33939,7 +33987,7 @@ pub unsafe fn _mm_mask_storeu_pd(mem_addr: *mut f64, mask: __mmask8, a: __m128d)
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(xmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33956,7 +34004,7 @@ pub unsafe fn _mm512_mask_store_epi32(mem_addr: *mut i32, mask: __mmask16, a: __
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(zmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33973,7 +34021,7 @@ pub unsafe fn _mm512_mask_store_epi64(mem_addr: *mut i64, mask: __mmask8, a: __m
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(zmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -33990,7 +34038,7 @@ pub unsafe fn _mm512_mask_store_ps(mem_addr: *mut f32, mask: __mmask16, a: __m51
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(zmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -34007,7 +34055,7 @@ pub unsafe fn _mm512_mask_store_pd(mem_addr: *mut f64, mask: __mmask8, a: __m512
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(zmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -34024,7 +34072,7 @@ pub unsafe fn _mm256_mask_store_epi32(mem_addr: *mut i32, mask: __mmask8, a: __m
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(ymm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -34041,7 +34089,7 @@ pub unsafe fn _mm256_mask_store_epi64(mem_addr: *mut i64, mask: __mmask8, a: __m
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(ymm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -34058,7 +34106,7 @@ pub unsafe fn _mm256_mask_store_ps(mem_addr: *mut f32, mask: __mmask8, a: __m256
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(ymm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -34075,7 +34123,7 @@ pub unsafe fn _mm256_mask_store_pd(mem_addr: *mut f64, mask: __mmask8, a: __m256
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(ymm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -34092,7 +34140,7 @@ pub unsafe fn _mm_mask_store_epi32(mem_addr: *mut i32, mask: __mmask8, a: __m128
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(xmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -34109,7 +34157,7 @@ pub unsafe fn _mm_mask_store_epi64(mem_addr: *mut i64, mask: __mmask8, a: __m128
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(xmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -34126,7 +34174,7 @@ pub unsafe fn _mm_mask_store_ps(mem_addr: *mut f32, mask: __mmask8, a: __m128) {
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(xmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -34143,7 +34191,7 @@ pub unsafe fn _mm_mask_store_pd(mem_addr: *mut f64, mask: __mmask8, a: __m128d)
p = in(reg) mem_addr,
mask = in(kreg) mask,
a = in(xmm_reg) a,
- options(nostack)
+ options(nostack, preserves_flags)
);
}
@@ -34152,6 +34200,7 @@ pub unsafe fn _mm_mask_store_pd(mem_addr: *mut f64, mask: __mmask8, a: __m128d)
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_expandloadu_epi32)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vpexpandd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_expandloadu_epi32(
src: __m512i,
@@ -34164,7 +34213,7 @@ pub unsafe fn _mm512_mask_expandloadu_epi32(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34174,6 +34223,7 @@ pub unsafe fn _mm512_mask_expandloadu_epi32(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_expandloadu_epi32)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vpexpandd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_expandloadu_epi32(k: __mmask16, mem_addr: *const i32) -> __m512i {
let mut dst: __m512i;
@@ -34182,7 +34232,7 @@ pub unsafe fn _mm512_maskz_expandloadu_epi32(k: __mmask16, mem_addr: *const i32)
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34192,6 +34242,7 @@ pub unsafe fn _mm512_maskz_expandloadu_epi32(k: __mmask16, mem_addr: *const i32)
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_expandloadu_epi32)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vpexpandd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_expandloadu_epi32(
src: __m256i,
@@ -34204,7 +34255,7 @@ pub unsafe fn _mm256_mask_expandloadu_epi32(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34214,6 +34265,7 @@ pub unsafe fn _mm256_mask_expandloadu_epi32(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_expandloadu_epi32)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vpexpandd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_expandloadu_epi32(k: __mmask8, mem_addr: *const i32) -> __m256i {
let mut dst: __m256i;
@@ -34222,7 +34274,7 @@ pub unsafe fn _mm256_maskz_expandloadu_epi32(k: __mmask8, mem_addr: *const i32)
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34232,6 +34284,7 @@ pub unsafe fn _mm256_maskz_expandloadu_epi32(k: __mmask8, mem_addr: *const i32)
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_expandloadu_epi32)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vpexpandd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_expandloadu_epi32(
src: __m128i,
@@ -34244,7 +34297,7 @@ pub unsafe fn _mm_mask_expandloadu_epi32(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34254,6 +34307,7 @@ pub unsafe fn _mm_mask_expandloadu_epi32(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_expandloadu_epi32)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vpexpandd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_expandloadu_epi32(k: __mmask8, mem_addr: *const i32) -> __m128i {
let mut dst: __m128i;
@@ -34262,7 +34316,7 @@ pub unsafe fn _mm_maskz_expandloadu_epi32(k: __mmask8, mem_addr: *const i32) ->
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34272,6 +34326,7 @@ pub unsafe fn _mm_maskz_expandloadu_epi32(k: __mmask8, mem_addr: *const i32) ->
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_expandloadu_epi64)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vpexpandq))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_expandloadu_epi64(
src: __m512i,
@@ -34284,7 +34339,7 @@ pub unsafe fn _mm512_mask_expandloadu_epi64(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34294,6 +34349,7 @@ pub unsafe fn _mm512_mask_expandloadu_epi64(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_expandloadu_epi64)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vpexpandq))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_expandloadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m512i {
let mut dst: __m512i;
@@ -34302,7 +34358,7 @@ pub unsafe fn _mm512_maskz_expandloadu_epi64(k: __mmask8, mem_addr: *const i64)
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34312,6 +34368,7 @@ pub unsafe fn _mm512_maskz_expandloadu_epi64(k: __mmask8, mem_addr: *const i64)
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_expandloadu_epi64)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vpexpandq))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_expandloadu_epi64(
src: __m256i,
@@ -34324,7 +34381,7 @@ pub unsafe fn _mm256_mask_expandloadu_epi64(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34334,6 +34391,7 @@ pub unsafe fn _mm256_mask_expandloadu_epi64(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_expandloadu_epi64)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vpexpandq))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_expandloadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m256i {
let mut dst: __m256i;
@@ -34342,7 +34400,7 @@ pub unsafe fn _mm256_maskz_expandloadu_epi64(k: __mmask8, mem_addr: *const i64)
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34352,6 +34410,7 @@ pub unsafe fn _mm256_maskz_expandloadu_epi64(k: __mmask8, mem_addr: *const i64)
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_expandloadu_epi64)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vpexpandq))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_expandloadu_epi64(
src: __m128i,
@@ -34364,7 +34423,7 @@ pub unsafe fn _mm_mask_expandloadu_epi64(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34374,6 +34433,7 @@ pub unsafe fn _mm_mask_expandloadu_epi64(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_expandloadu_epi64)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vpexpandq))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_expandloadu_epi64(k: __mmask8, mem_addr: *const i64) -> __m128i {
let mut dst: __m128i;
@@ -34382,7 +34442,7 @@ pub unsafe fn _mm_maskz_expandloadu_epi64(k: __mmask8, mem_addr: *const i64) ->
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34392,6 +34452,7 @@ pub unsafe fn _mm_maskz_expandloadu_epi64(k: __mmask8, mem_addr: *const i64) ->
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_expandloadu_ps)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vexpandps))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_expandloadu_ps(
src: __m512,
@@ -34404,7 +34465,7 @@ pub unsafe fn _mm512_mask_expandloadu_ps(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34414,6 +34475,7 @@ pub unsafe fn _mm512_mask_expandloadu_ps(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_expandloadu_ps)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vexpandps))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_expandloadu_ps(k: __mmask16, mem_addr: *const f32) -> __m512 {
let mut dst: __m512;
@@ -34422,7 +34484,7 @@ pub unsafe fn _mm512_maskz_expandloadu_ps(k: __mmask16, mem_addr: *const f32) ->
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34432,6 +34494,7 @@ pub unsafe fn _mm512_maskz_expandloadu_ps(k: __mmask16, mem_addr: *const f32) ->
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_expandloadu_ps)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vexpandps))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_expandloadu_ps(src: __m256, k: __mmask8, mem_addr: *const f32) -> __m256 {
let mut dst: __m256 = src;
@@ -34440,7 +34503,7 @@ pub unsafe fn _mm256_mask_expandloadu_ps(src: __m256, k: __mmask8, mem_addr: *co
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34450,6 +34513,7 @@ pub unsafe fn _mm256_mask_expandloadu_ps(src: __m256, k: __mmask8, mem_addr: *co
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_expandloadu_ps)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vexpandps))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_expandloadu_ps(k: __mmask8, mem_addr: *const f32) -> __m256 {
let mut dst: __m256;
@@ -34458,7 +34522,7 @@ pub unsafe fn _mm256_maskz_expandloadu_ps(k: __mmask8, mem_addr: *const f32) ->
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34468,6 +34532,7 @@ pub unsafe fn _mm256_maskz_expandloadu_ps(k: __mmask8, mem_addr: *const f32) ->
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_expandloadu_ps)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vexpandps))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_expandloadu_ps(src: __m128, k: __mmask8, mem_addr: *const f32) -> __m128 {
let mut dst: __m128 = src;
@@ -34476,7 +34541,7 @@ pub unsafe fn _mm_mask_expandloadu_ps(src: __m128, k: __mmask8, mem_addr: *const
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34486,6 +34551,7 @@ pub unsafe fn _mm_mask_expandloadu_ps(src: __m128, k: __mmask8, mem_addr: *const
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_expandloadu_ps)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vexpandps))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_expandloadu_ps(k: __mmask8, mem_addr: *const f32) -> __m128 {
let mut dst: __m128;
@@ -34494,7 +34560,7 @@ pub unsafe fn _mm_maskz_expandloadu_ps(k: __mmask8, mem_addr: *const f32) -> __m
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34504,6 +34570,7 @@ pub unsafe fn _mm_maskz_expandloadu_ps(k: __mmask8, mem_addr: *const f32) -> __m
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_expandloadu_pd)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vexpandpd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_expandloadu_pd(
src: __m512d,
@@ -34516,7 +34583,7 @@ pub unsafe fn _mm512_mask_expandloadu_pd(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34526,6 +34593,7 @@ pub unsafe fn _mm512_mask_expandloadu_pd(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_expandloadu_pd)
#[inline]
#[target_feature(enable = "avx512f")]
+#[cfg_attr(test, assert_instr(vexpandpd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_expandloadu_pd(k: __mmask8, mem_addr: *const f64) -> __m512d {
let mut dst: __m512d;
@@ -34534,7 +34602,7 @@ pub unsafe fn _mm512_maskz_expandloadu_pd(k: __mmask8, mem_addr: *const f64) ->
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34544,6 +34612,7 @@ pub unsafe fn _mm512_maskz_expandloadu_pd(k: __mmask8, mem_addr: *const f64) ->
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_expandloadu_pd)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vexpandpd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_expandloadu_pd(
src: __m256d,
@@ -34556,7 +34625,7 @@ pub unsafe fn _mm256_mask_expandloadu_pd(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34566,6 +34635,7 @@ pub unsafe fn _mm256_mask_expandloadu_pd(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_expandloadu_pd)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vexpandpd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_expandloadu_pd(k: __mmask8, mem_addr: *const f64) -> __m256d {
let mut dst: __m256d;
@@ -34574,7 +34644,7 @@ pub unsafe fn _mm256_maskz_expandloadu_pd(k: __mmask8, mem_addr: *const f64) ->
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34584,6 +34654,7 @@ pub unsafe fn _mm256_maskz_expandloadu_pd(k: __mmask8, mem_addr: *const f64) ->
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_expandloadu_pd)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vexpandpd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_expandloadu_pd(src: __m128d, k: __mmask8, mem_addr: *const f64) -> __m128d {
let mut dst: __m128d = src;
@@ -34592,7 +34663,7 @@ pub unsafe fn _mm_mask_expandloadu_pd(src: __m128d, k: __mmask8, mem_addr: *cons
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34602,6 +34673,7 @@ pub unsafe fn _mm_mask_expandloadu_pd(src: __m128d, k: __mmask8, mem_addr: *cons
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_expandloadu_pd)
#[inline]
#[target_feature(enable = "avx512f,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vexpandpd))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_expandloadu_pd(k: __mmask8, mem_addr: *const f64) -> __m128d {
let mut dst: __m128d;
@@ -34610,7 +34682,7 @@ pub unsafe fn _mm_maskz_expandloadu_pd(k: __mmask8, mem_addr: *const f64) -> __m
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -39862,12 +39934,12 @@ pub unsafe fn _mm_cvti32_sd(a: __m128d, b: i32) -> __m128d {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtss2si, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttss2si, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundss_si32(a: __m128) -> i32 {
static_assert_sae!(SAE);
let a = a.as_f32x4();
- vcvtss2si(a, SAE)
+ vcvttss2si(a, SAE)
}
/// Convert the lower single-precision (32-bit) floating-point element in a to a 32-bit integer with truncation, and store the result in dst.\
@@ -39877,12 +39949,12 @@ pub unsafe fn _mm_cvtt_roundss_si32(a: __m128) -> i32 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtss2si, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttss2si, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundss_i32(a: __m128) -> i32 {
static_assert_sae!(SAE);
let a = a.as_f32x4();
- vcvtss2si(a, SAE)
+ vcvttss2si(a, SAE)
}
/// Convert the lower single-precision (32-bit) floating-point element in a to an unsigned 32-bit integer with truncation, and store the result in dst.\
@@ -39892,12 +39964,12 @@ pub unsafe fn _mm_cvtt_roundss_i32(a: __m128) -> i32 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtss2usi, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttss2usi, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundss_u32(a: __m128) -> u32 {
static_assert_sae!(SAE);
let a = a.as_f32x4();
- vcvtss2usi(a, SAE)
+ vcvttss2usi(a, SAE)
}
/// Convert the lower single-precision (32-bit) floating-point element in a to a 32-bit integer with truncation, and store the result in dst.
@@ -39906,9 +39978,9 @@ pub unsafe fn _mm_cvtt_roundss_u32(a: __m128) -> u32 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtss2si))]
+#[cfg_attr(test, assert_instr(vcvttss2si))]
pub unsafe fn _mm_cvttss_i32(a: __m128) -> i32 {
- vcvtss2si(a.as_f32x4(), _MM_FROUND_CUR_DIRECTION)
+ vcvttss2si(a.as_f32x4(), _MM_FROUND_CUR_DIRECTION)
}
/// Convert the lower single-precision (32-bit) floating-point element in a to an unsigned 32-bit integer with truncation, and store the result in dst.
@@ -39917,9 +39989,9 @@ pub unsafe fn _mm_cvttss_i32(a: __m128) -> i32 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtss2usi))]
+#[cfg_attr(test, assert_instr(vcvttss2usi))]
pub unsafe fn _mm_cvttss_u32(a: __m128) -> u32 {
- vcvtss2usi(a.as_f32x4(), _MM_FROUND_CUR_DIRECTION)
+ vcvttss2usi(a.as_f32x4(), _MM_FROUND_CUR_DIRECTION)
}
/// Convert the lower double-precision (64-bit) floating-point element in a to a 32-bit integer with truncation, and store the result in dst.\
@@ -39929,12 +40001,12 @@ pub unsafe fn _mm_cvttss_u32(a: __m128) -> u32 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtsd2si, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttsd2si, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundsd_si32(a: __m128d) -> i32 {
static_assert_sae!(SAE);
let a = a.as_f64x2();
- vcvtsd2si(a, SAE)
+ vcvttsd2si(a, SAE)
}
/// Convert the lower double-precision (64-bit) floating-point element in a to a 32-bit integer with truncation, and store the result in dst.\
@@ -39944,12 +40016,12 @@ pub unsafe fn _mm_cvtt_roundsd_si32(a: __m128d) -> i32 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtsd2si, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttsd2si, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundsd_i32(a: __m128d) -> i32 {
static_assert_sae!(SAE);
let a = a.as_f64x2();
- vcvtsd2si(a, SAE)
+ vcvttsd2si(a, SAE)
}
/// Convert the lower double-precision (64-bit) floating-point element in a to an unsigned 32-bit integer with truncation, and store the result in dst.\
@@ -39959,12 +40031,12 @@ pub unsafe fn _mm_cvtt_roundsd_i32(a: __m128d) -> i32 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtsd2usi, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttsd2usi, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundsd_u32(a: __m128d) -> u32 {
static_assert_sae!(SAE);
let a = a.as_f64x2();
- vcvtsd2usi(a, SAE)
+ vcvttsd2usi(a, SAE)
}
/// Convert the lower double-precision (64-bit) floating-point element in a to a 32-bit integer with truncation, and store the result in dst.
@@ -39973,9 +40045,9 @@ pub unsafe fn _mm_cvtt_roundsd_u32(a: __m128d) -> u32 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtsd2si))]
+#[cfg_attr(test, assert_instr(vcvttsd2si))]
pub unsafe fn _mm_cvttsd_i32(a: __m128d) -> i32 {
- vcvtsd2si(a.as_f64x2(), _MM_FROUND_CUR_DIRECTION)
+ vcvttsd2si(a.as_f64x2(), _MM_FROUND_CUR_DIRECTION)
}
/// Convert the lower double-precision (64-bit) floating-point element in a to an unsigned 32-bit integer with truncation, and store the result in dst.
@@ -39984,9 +40056,9 @@ pub unsafe fn _mm_cvttsd_i32(a: __m128d) -> i32 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtsd2usi))]
+#[cfg_attr(test, assert_instr(vcvttsd2usi))]
pub unsafe fn _mm_cvttsd_u32(a: __m128d) -> u32 {
- vcvtsd2usi(a.as_f64x2(), _MM_FROUND_CUR_DIRECTION)
+ vcvttsd2usi(a.as_f64x2(), _MM_FROUND_CUR_DIRECTION)
}
/// Convert the unsigned 32-bit integer b to a single-precision (32-bit) floating-point element, store the result in the lower element of dst, and copy the upper 3 packed elements from a to the upper elements of dst.
@@ -41497,6 +41569,16 @@ extern "C" {
#[link_name = "llvm.x86.avx512.cvtusi642sd"]
fn vcvtusi2sd(a: f64x2, b: u64, rounding: i32) -> f64x2;
+ #[link_name = "llvm.x86.avx512.cvttss2si"]
+ fn vcvttss2si(a: f32x4, rounding: i32) -> i32;
+ #[link_name = "llvm.x86.avx512.cvttss2usi"]
+ fn vcvttss2usi(a: f32x4, rounding: i32) -> u32;
+
+ #[link_name = "llvm.x86.avx512.cvttsd2si"]
+ fn vcvttsd2si(a: f64x2, rounding: i32) -> i32;
+ #[link_name = "llvm.x86.avx512.cvttsd2usi"]
+ fn vcvttsd2usi(a: f64x2, rounding: i32) -> u32;
+
#[link_name = "llvm.x86.avx512.vcomi.ss"]
fn vcomiss(a: f32x4, b: f32x4, imm8: i32, sae: i32) -> i32;
#[link_name = "llvm.x86.avx512.vcomi.sd"]
@@ -52698,20 +52780,14 @@ mod tests {
unsafe fn test_mm512_castps128_ps512() {
let a = _mm_setr_ps(17., 18., 19., 20.);
let r = _mm512_castps128_ps512(a);
- let e = _mm512_setr_ps(
- 17., 18., 19., 20., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
- );
- assert_eq_m512(r, e);
+ assert_eq_m128(_mm512_castps512_ps128(r), a);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_castps256_ps512() {
let a = _mm256_setr_ps(17., 18., 19., 20., 21., 22., 23., 24.);
let r = _mm512_castps256_ps512(a);
- let e = _mm512_setr_ps(
- 17., 18., 19., 20., 21., 22., 23., 24., -1., -1., -1., -1., -1., -1., -1., -1.,
- );
- assert_eq_m512(r, e);
+ assert_eq_m256(_mm512_castps512_ps256(r), a);
}
#[simd_test(enable = "avx512f")]
@@ -54251,7 +54327,7 @@ mod tests {
let a: u16 = 0b11001100_00110011;
let b: u16 = 0b00101110_00001011;
let r = _mm512_kunpackb(a, b);
- let e: u16 = 0b00101110_00110011;
+ let e: u16 = 0b00110011_00001011;
assert_eq!(r, e);
}
@@ -54387,6 +54463,7 @@ mod tests {
}
#[simd_test(enable = "avx512f")]
+ #[cfg_attr(miri, ignore)]
unsafe fn test_mm512_stream_ps() {
#[repr(align(64))]
struct Memory {
@@ -54401,6 +54478,38 @@ mod tests {
}
}
+ #[simd_test(enable = "avx512f")]
+ #[cfg_attr(miri, ignore)]
+ unsafe fn test_mm512_stream_pd() {
+ #[repr(align(64))]
+ struct Memory {
+ pub data: [f64; 8],
+ }
+ let a = _mm512_set1_pd(7.0);
+ let mut mem = Memory { data: [-1.0; 8] };
+
+ _mm512_stream_pd(&mut mem.data[0] as *mut f64, a);
+ for i in 0..8 {
+ assert_eq!(mem.data[i], get_m512d(a, i));
+ }
+ }
+
+ #[simd_test(enable = "avx512f")]
+ #[cfg_attr(miri, ignore)]
+ unsafe fn test_mm512_stream_si512() {
+ #[repr(align(64))]
+ struct Memory {
+ pub data: [i64; 8],
+ }
+ let a = _mm512_set1_epi32(7);
+ let mut mem = Memory { data: [-1; 8] };
+
+ _mm512_stream_si512(mem.data.as_mut_ptr().cast(), a);
+ for i in 0..8 {
+ assert_eq!(mem.data[i], get_m512i(a, i));
+ }
+ }
+
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_reduce_add_epi32() {
let a = _mm512_set1_epi32(1);
@@ -58180,23 +58289,23 @@ mod tests {
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundss_si32() {
let a = _mm_set_ps(0., -0.5, 1., -1.5);
- let r = _mm_cvtt_roundss_si32::<_MM_FROUND_CUR_DIRECTION>(a);
- let e: i32 = -2;
+ let r = _mm_cvtt_roundss_si32::<_MM_FROUND_NO_EXC>(a);
+ let e: i32 = -1;
assert_eq!(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundss_i32() {
let a = _mm_set_ps(0., -0.5, 1., -1.5);
- let r = _mm_cvtt_roundss_i32::<_MM_FROUND_CUR_DIRECTION>(a);
- let e: i32 = -2;
+ let r = _mm_cvtt_roundss_i32::<_MM_FROUND_NO_EXC>(a);
+ let e: i32 = -1;
assert_eq!(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundss_u32() {
let a = _mm_set_ps(0., -0.5, 1., -1.5);
- let r = _mm_cvtt_roundss_u32::<_MM_FROUND_CUR_DIRECTION>(a);
+ let r = _mm_cvtt_roundss_u32::<_MM_FROUND_NO_EXC>(a);
let e: u32 = u32::MAX;
assert_eq!(r, e);
}
@@ -58205,7 +58314,7 @@ mod tests {
unsafe fn test_mm_cvttss_i32() {
let a = _mm_set_ps(0., -0.5, 1., -1.5);
let r = _mm_cvttss_i32(a);
- let e: i32 = -2;
+ let e: i32 = -1;
assert_eq!(r, e);
}
@@ -58220,23 +58329,23 @@ mod tests {
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundsd_si32() {
let a = _mm_set_pd(1., -1.5);
- let r = _mm_cvtt_roundsd_si32::<_MM_FROUND_CUR_DIRECTION>(a);
- let e: i32 = -2;
+ let r = _mm_cvtt_roundsd_si32::<_MM_FROUND_NO_EXC>(a);
+ let e: i32 = -1;
assert_eq!(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundsd_i32() {
let a = _mm_set_pd(1., -1.5);
- let r = _mm_cvtt_roundsd_i32::<_MM_FROUND_CUR_DIRECTION>(a);
- let e: i32 = -2;
+ let r = _mm_cvtt_roundsd_i32::<_MM_FROUND_NO_EXC>(a);
+ let e: i32 = -1;
assert_eq!(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundsd_u32() {
let a = _mm_set_pd(1., -1.5);
- let r = _mm_cvtt_roundsd_u32::<_MM_FROUND_CUR_DIRECTION>(a);
+ let r = _mm_cvtt_roundsd_u32::<_MM_FROUND_NO_EXC>(a);
let e: u32 = u32::MAX;
assert_eq!(r, e);
}
@@ -58245,7 +58354,7 @@ mod tests {
unsafe fn test_mm_cvttsd_i32() {
let a = _mm_set_pd(1., -1.5);
let r = _mm_cvttsd_i32(a);
- let e: i32 = -2;
+ let e: i32 = -1;
assert_eq!(r, e);
}
diff --git a/crates/core_arch/src/x86/avx512vbmi2.rs b/crates/core_arch/src/x86/avx512vbmi2.rs
index 979cad7284..eddbcbe48a 100644
--- a/crates/core_arch/src/x86/avx512vbmi2.rs
+++ b/crates/core_arch/src/x86/avx512vbmi2.rs
@@ -12,6 +12,7 @@ use stdarch_test::assert_instr;
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_expandloadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vbmi2")]
+#[cfg_attr(test, assert_instr(vpexpandw))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_expandloadu_epi16(
src: __m512i,
@@ -24,7 +25,7 @@ pub unsafe fn _mm512_mask_expandloadu_epi16(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -34,6 +35,7 @@ pub unsafe fn _mm512_mask_expandloadu_epi16(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_expandloadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vbmi2")]
+#[cfg_attr(test, assert_instr(vpexpandw))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_expandloadu_epi16(k: __mmask32, mem_addr: *const i16) -> __m512i {
let mut dst: __m512i;
@@ -42,7 +44,7 @@ pub unsafe fn _mm512_maskz_expandloadu_epi16(k: __mmask32, mem_addr: *const i16)
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -52,6 +54,7 @@ pub unsafe fn _mm512_maskz_expandloadu_epi16(k: __mmask32, mem_addr: *const i16)
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_expandloadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512vbmi2,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vpexpandw))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_expandloadu_epi16(
src: __m256i,
@@ -64,7 +67,7 @@ pub unsafe fn _mm256_mask_expandloadu_epi16(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -74,6 +77,7 @@ pub unsafe fn _mm256_mask_expandloadu_epi16(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_expandloadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512vbmi2,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vpexpandw))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_expandloadu_epi16(k: __mmask16, mem_addr: *const i16) -> __m256i {
let mut dst: __m256i;
@@ -82,7 +86,7 @@ pub unsafe fn _mm256_maskz_expandloadu_epi16(k: __mmask16, mem_addr: *const i16)
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -92,6 +96,7 @@ pub unsafe fn _mm256_maskz_expandloadu_epi16(k: __mmask16, mem_addr: *const i16)
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_expandloadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512vbmi2,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vpexpandw))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_expandloadu_epi16(
src: __m128i,
@@ -104,7 +109,7 @@ pub unsafe fn _mm_mask_expandloadu_epi16(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -114,6 +119,7 @@ pub unsafe fn _mm_mask_expandloadu_epi16(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_expandloadu_epi16)
#[inline]
#[target_feature(enable = "avx512f,avx512vbmi2,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vpexpandw))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_expandloadu_epi16(k: __mmask8, mem_addr: *const i16) -> __m128i {
let mut dst: __m128i;
@@ -122,7 +128,7 @@ pub unsafe fn _mm_maskz_expandloadu_epi16(k: __mmask8, mem_addr: *const i16) ->
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -132,6 +138,7 @@ pub unsafe fn _mm_maskz_expandloadu_epi16(k: __mmask8, mem_addr: *const i16) ->
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_mask_expandloadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vbmi2")]
+#[cfg_attr(test, assert_instr(vpexpandb))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_mask_expandloadu_epi8(
src: __m512i,
@@ -144,7 +151,7 @@ pub unsafe fn _mm512_mask_expandloadu_epi8(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -154,6 +161,7 @@ pub unsafe fn _mm512_mask_expandloadu_epi8(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_maskz_expandloadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vbmi2")]
+#[cfg_attr(test, assert_instr(vpexpandb))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm512_maskz_expandloadu_epi8(k: __mmask64, mem_addr: *const i8) -> __m512i {
let mut dst: __m512i;
@@ -162,7 +170,7 @@ pub unsafe fn _mm512_maskz_expandloadu_epi8(k: __mmask64, mem_addr: *const i8) -
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(zmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -172,6 +180,7 @@ pub unsafe fn _mm512_maskz_expandloadu_epi8(k: __mmask64, mem_addr: *const i8) -
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_mask_expandloadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vbmi2,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vpexpandb))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_mask_expandloadu_epi8(
src: __m256i,
@@ -184,7 +193,7 @@ pub unsafe fn _mm256_mask_expandloadu_epi8(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -194,6 +203,7 @@ pub unsafe fn _mm256_mask_expandloadu_epi8(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_maskz_expandloadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512bw,avx512vbmi2,avx512vl,avx")]
+#[cfg_attr(test, assert_instr(vpexpandb))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm256_maskz_expandloadu_epi8(k: __mmask32, mem_addr: *const i8) -> __m256i {
let mut dst: __m256i;
@@ -202,7 +212,7 @@ pub unsafe fn _mm256_maskz_expandloadu_epi8(k: __mmask32, mem_addr: *const i8) -
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(ymm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -212,6 +222,7 @@ pub unsafe fn _mm256_maskz_expandloadu_epi8(k: __mmask32, mem_addr: *const i8) -
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_mask_expandloadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512vbmi2,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vpexpandb))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_mask_expandloadu_epi8(
src: __m128i,
@@ -224,7 +235,7 @@ pub unsafe fn _mm_mask_expandloadu_epi8(
p = in(reg) mem_addr,
k = in(kreg) k,
dst = inout(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
@@ -234,6 +245,7 @@ pub unsafe fn _mm_mask_expandloadu_epi8(
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_maskz_expandloadu_epi8)
#[inline]
#[target_feature(enable = "avx512f,avx512vbmi2,avx512vl,avx,sse")]
+#[cfg_attr(test, assert_instr(vpexpandb))]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub unsafe fn _mm_maskz_expandloadu_epi8(k: __mmask16, mem_addr: *const i8) -> __m128i {
let mut dst: __m128i;
@@ -242,7 +254,7 @@ pub unsafe fn _mm_maskz_expandloadu_epi8(k: __mmask16, mem_addr: *const i8) -> _
p = in(reg) mem_addr,
k = in(kreg) k,
dst = out(xmm_reg) dst,
- options(pure, readonly, nostack)
+ options(pure, readonly, nostack, preserves_flags)
);
dst
}
diff --git a/crates/core_arch/src/x86/bmi1.rs b/crates/core_arch/src/x86/bmi1.rs
index 713ebf76ec..58424e71ef 100644
--- a/crates/core_arch/src/x86/bmi1.rs
+++ b/crates/core_arch/src/x86/bmi1.rs
@@ -85,6 +85,19 @@ pub unsafe fn _blsr_u32(x: u32) -> u32 {
x & (x.wrapping_sub(1))
}
+/// Counts the number of trailing least significant zero bits.
+///
+/// When the source operand is `0`, it returns its size in bits.
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_tzcnt_u16)
+#[inline]
+#[target_feature(enable = "bmi1")]
+#[cfg_attr(test, assert_instr(tzcnt))]
+#[unstable(feature = "simd_x86_updates", issue = "126936")]
+pub unsafe fn _tzcnt_u16(x: u16) -> u16 {
+ x.trailing_zeros() as u16
+}
+
/// Counts the number of trailing least significant zero bits.
///
/// When the source operand is `0`, it returns its size in bits.
@@ -169,6 +182,13 @@ mod tests {
assert_eq!(r, 0b0010_0000u32);
}
+ #[simd_test(enable = "bmi1")]
+ unsafe fn test_tzcnt_u16() {
+ assert_eq!(_tzcnt_u16(0b0000_0001u16), 0u16);
+ assert_eq!(_tzcnt_u16(0b0000_0000u16), 16u16);
+ assert_eq!(_tzcnt_u16(0b1001_0000u16), 4u16);
+ }
+
#[simd_test(enable = "bmi1")]
unsafe fn test_tzcnt_u32() {
assert_eq!(_tzcnt_u32(0b0000_0001u32), 0u32);
diff --git a/crates/core_arch/src/x86/gfni.rs b/crates/core_arch/src/x86/gfni.rs
index 84dcf4203e..6c7f7a2f17 100644
--- a/crates/core_arch/src/x86/gfni.rs
+++ b/crates/core_arch/src/x86/gfni.rs
@@ -65,7 +65,7 @@ extern "C" {
///
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_gf2p8mul_epi8)
#[inline]
-#[target_feature(enable = "gfni,avx512bw,avx512f")]
+#[target_feature(enable = "gfni,avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(test, assert_instr(vgf2p8mulb))]
pub unsafe fn _mm512_gf2p8mul_epi8(a: __m512i, b: __m512i) -> __m512i {
@@ -243,7 +243,7 @@ pub unsafe fn _mm_maskz_gf2p8mul_epi8(k: __mmask16, a: __m128i, b: __m128i) -> _
///
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_gf2p8affine_epi8)
#[inline]
-#[target_feature(enable = "gfni,avx512bw,avx512f")]
+#[target_feature(enable = "gfni,avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(test, assert_instr(vgf2p8affineqb, B = 0))]
#[rustc_legacy_const_generics(2)]
@@ -473,7 +473,7 @@ pub unsafe fn _mm_mask_gf2p8affine_epi64_epi8(
///
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm512_gf2p8affineinv_epi64_epi8)
#[inline]
-#[target_feature(enable = "gfni,avx512bw,avx512f")]
+#[target_feature(enable = "gfni,avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
#[cfg_attr(test, assert_instr(vgf2p8affineinvqb, B = 0))]
#[rustc_legacy_const_generics(2)]
@@ -877,7 +877,7 @@ mod tests {
_mm512_loadu_si512(black_box(pointer))
}
- #[simd_test(enable = "gfni,avx512bw")]
+ #[simd_test(enable = "gfni,avx512f")]
unsafe fn test_mm512_gf2p8mul_epi8() {
let (left, right, expected) = generate_byte_mul_test_data();
@@ -927,7 +927,7 @@ mod tests {
}
}
- #[simd_test(enable = "gfni,avx512bw,avx512vl")]
+ #[simd_test(enable = "gfni,avx")]
unsafe fn test_mm256_gf2p8mul_epi8() {
let (left, right, expected) = generate_byte_mul_test_data();
@@ -977,7 +977,7 @@ mod tests {
}
}
- #[simd_test(enable = "gfni,avx512bw,avx512vl")]
+ #[simd_test(enable = "gfni")]
unsafe fn test_mm_gf2p8mul_epi8() {
let (left, right, expected) = generate_byte_mul_test_data();
@@ -1027,7 +1027,7 @@ mod tests {
}
}
- #[simd_test(enable = "gfni,avx512bw")]
+ #[simd_test(enable = "gfni,avx512f")]
unsafe fn test_mm512_gf2p8affine_epi64_epi8() {
let identity: i64 = 0x01_02_04_08_10_20_40_80;
const IDENTITY_BYTE: i32 = 0;
@@ -1104,7 +1104,7 @@ mod tests {
}
}
- #[simd_test(enable = "gfni,avx512bw,avx512vl")]
+ #[simd_test(enable = "gfni,avx")]
unsafe fn test_mm256_gf2p8affine_epi64_epi8() {
let identity: i64 = 0x01_02_04_08_10_20_40_80;
const IDENTITY_BYTE: i32 = 0;
@@ -1181,7 +1181,7 @@ mod tests {
}
}
- #[simd_test(enable = "gfni,avx512bw,avx512vl")]
+ #[simd_test(enable = "gfni")]
unsafe fn test_mm_gf2p8affine_epi64_epi8() {
let identity: i64 = 0x01_02_04_08_10_20_40_80;
const IDENTITY_BYTE: i32 = 0;
@@ -1257,7 +1257,7 @@ mod tests {
}
}
- #[simd_test(enable = "gfni,avx512bw")]
+ #[simd_test(enable = "gfni,avx512f")]
unsafe fn test_mm512_gf2p8affineinv_epi64_epi8() {
let identity: i64 = 0x01_02_04_08_10_20_40_80;
const IDENTITY_BYTE: i32 = 0;
@@ -1345,7 +1345,7 @@ mod tests {
}
}
- #[simd_test(enable = "gfni,avx512bw,avx512vl")]
+ #[simd_test(enable = "gfni,avx")]
unsafe fn test_mm256_gf2p8affineinv_epi64_epi8() {
let identity: i64 = 0x01_02_04_08_10_20_40_80;
const IDENTITY_BYTE: i32 = 0;
@@ -1433,7 +1433,7 @@ mod tests {
}
}
- #[simd_test(enable = "gfni,avx512bw,avx512vl")]
+ #[simd_test(enable = "gfni")]
unsafe fn test_mm_gf2p8affineinv_epi64_epi8() {
let identity: i64 = 0x01_02_04_08_10_20_40_80;
const IDENTITY_BYTE: i32 = 0;
diff --git a/crates/core_arch/src/x86/pclmulqdq.rs b/crates/core_arch/src/x86/pclmulqdq.rs
index e7e17d9e3c..cf192eedfe 100644
--- a/crates/core_arch/src/x86/pclmulqdq.rs
+++ b/crates/core_arch/src/x86/pclmulqdq.rs
@@ -25,11 +25,7 @@ extern "C" {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_clmulepi64_si128)
#[inline]
#[target_feature(enable = "pclmulqdq")]
-#[cfg_attr(all(test, not(target_os = "linux")), assert_instr(pclmulqdq, IMM8 = 0))]
-#[cfg_attr(all(test, target_os = "linux"), assert_instr(pclmullqlqdq, IMM8 = 0))]
-#[cfg_attr(all(test, target_os = "linux"), assert_instr(pclmulhqlqdq, IMM8 = 1))]
-#[cfg_attr(all(test, target_os = "linux"), assert_instr(pclmullqhqdq, IMM8 = 16))]
-#[cfg_attr(all(test, target_os = "linux"), assert_instr(pclmulhqhqdq, IMM8 = 17))]
+#[cfg_attr(test, assert_instr(pclmul, IMM8 = 0))]
#[rustc_legacy_const_generics(2)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_clmulepi64_si128(a: __m128i, b: __m128i) -> __m128i {
diff --git a/crates/core_arch/src/x86/sse.rs b/crates/core_arch/src/x86/sse.rs
index ecba71fb58..a4602301de 100644
--- a/crates/core_arch/src/x86/sse.rs
+++ b/crates/core_arch/src/x86/sse.rs
@@ -852,7 +852,7 @@ pub unsafe fn _mm_cvtt_ss2si(a: __m128) -> i32 {
#[inline]
#[target_feature(enable = "sse")]
// No point in using assert_instrs. In Unix x86_64 calling convention this is a
-// no-op, and on Windows it's just a `mov`.
+// no-op, and on msvc it's just a `mov`.
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_cvtss_f32(a: __m128) -> f32 {
simd_extract!(a, 0)
@@ -958,12 +958,12 @@ pub unsafe fn _mm_set_ps(a: f32, b: f32, c: f32, d: f32) -> __m128 {
#[inline]
#[target_feature(enable = "sse")]
#[cfg_attr(
- all(test, any(target_os = "windows", target_arch = "x86_64")),
+ all(test, any(target_env = "msvc", target_arch = "x86_64")),
assert_instr(unpcklps)
)]
-// On a 32-bit architecture on non-Windows it just copies the operands from the stack.
+// On a 32-bit architecture on non-msvc it just copies the operands from the stack.
#[cfg_attr(
- all(test, all(not(target_os = "windows"), target_arch = "x86")),
+ all(test, all(not(target_env = "msvc"), target_arch = "x86")),
assert_instr(movaps)
)]
#[stable(feature = "simd_x86", since = "1.27.0")]
@@ -1053,10 +1053,10 @@ pub unsafe fn _mm_unpacklo_ps(a: __m128, b: __m128) -> __m128 {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movehl_ps)
#[inline]
#[target_feature(enable = "sse")]
-#[cfg_attr(all(test, not(target_os = "windows")), assert_instr(movhlps))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(movhlps))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_movehl_ps(a: __m128, b: __m128) -> __m128 {
- // TODO; figure why this is a different instruction on Windows?
+ // TODO; figure why this is a different instruction on msvc?
simd_shuffle!(a, b, [6, 7, 2, 3])
}
@@ -1066,7 +1066,7 @@ pub unsafe fn _mm_movehl_ps(a: __m128, b: __m128) -> __m128 {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_movelh_ps)
#[inline]
#[target_feature(enable = "sse")]
-#[cfg_attr(all(test, not(target_os = "windows")), assert_instr(movlhps))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(movlhps))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_movelh_ps(a: __m128, b: __m128) -> __m128 {
simd_shuffle!(a, b, [0, 1, 4, 5])
@@ -1204,18 +1204,6 @@ pub unsafe fn _mm_loadr_ps(p: *const f32) -> __m128 {
simd_shuffle!(a, a, [3, 2, 1, 0])
}
-/// Loads unaligned 64-bits of integer data from memory into new vector.
-///
-/// `mem_addr` does not need to be aligned on any particular boundary.
-///
-/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si64)
-#[inline]
-#[target_feature(enable = "sse")]
-#[stable(feature = "simd_x86_mm_loadu_si64", since = "1.46.0")]
-pub unsafe fn _mm_loadu_si64(mem_addr: *const u8) -> __m128i {
- transmute(i64x2::new(ptr::read_unaligned(mem_addr as *const i64), 0))
-}
-
/// Stores the lowest 32 bit float of `a` into memory.
///
/// This intrinsic corresponds to the `MOVSS` instruction.
@@ -1878,6 +1866,7 @@ pub const _MM_HINT_ET1: i32 = 6;
#[rustc_legacy_const_generics(1)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_prefetch(p: *const i8) {
+ static_assert_uimm_bits!(STRATEGY, 3);
// We use the `llvm.prefetch` intrinsic with `cache type` = 1 (data cache).
// `locality` and `rw` are based on our `STRATEGY`.
prefetch(p, (STRATEGY >> 2) & 1, STRATEGY & 3, 1);
@@ -3189,13 +3178,6 @@ mod tests {
assert_eq_m128(r, e);
}
- #[simd_test(enable = "sse2")]
- unsafe fn test_mm_loadu_si64() {
- let a = _mm_setr_epi64x(5, 6);
- let r = _mm_loadu_si64(ptr::addr_of!(a) as *const _);
- assert_eq_m128i(r, _mm_setr_epi64x(5, 0));
- }
-
#[simd_test(enable = "sse")]
unsafe fn test_mm_store_ss() {
let mut vals = [0.0f32; 8];
diff --git a/crates/core_arch/src/x86/sse2.rs b/crates/core_arch/src/x86/sse2.rs
index 639ea78894..289d41a0ff 100644
--- a/crates/core_arch/src/x86/sse2.rs
+++ b/crates/core_arch/src/x86/sse2.rs
@@ -1199,16 +1199,6 @@ pub unsafe fn _mm_setzero_si128() -> __m128i {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadl_epi64)
#[inline]
#[target_feature(enable = "sse2")]
-// FIXME movsd on windows
-#[cfg_attr(
- all(
- test,
- not(windows),
- not(all(target_os = "linux", target_arch = "x86_64")),
- target_arch = "x86_64"
- ),
- assert_instr(movq)
-)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_loadl_epi64(mem_addr: *const __m128i) -> __m128i {
_mm_set_epi64x(0, ptr::read_unaligned(mem_addr as *const i64))
@@ -1297,16 +1287,6 @@ pub unsafe fn _mm_storeu_si128(mem_addr: *mut __m128i, a: __m128i) {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_epi64)
#[inline]
#[target_feature(enable = "sse2")]
-// FIXME mov on windows, movlps on i686
-#[cfg_attr(
- all(
- test,
- not(windows),
- not(all(target_os = "linux", target_arch = "x86_64")),
- target_arch = "x86_64"
- ),
- assert_instr(movq)
-)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_storel_epi64(mem_addr: *mut __m128i, a: __m128i) {
ptr::copy_nonoverlapping(ptr::addr_of!(a) as *const u8, mem_addr as *mut u8, 8);
@@ -1328,11 +1308,11 @@ pub unsafe fn _mm_storel_epi64(mem_addr: *mut __m128i, a: __m128i) {
/// See [`_mm_sfence`] for details.
#[inline]
#[target_feature(enable = "sse,sse2")]
-#[cfg_attr(test, assert_instr(movntps))] // FIXME movntdq
+#[cfg_attr(test, assert_instr(movntdq))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_stream_si128(mem_addr: *mut __m128i, a: __m128i) {
crate::arch::asm!(
- "movntps [{mem_addr}], {a}",
+ "movntdq [{mem_addr}], {a}",
mem_addr = in(reg) mem_addr,
a = in(xmm_reg) a,
options(nostack, preserves_flags),
@@ -1372,8 +1352,11 @@ pub unsafe fn _mm_stream_si32(mem_addr: *mut i32, a: i32) {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_move_epi64)
#[inline]
#[target_feature(enable = "sse2")]
-// FIXME movd on windows, movd on i686
-#[cfg_attr(all(test, not(windows), target_arch = "x86_64"), assert_instr(movq))]
+// FIXME movd on msvc, movd on i686
+#[cfg_attr(
+ all(test, not(target_env = "msvc"), target_arch = "x86_64"),
+ assert_instr(movq)
+)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_move_epi64(a: __m128i) -> __m128i {
let zero = _mm_setzero_si128();
@@ -1636,7 +1619,7 @@ pub unsafe fn _mm_unpacklo_epi32(a: __m128i, b: __m128i) -> __m128i {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_epi64)
#[inline]
#[target_feature(enable = "sse2")]
-#[cfg_attr(all(test, not(target_os = "windows")), assert_instr(movlhps))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(movlhps))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_unpacklo_epi64(a: __m128i, b: __m128i) -> __m128i {
transmute::(simd_shuffle!(a.as_i64x2(), b.as_i64x2(), [0, 2]))
@@ -2461,7 +2444,7 @@ pub unsafe fn _mm_setr_pd(a: f64, b: f64) -> __m128d {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_setzero_pd)
#[inline]
#[target_feature(enable = "sse2")]
-#[cfg_attr(test, assert_instr(xorps))] // FIXME xorpd expected
+#[cfg_attr(test, assert_instr(xorp))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_setzero_pd() -> __m128d {
_mm_set_pd(0.0, 0.0)
@@ -2554,12 +2537,12 @@ pub unsafe fn _mm_loadl_pd(a: __m128d, mem_addr: *const f64) -> __m128d {
/// See [`_mm_sfence`] for details.
#[inline]
#[target_feature(enable = "sse,sse2")]
-#[cfg_attr(test, assert_instr(movntps))] // FIXME movntpd
+#[cfg_attr(test, assert_instr(movntpd))]
#[stable(feature = "simd_x86", since = "1.27.0")]
#[allow(clippy::cast_ptr_alignment)]
pub unsafe fn _mm_stream_pd(mem_addr: *mut f64, a: __m128d) {
crate::arch::asm!(
- "movntps [{mem_addr}], {a}",
+ "movntpd [{mem_addr}], {a}",
mem_addr = in(reg) mem_addr,
a = in(xmm_reg) a,
options(nostack, preserves_flags),
@@ -2572,7 +2555,7 @@ pub unsafe fn _mm_stream_pd(mem_addr: *mut f64, a: __m128d) {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_store_sd)
#[inline]
#[target_feature(enable = "sse2")]
-#[cfg_attr(all(test, not(target_os = "windows")), assert_instr(movlps))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(movlps))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_store_sd(mem_addr: *mut f64, a: __m128d) {
*mem_addr = simd_extract!(a, 0)
@@ -2605,6 +2588,42 @@ pub unsafe fn _mm_storeu_pd(mem_addr: *mut f64, a: __m128d) {
mem_addr.cast::<__m128d>().write_unaligned(a);
}
+/// Store 16-bit integer from the first element of a into memory.
+///
+/// `mem_addr` does not need to be aligned on any particular boundary.
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si16)
+#[inline]
+#[target_feature(enable = "sse2")]
+#[unstable(feature = "simd_x86_updates", issue = "126936")]
+pub unsafe fn _mm_storeu_si16(mem_addr: *mut u8, a: __m128i) {
+ ptr::write_unaligned(mem_addr as *mut i16, simd_extract(a.as_i16x8(), 0))
+}
+
+/// Store 32-bit integer from the first element of a into memory.
+///
+/// `mem_addr` does not need to be aligned on any particular boundary.
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si32)
+#[inline]
+#[target_feature(enable = "sse2")]
+#[unstable(feature = "simd_x86_updates", issue = "126936")]
+pub unsafe fn _mm_storeu_si32(mem_addr: *mut u8, a: __m128i) {
+ ptr::write_unaligned(mem_addr as *mut i32, simd_extract(a.as_i32x4(), 0))
+}
+
+/// Store 64-bit integer from the first element of a into memory.
+///
+/// `mem_addr` does not need to be aligned on any particular boundary.
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeu_si64)
+#[inline]
+#[target_feature(enable = "sse2")]
+#[unstable(feature = "simd_x86_updates", issue = "126936")]
+pub unsafe fn _mm_storeu_si64(mem_addr: *mut u8, a: __m128i) {
+ ptr::write_unaligned(mem_addr as *mut i64, simd_extract(a.as_i64x2(), 0))
+}
+
/// Stores the lower double-precision (64-bit) floating-point element from `a`
/// into 2 contiguous elements in memory. `mem_addr` must be aligned on a
/// 16-byte boundary or a general-protection exception may be generated.
@@ -2654,7 +2673,7 @@ pub unsafe fn _mm_storer_pd(mem_addr: *mut f64, a: __m128d) {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storeh_pd)
#[inline]
#[target_feature(enable = "sse2")]
-#[cfg_attr(all(test, not(target_os = "windows")), assert_instr(movhps))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(movhps))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_storeh_pd(mem_addr: *mut f64, a: __m128d) {
*mem_addr = simd_extract!(a, 1);
@@ -2666,7 +2685,7 @@ pub unsafe fn _mm_storeh_pd(mem_addr: *mut f64, a: __m128d) {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_storel_pd)
#[inline]
#[target_feature(enable = "sse2")]
-#[cfg_attr(all(test, not(target_os = "windows")), assert_instr(movlps))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(movlps))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_storel_pd(mem_addr: *mut f64, a: __m128d) {
*mem_addr = simd_extract!(a, 0);
@@ -2730,6 +2749,56 @@ pub unsafe fn _mm_loadu_pd(mem_addr: *const f64) -> __m128d {
dst
}
+/// Loads unaligned 16-bits of integer data from memory into new vector.
+///
+/// `mem_addr` does not need to be aligned on any particular boundary.
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si16)
+#[inline]
+#[target_feature(enable = "sse2")]
+#[unstable(feature = "simd_x86_updates", issue = "126936")]
+pub unsafe fn _mm_loadu_si16(mem_addr: *const u8) -> __m128i {
+ transmute(i16x8::new(
+ ptr::read_unaligned(mem_addr as *const i16),
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ ))
+}
+
+/// Loads unaligned 32-bits of integer data from memory into new vector.
+///
+/// `mem_addr` does not need to be aligned on any particular boundary.
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si32)
+#[inline]
+#[target_feature(enable = "sse2")]
+#[unstable(feature = "simd_x86_updates", issue = "126936")]
+pub unsafe fn _mm_loadu_si32(mem_addr: *const u8) -> __m128i {
+ transmute(i32x4::new(
+ ptr::read_unaligned(mem_addr as *const i32),
+ 0,
+ 0,
+ 0,
+ ))
+}
+
+/// Loads unaligned 16-bits of integer data from memory into new vector.
+///
+/// `mem_addr` does not need to be aligned on any particular boundary.
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_loadu_si16)
+#[inline]
+#[target_feature(enable = "sse2")]
+#[stable(feature = "simd_x86_mm_loadu_si64", since = "1.46.0")]
+pub unsafe fn _mm_loadu_si64(mem_addr: *const u8) -> __m128i {
+ transmute(i64x2::new(ptr::read_unaligned(mem_addr as *const i64), 0))
+}
+
/// Constructs a 128-bit floating-point vector of `[2 x double]` from two
/// 128-bit vector parameters of `[2 x double]`, using the immediate-value
/// parameter as a specifier.
@@ -2873,7 +2942,7 @@ pub unsafe fn _mm_unpackhi_pd(a: __m128d, b: __m128d) -> __m128d {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_unpacklo_pd)
#[inline]
#[target_feature(enable = "sse2")]
-#[cfg_attr(all(test, not(target_os = "windows")), assert_instr(movlhps))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(movlhps))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_unpacklo_pd(a: __m128d, b: __m128d) -> __m128d {
simd_shuffle!(a, b, [0, 2])
@@ -4704,6 +4773,33 @@ mod tests {
assert_eq!(vals[ofs + 1], 2.0);
}
+ #[simd_test(enable = "sse2")]
+ unsafe fn test_mm_storeu_si16() {
+ let a = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8);
+ let mut r = _mm_setr_epi16(9, 10, 11, 12, 13, 14, 15, 16);
+ _mm_storeu_si16(ptr::addr_of_mut!(r).cast(), a);
+ let e = _mm_setr_epi16(1, 10, 11, 12, 13, 14, 15, 16);
+ assert_eq_m128i(r, e);
+ }
+
+ #[simd_test(enable = "sse2")]
+ unsafe fn test_mm_storeu_si32() {
+ let a = _mm_setr_epi32(1, 2, 3, 4);
+ let mut r = _mm_setr_epi32(5, 6, 7, 8);
+ _mm_storeu_si32(ptr::addr_of_mut!(r).cast(), a);
+ let e = _mm_setr_epi32(1, 6, 7, 8);
+ assert_eq_m128i(r, e);
+ }
+
+ #[simd_test(enable = "sse2")]
+ unsafe fn test_mm_storeu_si64() {
+ let a = _mm_setr_epi64x(1, 2);
+ let mut r = _mm_setr_epi64x(3, 4);
+ _mm_storeu_si64(ptr::addr_of_mut!(r).cast(), a);
+ let e = _mm_setr_epi64x(1, 4);
+ assert_eq_m128i(r, e);
+ }
+
#[simd_test(enable = "sse2")]
unsafe fn test_mm_store1_pd() {
let mut mem = Memory { data: [0.0f64; 4] };
@@ -4788,6 +4884,27 @@ mod tests {
assert_eq_m128d(r, e);
}
+ #[simd_test(enable = "sse2")]
+ unsafe fn test_mm_loadu_si16() {
+ let a = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8);
+ let r = _mm_loadu_si16(ptr::addr_of!(a) as *const _);
+ assert_eq_m128i(r, _mm_setr_epi16(1, 0, 0, 0, 0, 0, 0, 0));
+ }
+
+ #[simd_test(enable = "sse2")]
+ unsafe fn test_mm_loadu_si32() {
+ let a = _mm_setr_epi32(1, 2, 3, 4);
+ let r = _mm_loadu_si32(ptr::addr_of!(a) as *const _);
+ assert_eq_m128i(r, _mm_setr_epi32(1, 0, 0, 0));
+ }
+
+ #[simd_test(enable = "sse2")]
+ unsafe fn test_mm_loadu_si64() {
+ let a = _mm_setr_epi64x(5, 6);
+ let r = _mm_loadu_si64(ptr::addr_of!(a) as *const _);
+ assert_eq_m128i(r, _mm_setr_epi64x(5, 0));
+ }
+
#[simd_test(enable = "sse2")]
unsafe fn test_mm_cvtpd_ps() {
let r = _mm_cvtpd_ps(_mm_setr_pd(-1.0, 5.0));
diff --git a/crates/core_arch/src/x86/sse41.rs b/crates/core_arch/src/x86/sse41.rs
index ad39b63be9..c8b260bec8 100644
--- a/crates/core_arch/src/x86/sse41.rs
+++ b/crates/core_arch/src/x86/sse41.rs
@@ -191,10 +191,7 @@ pub unsafe fn _mm_blend_ps(a: __m128, b: __m128) -> __m128 {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_ps)
#[inline]
#[target_feature(enable = "sse4.1")]
-#[cfg_attr(
- all(test, not(target_os = "windows")),
- assert_instr(extractps, IMM8 = 0)
-)]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(extractps, IMM8 = 0))]
#[rustc_legacy_const_generics(1)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_extract_ps(a: __m128) -> i32 {
@@ -223,10 +220,7 @@ pub unsafe fn _mm_extract_epi8(a: __m128i) -> i32 {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi32)
#[inline]
#[target_feature(enable = "sse4.1")]
-#[cfg_attr(
- all(test, not(target_os = "windows")),
- assert_instr(extractps, IMM8 = 1)
-)]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(extractps, IMM8 = 1))]
#[rustc_legacy_const_generics(1)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_extract_epi32(a: __m128i) -> i32 {
@@ -1148,6 +1142,26 @@ pub unsafe fn _mm_test_mix_ones_zeros(a: __m128i, mask: __m128i) -> i32 {
_mm_testnzc_si128(a, mask)
}
+/// Load 128-bits of integer data from memory into dst. mem_addr must be aligned on a 16-byte
+/// boundary or a general-protection exception may be generated. To minimize caching, the data
+/// is flagged as non-temporal (unlikely to be used again soon)
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_stream_load_si128)
+#[inline]
+#[target_feature(enable = "sse,sse4.1")]
+#[cfg_attr(test, assert_instr(movntdqa))]
+#[unstable(feature = "simd_x86_updates", issue = "126936")]
+pub unsafe fn _mm_stream_load_si128(mem_addr: *const __m128i) -> __m128i {
+ let dst: __m128i;
+ crate::arch::asm!(
+ "movntdqa {a}, [{mem_addr}]",
+ a = out(xmm_reg) dst,
+ mem_addr = in(reg) mem_addr,
+ options(pure, readonly, nostack, preserves_flags),
+ );
+ dst
+}
+
#[allow(improper_ctypes)]
extern "C" {
#[link_name = "llvm.x86.sse41.insertps"]
@@ -1942,4 +1956,11 @@ mod tests {
let r = _mm_test_mix_ones_zeros(a, mask);
assert_eq!(r, 0);
}
+
+ #[simd_test(enable = "sse4.1")]
+ unsafe fn test_mm_stream_load_si128() {
+ let a = _mm_set_epi64x(5, 6);
+ let r = _mm_stream_load_si128(core::ptr::addr_of!(a) as *const _);
+ assert_eq_m128i(a, r);
+ }
}
diff --git a/crates/core_arch/src/x86_64/avx.rs b/crates/core_arch/src/x86_64/avx.rs
index 77da2601fe..37f8ef50f8 100644
--- a/crates/core_arch/src/x86_64/avx.rs
+++ b/crates/core_arch/src/x86_64/avx.rs
@@ -29,11 +29,24 @@ pub unsafe fn _mm256_insert_epi64(a: __m256i, i: i64) -> __m25
transmute(simd_insert!(a.as_i64x4(), INDEX as u32, i))
}
+/// Extracts a 64-bit integer from `a`, selected with `INDEX`.
+///
+/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_extract_epi64)
+#[inline]
+#[target_feature(enable = "avx")]
+#[rustc_legacy_const_generics(1)]
+// This intrinsic has no corresponding instruction.
+#[stable(feature = "simd_x86", since = "1.27.0")]
+pub unsafe fn _mm256_extract_epi64(a: __m256i) -> i64 {
+ static_assert_uimm_bits!(INDEX, 2);
+ simd_extract!(a.as_i64x4(), INDEX as u32)
+}
+
#[cfg(test)]
mod tests {
use stdarch_test::simd_test;
- use crate::core_arch::x86::*;
+ use crate::core_arch::arch::x86_64::*;
#[simd_test(enable = "avx")]
unsafe fn test_mm256_insert_epi64() {
@@ -42,4 +55,11 @@ mod tests {
let e = _mm256_setr_epi64x(1, 2, 3, 0);
assert_eq_m256i(r, e);
}
+
+ #[simd_test(enable = "avx")]
+ unsafe fn test_mm256_extract_epi64() {
+ let a = _mm256_setr_epi64x(0, 1, 2, 3);
+ let r = _mm256_extract_epi64::<3>(a);
+ assert_eq!(r, 3);
+ }
}
diff --git a/crates/core_arch/src/x86_64/avx2.rs b/crates/core_arch/src/x86_64/avx2.rs
deleted file mode 100644
index fb4ea2a56a..0000000000
--- a/crates/core_arch/src/x86_64/avx2.rs
+++ /dev/null
@@ -1,48 +0,0 @@
-//! Advanced Vector Extensions 2 (AVX)
-//!
-//! AVX2 expands most AVX commands to 256-bit wide vector registers and
-//! adds [FMA](https://en.wikipedia.org/wiki/Fused_multiply-accumulate).
-//!
-//! The references are:
-//!
-//! - [Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2:
-//! Instruction Set Reference, A-Z][intel64_ref].
-//! - [AMD64 Architecture Programmer's Manual, Volume 3: General-Purpose and
-//! System Instructions][amd64_ref].
-//!
-//! Wikipedia's [AVX][wiki_avx] and [FMA][wiki_fma] pages provide a quick
-//! overview of the instructions available.
-//!
-//! [intel64_ref]: http://www.intel.de/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf
-//! [amd64_ref]: http://support.amd.com/TechDocs/24594.pdf
-//! [wiki_avx]: https://en.wikipedia.org/wiki/Advanced_Vector_Extensions
-//! [wiki_fma]: https://en.wikipedia.org/wiki/Fused_multiply-accumulate
-
-use crate::core_arch::x86::*;
-use crate::intrinsics::simd::*;
-
-/// Extracts a 64-bit integer from `a`, selected with `INDEX`.
-///
-/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm256_extract_epi64)
-#[inline]
-#[target_feature(enable = "avx2")]
-#[rustc_legacy_const_generics(1)]
-// This intrinsic has no corresponding instruction.
-#[stable(feature = "simd_x86", since = "1.27.0")]
-pub unsafe fn _mm256_extract_epi64(a: __m256i) -> i64 {
- static_assert_uimm_bits!(INDEX, 2);
- simd_extract!(a.as_i64x4(), INDEX as u32)
-}
-
-#[cfg(test)]
-mod tests {
- use crate::core_arch::arch::x86_64::*;
- use stdarch_test::simd_test;
-
- #[simd_test(enable = "avx2")]
- unsafe fn test_mm256_extract_epi64() {
- let a = _mm256_setr_epi64x(0, 1, 2, 3);
- let r = _mm256_extract_epi64::<3>(a);
- assert_eq!(r, 3);
- }
-}
diff --git a/crates/core_arch/src/x86_64/avx512f.rs b/crates/core_arch/src/x86_64/avx512f.rs
index ce6bc89f5b..359a668582 100644
--- a/crates/core_arch/src/x86_64/avx512f.rs
+++ b/crates/core_arch/src/x86_64/avx512f.rs
@@ -105,9 +105,9 @@ pub unsafe fn _mm_cvtu64_sd(a: __m128d, b: u64) -> __m128d {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtsd2si))]
+#[cfg_attr(test, assert_instr(vcvttsd2si))]
pub unsafe fn _mm_cvttsd_i64(a: __m128d) -> i64 {
- vcvtsd2si64(a.as_f64x2(), _MM_FROUND_CUR_DIRECTION)
+ vcvttsd2si64(a.as_f64x2(), _MM_FROUND_CUR_DIRECTION)
}
/// Convert the lower double-precision (64-bit) floating-point element in a to an unsigned 64-bit integer with truncation, and store the result in dst.
@@ -116,9 +116,9 @@ pub unsafe fn _mm_cvttsd_i64(a: __m128d) -> i64 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtsd2usi))]
+#[cfg_attr(test, assert_instr(vcvttsd2usi))]
pub unsafe fn _mm_cvttsd_u64(a: __m128d) -> u64 {
- vcvtsd2usi64(a.as_f64x2(), _MM_FROUND_CUR_DIRECTION)
+ vcvttsd2usi64(a.as_f64x2(), _MM_FROUND_CUR_DIRECTION)
}
/// Convert the lower single-precision (32-bit) floating-point element in a to a 64-bit integer with truncation, and store the result in dst.
@@ -127,9 +127,9 @@ pub unsafe fn _mm_cvttsd_u64(a: __m128d) -> u64 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtss2si))]
+#[cfg_attr(test, assert_instr(vcvttss2si))]
pub unsafe fn _mm_cvttss_i64(a: __m128) -> i64 {
- vcvtss2si64(a.as_f32x4(), _MM_FROUND_CUR_DIRECTION)
+ vcvttss2si64(a.as_f32x4(), _MM_FROUND_CUR_DIRECTION)
}
/// Convert the lower single-precision (32-bit) floating-point element in a to an unsigned 64-bit integer with truncation, and store the result in dst.
@@ -138,9 +138,9 @@ pub unsafe fn _mm_cvttss_i64(a: __m128) -> i64 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtss2usi))]
+#[cfg_attr(test, assert_instr(vcvttss2usi))]
pub unsafe fn _mm_cvttss_u64(a: __m128) -> u64 {
- vcvtss2usi64(a.as_f32x4(), _MM_FROUND_CUR_DIRECTION)
+ vcvttss2usi64(a.as_f32x4(), _MM_FROUND_CUR_DIRECTION)
}
/// Convert the signed 64-bit integer b to a double-precision (64-bit) floating-point element, store the result in the lower element of dst, and copy the upper element from a to the upper element of dst.
@@ -396,12 +396,12 @@ pub unsafe fn _mm_cvt_roundss_u64(a: __m128) -> u64 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtsd2si, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttsd2si, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundsd_si64(a: __m128d) -> i64 {
static_assert_sae!(SAE);
let a = a.as_f64x2();
- vcvtsd2si64(a, SAE)
+ vcvttsd2si64(a, SAE)
}
/// Convert the lower double-precision (64-bit) floating-point element in a to a 64-bit integer with truncation, and store the result in dst.\
@@ -411,12 +411,12 @@ pub unsafe fn _mm_cvtt_roundsd_si64(a: __m128d) -> i64 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtsd2si, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttsd2si, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundsd_i64(a: __m128d) -> i64 {
static_assert_sae!(SAE);
let a = a.as_f64x2();
- vcvtsd2si64(a, SAE)
+ vcvttsd2si64(a, SAE)
}
/// Convert the lower double-precision (64-bit) floating-point element in a to an unsigned 64-bit integer with truncation, and store the result in dst.\
@@ -426,12 +426,12 @@ pub unsafe fn _mm_cvtt_roundsd_i64(a: __m128d) -> i64 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtsd2usi, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttsd2usi, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundsd_u64(a: __m128d) -> u64 {
static_assert_sae!(SAE);
let a = a.as_f64x2();
- vcvtsd2usi64(a, SAE)
+ vcvttsd2usi64(a, SAE)
}
/// Convert the lower single-precision (32-bit) floating-point element in a to a 64-bit integer with truncation, and store the result in dst.\
@@ -441,12 +441,12 @@ pub unsafe fn _mm_cvtt_roundsd_u64(a: __m128d) -> u64 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtss2si, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttss2si, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundss_i64(a: __m128) -> i64 {
static_assert_sae!(SAE);
let a = a.as_f32x4();
- vcvtss2si64(a, SAE)
+ vcvttss2si64(a, SAE)
}
/// Convert the lower single-precision (32-bit) floating-point element in a to a 64-bit integer with truncation, and store the result in dst.\
@@ -456,12 +456,12 @@ pub unsafe fn _mm_cvtt_roundss_i64(a: __m128) -> i64 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtss2si, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttss2si, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundss_si64(a: __m128) -> i64 {
static_assert_sae!(SAE);
let a = a.as_f32x4();
- vcvtss2si64(a, SAE)
+ vcvttss2si64(a, SAE)
}
/// Convert the lower single-precision (32-bit) floating-point element in a to an unsigned 64-bit integer with truncation, and store the result in dst.\
@@ -471,12 +471,12 @@ pub unsafe fn _mm_cvtt_roundss_si64(a: __m128) -> i64 {
#[inline]
#[target_feature(enable = "avx512f")]
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
-#[cfg_attr(test, assert_instr(vcvtss2usi, SAE = 8))]
+#[cfg_attr(test, assert_instr(vcvttss2usi, SAE = 8))]
#[rustc_legacy_const_generics(1)]
pub unsafe fn _mm_cvtt_roundss_u64(a: __m128) -> u64 {
static_assert_sae!(SAE);
let a = a.as_f32x4();
- vcvtss2usi64(a, SAE)
+ vcvttss2usi64(a, SAE)
}
#[allow(improper_ctypes)]
@@ -498,6 +498,15 @@ extern "C" {
fn vcvtusi2ss64(a: f32x4, b: u64, rounding: i32) -> f32x4;
#[link_name = "llvm.x86.avx512.cvtusi642sd"]
fn vcvtusi2sd64(a: f64x2, b: u64, rounding: i32) -> f64x2;
+
+ #[link_name = "llvm.x86.avx512.cvttss2si64"]
+ fn vcvttss2si64(a: f32x4, rounding: i32) -> i64;
+ #[link_name = "llvm.x86.avx512.cvttss2usi64"]
+ fn vcvttss2usi64(a: f32x4, rounding: i32) -> u64;
+ #[link_name = "llvm.x86.avx512.cvttsd2si64"]
+ fn vcvttsd2si64(a: f64x2, rounding: i32) -> i64;
+ #[link_name = "llvm.x86.avx512.cvttsd2usi64"]
+ fn vcvttsd2usi64(a: f64x2, rounding: i32) -> u64;
}
#[cfg(test)]
@@ -9840,16 +9849,14 @@ mod tests {
unsafe fn test_mm512_castpd128_pd512() {
let a = _mm_setr_pd(17., 18.);
let r = _mm512_castpd128_pd512(a);
- let e = _mm512_setr_pd(17., 18., -1., -1., -1., -1., -1., -1.);
- assert_eq_m512d(r, e);
+ assert_eq_m128d(_mm512_castpd512_pd128(r), a);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_castpd256_pd512() {
let a = _mm256_setr_pd(17., 18., 19., 20.);
let r = _mm512_castpd256_pd512(a);
- let e = _mm512_setr_pd(17., 18., 19., 20., -1., -1., -1., -1.);
- assert_eq_m512d(r, e);
+ assert_eq_m256d(_mm512_castpd512_pd256(r), a);
}
#[simd_test(enable = "avx512f")]
@@ -9910,16 +9917,14 @@ mod tests {
unsafe fn test_mm512_castsi128_si512() {
let a = _mm_setr_epi64x(17, 18);
let r = _mm512_castsi128_si512(a);
- let e = _mm512_setr_epi64(17, 18, -1, -1, -1, -1, -1, -1);
- assert_eq_m512i(r, e);
+ assert_eq_m128i(_mm512_castsi512_si128(r), a);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_castsi256_si512() {
let a = _mm256_setr_epi64x(17, 18, 19, 20);
let r = _mm512_castsi256_si512(a);
- let e = _mm512_setr_epi64(17, 18, 19, 20, -1, -1, -1, -1);
- assert_eq_m512i(r, e);
+ assert_eq_m256i(_mm512_castsi512_si256(r), a);
}
#[simd_test(enable = "avx512f")]
@@ -12012,36 +12017,6 @@ mod tests {
assert_eq!(r, e);
}
- #[simd_test(enable = "avx512f")]
- unsafe fn test_mm512_stream_pd() {
- #[repr(align(64))]
- struct Memory {
- pub data: [f64; 8],
- }
- let a = _mm512_set1_pd(7.0);
- let mut mem = Memory { data: [-1.0; 8] };
-
- _mm512_stream_pd(&mut mem.data[0] as *mut f64, a);
- for i in 0..8 {
- assert_eq!(mem.data[i], get_m512d(a, i));
- }
- }
-
- #[simd_test(enable = "avx512f")]
- unsafe fn test_mm512_stream_si512() {
- #[repr(align(64))]
- struct Memory {
- pub data: [i64; 8],
- }
- let a = _mm512_set1_epi64(7);
- let mut mem = Memory { data: [-1; 8] };
-
- _mm512_stream_si512(&mut mem.data[0] as *mut i64, a);
- for i in 0..8 {
- assert_eq!(mem.data[i], get_m512i(a, i));
- }
- }
-
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_set1_epi64() {
let src = _mm512_set1_epi64(2);
@@ -12225,30 +12200,30 @@ mod tests {
unsafe fn test_mm_cvttsd_i64() {
let a = _mm_set_pd(1., -1.5);
let r = _mm_cvttsd_i64(a);
- let e: i64 = -2;
+ let e: i64 = -1;
assert_eq!(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundsd_i64() {
let a = _mm_set_pd(1., -1.5);
- let r = _mm_cvtt_roundsd_i64::<_MM_FROUND_CUR_DIRECTION>(a);
- let e: i64 = -2;
+ let r = _mm_cvtt_roundsd_i64::<_MM_FROUND_NO_EXC>(a);
+ let e: i64 = -1;
assert_eq!(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundsd_si64() {
let a = _mm_set_pd(1., -1.5);
- let r = _mm_cvtt_roundsd_si64::<_MM_FROUND_CUR_DIRECTION>(a);
- let e: i64 = -2;
+ let r = _mm_cvtt_roundsd_si64::<_MM_FROUND_NO_EXC>(a);
+ let e: i64 = -1;
assert_eq!(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundsd_u64() {
let a = _mm_set_pd(1., -1.5);
- let r = _mm_cvtt_roundsd_u64::<_MM_FROUND_CUR_DIRECTION>(a);
+ let r = _mm_cvtt_roundsd_u64::<_MM_FROUND_NO_EXC>(a);
let e: u64 = u64::MAX;
assert_eq!(r, e);
}
@@ -12265,30 +12240,30 @@ mod tests {
unsafe fn test_mm_cvttss_i64() {
let a = _mm_set_ps(0., -0.5, 1., -1.5);
let r = _mm_cvttss_i64(a);
- let e: i64 = -2;
+ let e: i64 = -1;
assert_eq!(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundss_i64() {
let a = _mm_set_ps(0., -0.5, 1., -1.5);
- let r = _mm_cvtt_roundss_i64::<_MM_FROUND_CUR_DIRECTION>(a);
- let e: i64 = -2;
+ let r = _mm_cvtt_roundss_i64::<_MM_FROUND_NO_EXC>(a);
+ let e: i64 = -1;
assert_eq!(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundss_si64() {
let a = _mm_set_ps(0., -0.5, 1., -1.5);
- let r = _mm_cvtt_roundss_si64::<_MM_FROUND_CUR_DIRECTION>(a);
- let e: i64 = -2;
+ let r = _mm_cvtt_roundss_si64::<_MM_FROUND_NO_EXC>(a);
+ let e: i64 = -1;
assert_eq!(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm_cvtt_roundss_u64() {
let a = _mm_set_ps(0., -0.5, 1., -1.5);
- let r = _mm_cvtt_roundss_u64::<_MM_FROUND_CUR_DIRECTION>(a);
+ let r = _mm_cvtt_roundss_u64::<_MM_FROUND_NO_EXC>(a);
let e: u64 = u64::MAX;
assert_eq!(r, e);
}
diff --git a/crates/core_arch/src/x86_64/mod.rs b/crates/core_arch/src/x86_64/mod.rs
index 708dc90823..ff46373d90 100644
--- a/crates/core_arch/src/x86_64/mod.rs
+++ b/crates/core_arch/src/x86_64/mod.rs
@@ -42,10 +42,6 @@ mod bmi2;
#[stable(feature = "simd_x86", since = "1.27.0")]
pub use self::bmi2::*;
-mod avx2;
-#[stable(feature = "simd_x86", since = "1.27.0")]
-pub use self::avx2::*;
-
mod avx512f;
#[unstable(feature = "stdarch_x86_avx512", issue = "111137")]
pub use self::avx512f::*;
diff --git a/crates/core_arch/src/x86_64/sse2.rs b/crates/core_arch/src/x86_64/sse2.rs
index 22788b275a..e5069058cd 100644
--- a/crates/core_arch/src/x86_64/sse2.rs
+++ b/crates/core_arch/src/x86_64/sse2.rs
@@ -92,7 +92,7 @@ pub unsafe fn _mm_stream_si64(mem_addr: *mut i64, a: i64) {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64_si128)
#[inline]
#[target_feature(enable = "sse2")]
-#[cfg_attr(all(test, not(windows)), assert_instr(movq))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(movq))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_cvtsi64_si128(a: i64) -> __m128i {
_mm_set_epi64x(0, a)
@@ -104,7 +104,7 @@ pub unsafe fn _mm_cvtsi64_si128(a: i64) -> __m128i {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi64x_si128)
#[inline]
#[target_feature(enable = "sse2")]
-#[cfg_attr(all(test, not(windows)), assert_instr(movq))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(movq))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_cvtsi64x_si128(a: i64) -> __m128i {
_mm_cvtsi64_si128(a)
@@ -115,7 +115,7 @@ pub unsafe fn _mm_cvtsi64x_si128(a: i64) -> __m128i {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64)
#[inline]
#[target_feature(enable = "sse2")]
-#[cfg_attr(all(test, not(windows)), assert_instr(movq))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(movq))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_cvtsi128_si64(a: __m128i) -> i64 {
simd_extract!(a.as_i64x2(), 0)
@@ -126,7 +126,7 @@ pub unsafe fn _mm_cvtsi128_si64(a: __m128i) -> i64 {
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_cvtsi128_si64x)
#[inline]
#[target_feature(enable = "sse2")]
-#[cfg_attr(all(test, not(windows)), assert_instr(movq))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(movq))]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_cvtsi128_si64x(a: __m128i) -> i64 {
_mm_cvtsi128_si64(a)
diff --git a/crates/core_arch/src/x86_64/sse41.rs b/crates/core_arch/src/x86_64/sse41.rs
index 81d14de15e..5c37571ed3 100644
--- a/crates/core_arch/src/x86_64/sse41.rs
+++ b/crates/core_arch/src/x86_64/sse41.rs
@@ -10,7 +10,7 @@ use stdarch_test::assert_instr;
/// [Intel's documentation](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_extract_epi64)
#[inline]
#[target_feature(enable = "sse4.1")]
-#[cfg_attr(all(test, not(target_os = "windows")), assert_instr(pextrq, IMM1 = 1))]
+#[cfg_attr(all(test, not(target_env = "msvc")), assert_instr(pextrq, IMM1 = 1))]
#[rustc_legacy_const_generics(1)]
#[stable(feature = "simd_x86", since = "1.27.0")]
pub unsafe fn _mm_extract_epi64(a: __m128i) -> i64 {
diff --git a/crates/stdarch-test/src/disassembly.rs b/crates/stdarch-test/src/disassembly.rs
index a16bfba995..206942a4b4 100644
--- a/crates/stdarch-test/src/disassembly.rs
+++ b/crates/stdarch-test/src/disassembly.rs
@@ -39,43 +39,37 @@ fn normalize(mut symbol: &str) -> String {
symbol
}
-#[cfg(windows)]
+#[cfg(target_env = "msvc")]
pub(crate) fn disassemble_myself() -> HashSet {
let me = env::current_exe().expect("failed to get current exe");
- let disassembly = if cfg!(target_env = "msvc") {
- let target = if cfg!(target_arch = "x86_64") {
- "x86_64-pc-windows-msvc"
- } else if cfg!(target_arch = "x86") {
- "i686-pc-windows-msvc"
- } else if cfg!(target_arch = "aarch64") {
- "aarch64-pc-windows-msvc"
- } else {
- panic!("disassembly unimplemented")
- };
- let mut cmd = cc::windows_registry::find(target, "dumpbin.exe")
- .expect("failed to find `dumpbin` tool");
- let output = cmd
- .arg("/DISASM:NOBYTES")
- .arg(&me)
- .output()
- .expect("failed to execute dumpbin");
- println!(
- "{}\n{}",
- output.status,
- String::from_utf8_lossy(&output.stderr)
- );
- assert!(output.status.success());
- // Windows does not return valid UTF-8 output:
- String::from_utf8_lossy(Vec::leak(output.stdout))
+ let target = if cfg!(target_arch = "x86_64") {
+ "x86_64-pc-windows-msvc"
+ } else if cfg!(target_arch = "x86") {
+ "i686-pc-windows-msvc"
+ } else if cfg!(target_arch = "aarch64") {
+ "aarch64-pc-windows-msvc"
} else {
panic!("disassembly unimplemented")
};
-
- parse(&disassembly)
+ let mut cmd =
+ cc::windows_registry::find(target, "dumpbin.exe").expect("failed to find `dumpbin` tool");
+ let output = cmd
+ .arg("/DISASM:NOBYTES")
+ .arg(&me)
+ .output()
+ .expect("failed to execute dumpbin");
+ println!(
+ "{}\n{}",
+ output.status,
+ String::from_utf8_lossy(&output.stderr)
+ );
+ assert!(output.status.success());
+ // Windows does not return valid UTF-8 output:
+ parse(&String::from_utf8_lossy(Vec::leak(output.stdout)))
}
-#[cfg(not(windows))]
+#[cfg(not(target_env = "msvc"))]
pub(crate) fn disassemble_myself() -> HashSet {
let me = env::current_exe().expect("failed to get current exe");
diff --git a/crates/stdarch-verify/Cargo.toml b/crates/stdarch-verify/Cargo.toml
index 515f05138a..83a48e9468 100644
--- a/crates/stdarch-verify/Cargo.toml
+++ b/crates/stdarch-verify/Cargo.toml
@@ -15,5 +15,5 @@ test = false
[dev-dependencies]
serde = { version = "1.0", features = ['derive'] }
-serde-xml-rs = "0.6"
serde_json = "1.0.96"
+quick-xml = { version = "0.33.0", features = ["serialize", "overlapped-lists"] }
\ No newline at end of file
diff --git a/crates/stdarch-verify/src/lib.rs b/crates/stdarch-verify/src/lib.rs
index 1eb939abcd..ff31c31c89 100644
--- a/crates/stdarch-verify/src/lib.rs
+++ b/crates/stdarch-verify/src/lib.rs
@@ -196,7 +196,6 @@ fn to_type(t: &syn::Type) -> proc_macro2::TokenStream {
"_MM_MANTISSA_NORM_ENUM" => quote! { &MM_MANTISSA_NORM_ENUM },
"_MM_MANTISSA_SIGN_ENUM" => quote! { &MM_MANTISSA_SIGN_ENUM },
"_MM_PERM_ENUM" => quote! { &MM_PERM_ENUM },
- "__m64" => quote! { &M64 },
"bool" => quote! { &BOOL },
"f32" => quote! { &F32 },
"f64" => quote! { &F64 },
diff --git a/crates/stdarch-verify/tests/mips.rs b/crates/stdarch-verify/tests/mips.rs
index 86127fe630..264d478b6a 100644
--- a/crates/stdarch-verify/tests/mips.rs
+++ b/crates/stdarch-verify/tests/mips.rs
@@ -1,5 +1,5 @@
//! Verification of MIPS MSA intrinsics
-#![allow(bad_style, unused)]
+#![allow(unused, non_upper_case_globals, clippy::single_match)]
// This file is obtained from
// https://gcc.gnu.org/onlinedocs//gcc/MIPS-SIMD-Architecture-Built-in-Functions.html
diff --git a/crates/stdarch-verify/tests/x86-intel.rs b/crates/stdarch-verify/tests/x86-intel.rs
index ec89210829..c3575933cc 100644
--- a/crates/stdarch-verify/tests/x86-intel.rs
+++ b/crates/stdarch-verify/tests/x86-intel.rs
@@ -1,17 +1,9 @@
-#![allow(bad_style)]
-#![allow(unused)]
-#![allow(
- clippy::shadow_reuse,
- clippy::cast_lossless,
- clippy::match_same_arms,
- clippy::nonminimal_bool,
- clippy::print_stdout,
- clippy::use_debug,
- clippy::eq_op,
- clippy::useless_format
-)]
-
-use std::collections::{BTreeMap, HashMap};
+#![allow(unused, non_camel_case_types)]
+
+use std::collections::{BTreeMap, HashMap, HashSet};
+use std::fs::File;
+use std::io;
+use std::io::{BufWriter, Write};
use serde::Deserialize;
@@ -43,7 +35,6 @@ static U64: Type = Type::PrimUnsigned(64);
static U128: Type = Type::PrimUnsigned(128);
static ORDERING: Type = Type::Ordering;
-static M64: Type = Type::M64;
static M128: Type = Type::M128;
static M128BH: Type = Type::M128BH;
static M128I: Type = Type::M128I;
@@ -76,7 +67,6 @@ enum Type {
PrimUnsigned(u8),
MutPtr(&'static Type),
ConstPtr(&'static Type),
- M64,
M128,
M128BH,
M128D,
@@ -115,36 +105,42 @@ struct Data {
struct Intrinsic {
#[serde(rename = "return")]
return_: Return,
+ #[serde(rename = "@name")]
name: String,
+ #[serde(rename = "@tech")]
+ tech: String,
#[serde(rename = "CPUID", default)]
cpuid: Vec,
#[serde(rename = "parameter", default)]
parameters: Vec,
+ #[serde(rename = "@sequence", default)]
+ generates_sequence: bool,
#[serde(default)]
instruction: Vec,
}
#[derive(Deserialize)]
struct Parameter {
- #[serde(rename = "type")]
+ #[serde(rename = "@type")]
type_: String,
- #[serde(default)]
+ #[serde(rename = "@etype", default)]
etype: String,
}
#[derive(Deserialize)]
struct Return {
- #[serde(rename = "type")]
+ #[serde(rename = "@type", default)]
type_: String,
}
#[derive(Deserialize, Debug)]
struct Instruction {
+ #[serde(rename = "@name")]
name: String,
}
macro_rules! bail {
- ($($t:tt)*) => (return Err(format!($($t)*)))
+ ($($t:tt)*) => { return Err(format!($($t)*)) }
}
#[test]
@@ -155,12 +151,12 @@ fn verify_all_signatures() {
// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#
//
// Open up the network console and you'll see an xml file was downloaded
- // (currently called data-3.4.xml). That's the file we downloaded
+ // (currently called data-3.6.8.xml). That's the file we downloaded
// here.
let xml = include_bytes!("../x86-intel.xml");
let xml = &xml[..];
- let data: Data = serde_xml_rs::from_reader(xml).expect("failed to deserialize xml");
+ let data: Data = quick_xml::de::from_reader(xml).expect("failed to deserialize xml");
let mut map = HashMap::new();
for intrinsic in &data.intrinsics {
map.entry(&intrinsic.name[..])
@@ -173,17 +169,12 @@ fn verify_all_signatures() {
if !rust.has_test {
// FIXME: this list should be almost empty
let skip = [
+ // EFLAGS
"__readeflags",
"__readeflags",
"__writeeflags",
"__writeeflags",
- "_mm_comige_ss",
- "_mm_cvt_ss2si",
- "_mm_cvtt_ss2si",
- "_mm_cvt_si2ss",
- "_mm_set_ps1",
- "_mm_load_ps1",
- "_mm_store_ps1",
+ // MXCSR - deprecated
"_mm_getcsr",
"_mm_setcsr",
"_MM_GET_EXCEPTION_MASK",
@@ -194,26 +185,11 @@ fn verify_all_signatures() {
"_MM_SET_EXCEPTION_STATE",
"_MM_SET_FLUSH_ZERO_MODE",
"_MM_SET_ROUNDING_MODE",
- "_mm_prefetch",
- "_mm_undefined_ps",
- "_m_pmaxsw",
- "_m_pmaxub",
- "_m_pminsw",
- "_m_pminub",
- "_m_pavgb",
- "_m_pavgw",
- "_m_psadbw",
- "_mm_cvt_pi2ps",
- "_m_maskmovq",
- "_m_pextrw",
- "_m_pinsrw",
- "_m_pmovmskb",
- "_m_pshufw",
- "_mm_cvtt_ps2pi",
- "_mm_cvt_ps2pi",
+ // CPUID
"__cpuid_count",
"__cpuid",
"__get_cpuid_max",
+ // Priviledged
"_xsave",
"_xrstor",
"_xsetbv",
@@ -222,59 +198,48 @@ fn verify_all_signatures() {
"_xsavec",
"_xsaves",
"_xrstors",
- "_mm_bslli_si128",
- "_mm_bsrli_si128",
- "_mm_undefined_pd",
- "_mm_undefined_si128",
- "_mm_cvtps_ph",
- "_mm256_cvtps_ph",
+ "_xsave64",
+ "_xrstor64",
+ "_xsaveopt64",
+ "_xsavec64",
+ "_xsaves64",
+ "_xrstors64",
+ "_fxsave",
+ "_fxrstor",
+ "_fxsave64",
+ "_fxrstor64",
+ // TSC
"_rdtsc",
"__rdtscp",
- "_mm256_castps128_ps256",
- "_mm256_castpd128_pd256",
- "_mm256_castsi128_si256",
- "_mm256_undefined_ps",
- "_mm256_undefined_pd",
- "_mm256_undefined_si256",
- "_bextr2_u32",
- "_mm_tzcnt_32",
- "_m_paddb",
- "_m_paddw",
- "_m_paddd",
- "_m_paddsb",
- "_m_paddsw",
- "_m_paddusb",
- "_m_paddusw",
- "_m_psubb",
- "_m_psubw",
- "_m_psubd",
- "_m_psubsb",
- "_m_psubsw",
- "_m_psubusb",
- "_m_psubusw",
- "_mm_set_pi16",
- "_mm_set_pi32",
- "_mm_set_pi8",
- "_mm_set1_pi16",
- "_mm_set1_pi32",
- "_mm_set1_pi8",
- "_mm_setr_pi16",
- "_mm_setr_pi32",
- "_mm_setr_pi8",
- "_mm_min_epi8",
- "_mm_min_epi32",
+ // TBM
+ "_t1mskc_u64",
+ // RTM
"_xbegin",
"_xend",
+ // RDRAND
"_rdrand16_step",
"_rdrand32_step",
+ "_rdrand64_step",
"_rdseed16_step",
"_rdseed32_step",
- "_fxsave",
- "_fxrstor",
- "_t1mskc_u64",
+ "_rdseed64_step",
+ // Prefetch
+ "_mm_prefetch",
+ // CMPXCHG
+ "cmpxchg16b",
+ // Undefined
+ "_mm_undefined_ps",
+ "_mm_undefined_pd",
+ "_mm_undefined_si128",
+ "_mm256_undefined_ps",
+ "_mm256_undefined_pd",
+ "_mm256_undefined_si256",
+ "_mm512_undefined_ps",
+ "_mm512_undefined_pd",
+ "_mm512_undefined_epi32",
+ "_mm512_undefined",
+ // Has doc-tests instead
"_mm256_shuffle_epi32",
- "_mm256_bslli_epi128",
- "_mm256_bsrli_epi128",
"_mm256_unpackhi_epi8",
"_mm256_unpacklo_epi8",
"_mm256_unpackhi_epi16",
@@ -283,26 +248,31 @@ fn verify_all_signatures() {
"_mm256_unpacklo_epi32",
"_mm256_unpackhi_epi64",
"_mm256_unpacklo_epi64",
- "_xsave64",
- "_xrstor64",
- "_xsaveopt64",
- "_xsavec64",
- "_xsaves64",
- "_xrstors64",
+ // Has tests with different name
+ "_mm_min_epi8",
+ "_mm_min_epi32",
+ // Needs `f16` to test
+ "_mm_cvtps_ph",
+ "_mm256_cvtps_ph",
+ // Aliases
+ "_mm_comige_ss",
+ "_mm_cvt_ss2si",
+ "_mm_cvtt_ss2si",
+ "_mm_cvt_si2ss",
+ "_mm_set_ps1",
+ "_mm_load_ps1",
+ "_mm_store_ps1",
+ "_mm_bslli_si128",
+ "_mm_bsrli_si128",
+ "_bextr2_u32",
+ "_mm_tzcnt_32",
+ "_mm256_bslli_epi128",
+ "_mm256_bsrli_epi128",
"_mm_cvtsi64x_si128",
"_mm_cvtsi128_si64x",
"_mm_cvtsi64x_sd",
- "cmpxchg16b",
- "_rdrand64_step",
- "_rdseed64_step",
"_bextr2_u64",
"_mm_tzcnt_64",
- "_fxsave64",
- "_fxrstor64",
- "_mm512_undefined_ps",
- "_mm512_undefined_pd",
- "_mm512_undefined_epi32",
- "_mm512_undefined",
];
if !skip.contains(&rust.name) {
println!(
@@ -332,12 +302,15 @@ fn verify_all_signatures() {
"__get_cpuid_max" |
// Not listed with intel, but manually verified
"cmpxchg16b"
- => continue,
+ => continue,
// Intel requires the mask argument for _mm_shuffle_ps to be an
// unsigned integer, but all other _mm_shuffle_.. intrinsics
// take a signed-integer. This breaks `_MM_SHUFFLE` for
// `_mm_shuffle_ps`:
- "_mm_shuffle_ps" => continue,
+ name@"_mm_shuffle_ps" => {
+ map.remove(name);
+ continue;
+ },
_ => {}
}
@@ -368,54 +341,62 @@ fn verify_all_signatures() {
}
assert!(all_valid);
- let mut missing = BTreeMap::new();
- for (name, intel) in &map {
- // currently focused mainly on missing SIMD intrinsics, but there's
- // definitely some other assorted ones that we're missing.
- if !name.starts_with("_mm") {
- continue;
- }
-
- // we'll get to avx-512 later
- // let avx512 = intel.iter().any(|i| {
- // i.name.starts_with("_mm512") || i.cpuid.iter().any(|c| {
- // c.contains("512")
- // })
- // });
- // if avx512 {
- // continue
- // }
+ if PRINT_MISSING_LISTS {
+ print_missing(&map, io::stdout()).unwrap();
+ }
+ if PRINT_MISSING_LISTS_MARKDOWN {
+ print_missing(
+ &map,
+ BufWriter::new(File::create("../core_arch/missing-x86.md").unwrap()),
+ )
+ .unwrap();
+ }
+}
- for intel in intel {
- missing
- .entry(&intel.cpuid)
- .or_insert_with(Vec::new)
- .push(intel);
- }
+fn print_missing(map: &HashMap<&str, Vec<&Intrinsic>>, mut f: impl Write) -> io::Result<()> {
+ let mut missing = BTreeMap::new(); // BTreeMap to keep the cpuids ordered
+
+ // we cannot use SVML and MMX, and MPX is not in LLVM, and intrinsics without any cpuid requirement
+ // are accessible from safe rust
+ for intrinsic in map.values().flatten().filter(|intrinsic| {
+ intrinsic.tech != "SVML"
+ && intrinsic.tech != "MMX"
+ && !intrinsic.cpuid.is_empty()
+ && !intrinsic.cpuid.contains(&"MPX".to_string())
+ && intrinsic.return_.type_ != "__m64"
+ && !intrinsic
+ .parameters
+ .iter()
+ .any(|param| param.type_.contains("__m64"))
+ }) {
+ missing
+ .entry(&intrinsic.cpuid)
+ .or_insert_with(Vec::new)
+ .push(intrinsic);
}
- // generate a bulleted list of missing intrinsics
- if PRINT_MISSING_LISTS || PRINT_MISSING_LISTS_MARKDOWN {
- for (k, v) in missing {
- if PRINT_MISSING_LISTS_MARKDOWN {
- println!("\n{k:?}
\n");
- for intel in v {
- let url = format!(
- "https://software.intel.com/sites/landingpage\
- /IntrinsicsGuide/#text={}&expand=5236",
- intel.name
- );
- println!(" * [ ] [`{}`]({url})", intel.name);
- }
- println!("
\n");
- } else {
- println!("\n{k:?}\n");
- for intel in v {
- println!("\t{}", intel.name);
- }
+ for (k, v) in &mut missing {
+ v.sort_by_key(|intrinsic| &intrinsic.name); // sort to make the order of everything same
+ if PRINT_MISSING_LISTS_MARKDOWN {
+ writeln!(f, "\n{k:?}
\n")?;
+ for intel in v {
+ let url = format!(
+ "https://software.intel.com/sites/landingpage\
+ /IntrinsicsGuide/#text={}",
+ intel.name
+ );
+ writeln!(f, " * [ ] [`{}`]({url})", intel.name)?;
+ }
+ writeln!(f, "
\n")?;
+ } else {
+ writeln!(f, "\n{k:?}\n")?;
+ for intel in v {
+ writeln!(f, "\t{}", intel.name)?;
}
}
}
+
+ f.flush()
}
fn matches(rust: &Function, intel: &Intrinsic) -> Result<(), String> {
@@ -445,6 +426,14 @@ fn matches(rust: &Function, intel: &Intrinsic) -> Result<(), String> {
}
}
+ let rust_features: HashSet = match rust.target_feature {
+ Some(features) => features
+ .split(',')
+ .map(|feature| feature.to_string())
+ .collect(),
+ None => HashSet::new(),
+ };
+
for cpuid in &intel.cpuid {
// The pause intrinsic is in the SSE2 module, but it is backwards
// compatible with CPUs without SSE2, and it therefore does not need the
@@ -478,10 +467,7 @@ fn matches(rust: &Function, intel: &Intrinsic) -> Result<(), String> {
continue;
}
- let cpuid = cpuid
- .chars()
- .flat_map(|c| c.to_lowercase())
- .collect::();
+ let cpuid = cpuid.to_lowercase();
// Fix mismatching feature names:
let fixup_cpuid = |cpuid: String| match cpuid.as_ref() {
@@ -500,39 +486,41 @@ fn matches(rust: &Function, intel: &Intrinsic) -> Result<(), String> {
// The XML file names VNNI as "avx512_vnni", while Rust calls
// it "avx512vnni".
"avx512_vnni" => String::from("avx512vnni"),
- // Some AVX512f intrinsics are also supported by Knight's Corner.
- // The XML lists them as avx512f/kncni, but we are solely gating
- // them behind avx512f since we don't have a KNC feature yet.
- "avx512f/kncni" => String::from("avx512f"),
- // See: https://github.com/rust-lang/stdarch/issues/738
- // The intrinsics guide calls `f16c` `fp16c` in disagreement with
- // Intel's architecture manuals.
- "fp16c" => String::from("f16c"),
- "avx512_bf16" => String::from("avx512bf16"),
- // The XML file names VNNI as "avx512_bf16", while Rust calls
+ // The XML file names BF16 as "avx512_bf16", while Rust calls
// it "avx512bf16".
+ "avx512_bf16" => String::from("avx512bf16"),
+ // The XML file names AVX-VNNI as "avx_vnni", while Rust calls
+ // it "avxvnni"
+ "avx_vnni" => String::from("avxvnni"),
+ // The XML file names AVX-VNNI_INT8 as "avx_vnni_int8", while Rust calls
+ // it "avxvnniint8"
+ "avx_vnni_int8" => String::from("avxvnniint8"),
+ // The XML file names AVX-NE-CONVERT as "avx_ne_convert", while Rust calls
+ // it "avxvnni"
+ "avx_ne_convert" => String::from("avxneconvert"),
+ // The XML file names AVX-IFMA as "avx_ifma", while Rust calls
+ // it "avxifma"
+ "avx_ifma" => String::from("avxifma"),
+ // The XML file names AVX-VNNI_INT16 as "avx_vnni_int16", while Rust calls
+ // it "avxvnniint16"
+ "avx_vnni_int16" => String::from("avxvnniint16"),
_ => cpuid,
};
let fixed_cpuid = fixup_cpuid(cpuid);
- let rust_feature = rust
- .target_feature
- .unwrap_or_else(|| panic!("no target feature listed for {}", rust.name));
-
- if rust_feature.contains(&fixed_cpuid) {
- continue;
+ if !rust_features.contains(&fixed_cpuid) {
+ bail!(
+ "intel cpuid `{}` not in `{:?}` for {}",
+ fixed_cpuid,
+ rust_features,
+ rust.name
+ );
}
- bail!(
- "intel cpuid `{}` not in `{}` for {}",
- fixed_cpuid,
- rust_feature,
- rust.name
- )
}
if PRINT_INSTRUCTION_VIOLATIONS {
if rust.instrs.is_empty() {
- if !intel.instruction.is_empty() {
+ if !intel.instruction.is_empty() && !intel.generates_sequence {
println!(
"instruction not listed for `{}`, but intel lists {:?}",
rust.name, intel.instruction
@@ -544,7 +532,10 @@ fn matches(rust: &Function, intel: &Intrinsic) -> Result<(), String> {
// some extra assertions on our end.
} else if !intel.instruction.is_empty() {
for instr in rust.instrs {
- let asserting = intel.instruction.iter().any(|a| a.name.starts_with(instr));
+ let asserting = intel
+ .instruction
+ .iter()
+ .any(|a| a.name.to_lowercase().starts_with(instr));
if !asserting {
println!(
"intel failed to list `{}` as an instruction for `{}`",
@@ -558,12 +549,12 @@ fn matches(rust: &Function, intel: &Intrinsic) -> Result<(), String> {
// Make sure we've got the right return type.
if let Some(t) = rust.ret {
equate(t, &intel.return_.type_, "", rust.name, false)?;
- } else if intel.return_.type_ != "" && intel.return_.type_ != "void" {
+ } else if !intel.return_.type_.is_empty() && intel.return_.type_ != "void" {
bail!(
"{} returns `{}` with intel, void in rust",
rust.name,
intel.return_.type_
- )
+ );
}
// If there's no arguments on Rust's side intel may list one "void"
@@ -575,7 +566,7 @@ fn matches(rust: &Function, intel: &Intrinsic) -> Result<(), String> {
} else {
// Otherwise we want all parameters to be exactly the same
if rust.arguments.len() != intel.parameters.len() {
- bail!("wrong number of arguments on {}", rust.name)
+ bail!("wrong number of arguments on {}", rust.name);
}
for (i, (a, b)) in intel.parameters.iter().zip(rust.arguments).enumerate() {
let is_const = rust.required_const.contains(&i);
@@ -673,7 +664,7 @@ fn matches(rust: &Function, intel: &Intrinsic) -> Result<(), String> {
"intrinsic `{}` uses a 64-bit bare type but may be \
available on 32-bit platforms",
rust.name
- )
+ );
}
Ok(())
}
@@ -700,33 +691,30 @@ fn equate(
// The _bittest intrinsics claim to only accept immediates but actually
// accept run-time values as well.
if !is_const && !intrinsic.starts_with("_bittest") {
- return bail!("argument required to be const but isn't");
+ bail!("argument required to be const but isn't");
}
} else {
// const int must be an IMM
assert_ne!(intel, "const int");
if is_const {
- return bail!("argument is const but shouldn't be");
+ bail!("argument is const but shouldn't be");
}
}
match (t, &intel[..]) {
(&Type::PrimFloat(32), "float") => {}
(&Type::PrimFloat(64), "double") => {}
- (&Type::PrimSigned(16), "__int16") => {}
- (&Type::PrimSigned(16), "short") => {}
- (&Type::PrimSigned(32), "__int32") => {}
- (&Type::PrimSigned(32), "const int") => {}
- (&Type::PrimSigned(32), "int") => {}
- (&Type::PrimSigned(64), "__int64") => {}
- (&Type::PrimSigned(64), "long long") => {}
- (&Type::PrimSigned(8), "__int8") => {}
- (&Type::PrimSigned(8), "char") => {}
+ (&Type::PrimSigned(8), "__int8" | "char") => {}
+ (&Type::PrimSigned(16), "__int16" | "short") => {}
+ (&Type::PrimSigned(32), "__int32" | "const int" | "int") => {}
+ (&Type::PrimSigned(64), "__int64" | "long long") => {}
+ (&Type::PrimUnsigned(8), "unsigned char") => {}
(&Type::PrimUnsigned(16), "unsigned short") => {}
- (&Type::PrimUnsigned(32), "unsigned int") => {}
- (&Type::PrimUnsigned(32), "const unsigned int") => {}
+ (
+ &Type::PrimUnsigned(32),
+ "unsigned __int32" | "unsigned int" | "unsigned long" | "const unsigned int",
+ ) => {}
(&Type::PrimUnsigned(64), "unsigned __int64") => {}
- (&Type::PrimUnsigned(8), "unsigned char") => {}
- (&Type::M64, "__m64") => {}
+
(&Type::M128, "__m128") => {}
(&Type::M128BH, "__m128bh") => {}
(&Type::M128I, "__m128i") => {}
@@ -744,27 +732,22 @@ fn equate(
(&Type::MMASK16, "__mmask16") => {}
(&Type::MMASK8, "__mmask8") => {}
+ (&Type::MutPtr(_), "void*") => {}
(&Type::MutPtr(&Type::PrimFloat(32)), "float*") => {}
(&Type::MutPtr(&Type::PrimFloat(64)), "double*") => {}
- (&Type::MutPtr(&Type::PrimFloat(32)), "void*") => {}
- (&Type::MutPtr(&Type::PrimFloat(64)), "void*") => {}
- (&Type::MutPtr(&Type::PrimSigned(32)), "void*") => {}
- (&Type::MutPtr(&Type::PrimSigned(16)), "void*") => {}
- (&Type::MutPtr(&Type::PrimSigned(8)), "void*") => {}
- (&Type::MutPtr(&Type::PrimSigned(32)), "int*") => {}
- (&Type::MutPtr(&Type::PrimSigned(32)), "__int32*") => {}
- (&Type::MutPtr(&Type::PrimSigned(64)), "void*") => {}
- (&Type::MutPtr(&Type::PrimSigned(64)), "__int64*") => {}
(&Type::MutPtr(&Type::PrimSigned(8)), "char*") => {}
+ (&Type::MutPtr(&Type::PrimSigned(32)), "__int32*" | "int*") => {}
+ (&Type::MutPtr(&Type::PrimSigned(64)), "__int64*") => {}
+ (&Type::MutPtr(&Type::PrimUnsigned(8)), "unsigned char*") => {}
(&Type::MutPtr(&Type::PrimUnsigned(16)), "unsigned short*") => {}
- (&Type::MutPtr(&Type::PrimUnsigned(32)), "unsigned int*") => {}
+ (&Type::MutPtr(&Type::PrimUnsigned(32)), "unsigned int*" | "unsigned __int32*") => {}
(&Type::MutPtr(&Type::PrimUnsigned(64)), "unsigned __int64*") => {}
- (&Type::MutPtr(&Type::PrimUnsigned(8)), "void*") => {}
- (&Type::MutPtr(&Type::PrimUnsigned(8)), "unsigned char*") => {}
- (&Type::MutPtr(&Type::PrimUnsigned(32)), "__mmask32*") => {}
- (&Type::MutPtr(&Type::PrimUnsigned(64)), "__mmask64*") => {}
+
(&Type::MutPtr(&Type::MMASK8), "__mmask8*") => {}
- (&Type::MutPtr(&Type::M64), "__m64*") => {}
+ (&Type::MutPtr(&Type::MMASK32), "__mmask32*") => {}
+ (&Type::MutPtr(&Type::MMASK64), "__mmask64*") => {}
+ (&Type::MutPtr(&Type::MMASK16), "__mmask16*") => {}
+
(&Type::MutPtr(&Type::M128), "__m128*") => {}
(&Type::MutPtr(&Type::M128BH), "__m128bh*") => {}
(&Type::MutPtr(&Type::M128I), "__m128i*") => {}
@@ -778,24 +761,16 @@ fn equate(
(&Type::MutPtr(&Type::M512I), "__m512i*") => {}
(&Type::MutPtr(&Type::M512D), "__m512d*") => {}
+ (&Type::ConstPtr(_), "void const*") => {}
(&Type::ConstPtr(&Type::PrimFloat(32)), "float const*") => {}
(&Type::ConstPtr(&Type::PrimFloat(64)), "double const*") => {}
- (&Type::ConstPtr(&Type::PrimFloat(32)), "void const*") => {}
- (&Type::ConstPtr(&Type::PrimFloat(64)), "void const*") => {}
- (&Type::ConstPtr(&Type::PrimSigned(32)), "int const*") => {}
- (&Type::ConstPtr(&Type::PrimSigned(32)), "__int32 const*") => {}
- (&Type::ConstPtr(&Type::PrimSigned(8)), "void const*") => {}
- (&Type::ConstPtr(&Type::PrimSigned(16)), "void const*") => {}
- (&Type::ConstPtr(&Type::PrimSigned(32)), "void const*") => {}
- (&Type::ConstPtr(&Type::PrimSigned(64)), "void const*") => {}
- (&Type::ConstPtr(&Type::PrimSigned(64)), "__int64 const*") => {}
(&Type::ConstPtr(&Type::PrimSigned(8)), "char const*") => {}
+ (&Type::ConstPtr(&Type::PrimSigned(32)), "__int32 const*" | "int const*") => {}
+ (&Type::ConstPtr(&Type::PrimSigned(64)), "__int64 const*") => {}
(&Type::ConstPtr(&Type::PrimUnsigned(16)), "unsigned short const*") => {}
(&Type::ConstPtr(&Type::PrimUnsigned(32)), "unsigned int const*") => {}
(&Type::ConstPtr(&Type::PrimUnsigned(64)), "unsigned __int64 const*") => {}
- (&Type::ConstPtr(&Type::PrimUnsigned(8)), "void const*") => {}
- (&Type::ConstPtr(&Type::PrimUnsigned(32)), "void const*") => {}
- (&Type::ConstPtr(&Type::M64), "__m64 const*") => {}
+
(&Type::ConstPtr(&Type::M128), "__m128 const*") => {}
(&Type::ConstPtr(&Type::M128BH), "__m128bh const*") => {}
(&Type::ConstPtr(&Type::M128I), "__m128i const*") => {}
@@ -808,9 +783,11 @@ fn equate(
(&Type::ConstPtr(&Type::M512BH), "__m512bh const*") => {}
(&Type::ConstPtr(&Type::M512I), "__m512i const*") => {}
(&Type::ConstPtr(&Type::M512D), "__m512d const*") => {}
- (&Type::ConstPtr(&Type::PrimUnsigned(32)), "__mmask32*") => {}
- (&Type::ConstPtr(&Type::PrimUnsigned(64)), "__mmask64*") => {}
+
(&Type::ConstPtr(&Type::MMASK8), "__mmask8*") => {}
+ (&Type::ConstPtr(&Type::MMASK16), "__mmask16*") => {}
+ (&Type::ConstPtr(&Type::MMASK32), "__mmask32*") => {}
+ (&Type::ConstPtr(&Type::MMASK64), "__mmask64*") => {}
(&Type::MM_CMPINT_ENUM, "_MM_CMPINT_ENUM") => {}
(&Type::MM_MANTISSA_NORM_ENUM, "_MM_MANTISSA_NORM_ENUM") => {}
@@ -839,6 +816,9 @@ fn equate(
|| intrinsic == "_xrstor64"
|| intrinsic == "_fxrstor"
|| intrinsic == "_fxrstor64" => {}
+ // The _mm_stream_load_si128 intrinsic take a mutable pointer in the intrinsics
+ // guide even though they never write through the pointer
+ (&Type::ConstPtr(&Type::M128I), "void*") if intrinsic == "_mm_stream_load_si128" => {}
_ => bail!(
"failed to equate: `{}` and {:?} for {}",
diff --git a/crates/stdarch-verify/x86-intel.xml b/crates/stdarch-verify/x86-intel.xml
index c875b48090..99ed2262e1 100644
--- a/crates/stdarch-verify/x86-intel.xml
+++ b/crates/stdarch-verify/x86-intel.xml
@@ -1,148137 +1,178788 @@
-
-
- Integer
- Flag
- ADX
- Arithmetic
-
-
-
-
-
- Add unsigned 32-bit integers "a" and "b" with unsigned 8-bit carry-in "c_in" (carry or overflow flag), and store the unsigned 32-bit result in "out", and the carry-out in "dst" (carry or overflow flag).
-
-tmp[32:0] := a[31:0] + b[31:0] + (c_in > 0 ? 1 : 0)
-MEM[out+31:out] := tmp[31:0]
-dst[0] := tmp[32]
-dst[7:1] := 0
-
-
-
-
-
-
- Integer
- Flag
- ADX
- Arithmetic
-
-
-
-
-
- Add unsigned 64-bit integers "a" and "b" with unsigned 8-bit carry-in "c_in" (carry or overflow flag), and store the unsigned 64-bit result in "out", and the carry-out in "dst" (carry or overflow flag).
-
-tmp[64:0] := a[63:0] + b[63:0] + (c_in > 0 ? 1 : 0)
-MEM[out+63:out] := tmp[63:0]
-dst[0] := tmp[64]
-dst[7:1] := 0
-
-
-
-
-
-
- Integer
- AES
- Cryptography
-
-
-
- Perform one round of an AES encryption flow on data (state) in "a" using the round key in "RoundKey", and store the result in "dst"."
- a[127:0] := ShiftRows(a[127:0])
-a[127:0] := SubBytes(a[127:0])
-a[127:0] := MixColumns(a[127:0])
-dst[127:0] := a[127:0] XOR RoundKey[127:0]
-
-
-
-
-
- Integer
- AES
- Cryptography
-
-
-
- Perform the last round of an AES encryption flow on data (state) in "a" using the round key in "RoundKey", and store the result in "dst"."
- a[127:0] := ShiftRows(a[127:0])
-a[127:0] := SubBytes(a[127:0])
-dst[127:0] := a[127:0] XOR RoundKey[127:0]
-
-
-
-
-
- Integer
- AES
- Cryptography
-
-
-
- Perform one round of an AES decryption flow on data (state) in "a" using the round key in "RoundKey", and store the result in "dst".
- a[127:0] := InvShiftRows(a[127:0])
-a[127:0] := InvSubBytes(a[127:0])
-a[127:0] := InvMixColumns(a[127:0])
-dst[127:0] := a[127:0] XOR RoundKey[127:0]
-
-
-
-
-
- Integer
- AES
- Cryptography
-
-
-
- Perform the last round of an AES decryption flow on data (state) in "a" using the round key in "RoundKey", and store the result in "dst".
- a[127:0] := InvShiftRows(a[127:0])
-a[127:0] := InvSubBytes(a[127:0])
-dst[127:0] := a[127:0] XOR RoundKey[127:0]
-
-
-
-
-
- Integer
- AES
- Cryptography
-
-
- Perform the InvMixColumns transformation on "a" and store the result in "dst".
- dst[127:0] := InvMixColumns(a[127:0])
-
-
-
-
-
- Integer
- AES
- Cryptography
-
-
-
- Assist in expanding the AES cipher key by computing steps towards generating a round key for encryption cipher using data from "a" and an 8-bit round constant specified in "imm8", and store the result in "dst"."
- X3[31:0] := a[127:96]
-X2[31:0] := a[95:64]
-X1[31:0] := a[63:32]
-X0[31:0] := a[31:0]
-RCON[31:0] := ZeroExtend32(imm8[7:0])
-dst[31:0] := SubWord(X1)
-dst[63:32] := RotWord(SubWord(X1)) XOR RCON
-dst[95:64] := SubWord(X3)
-dst[127:96] := RotWord(SubWord(X3)) XOR RCON
-
-
-
-
-
- Tile
- Floating Point
- AMXBF16
- Application-Targeted
-
-
-
-
- Compute dot-product of BF16 (16-bit) floating-point pairs in tiles "a" and "b", accumulating the intermediate single-precision (32-bit) floating-point elements with elements in "dst", and store the 32-bit result back to tile "dst".
- FOR m := 0 TO dst.rows - 1
- tmp := dst.row[m]
- FOR k := 0 TO (a.colsb / 4) - 1
- FOR n := 0 TO (dst.colsb / 4) - 1
+
+
+
+
+
+
+
+ Add unsigned 32-bit integers "a" and "b" with unsigned 8-bit carry-in "c_in"
+ (carry or overflow flag), and store the unsigned 32-bit result in "out", and the
+ carry-out in "dst" (carry or overflow flag).
+
+ tmp[32:0] := a[31:0] + b[31:0] + (c_in > 0 ? 1 : 0)
+ MEM[out+31:out] := tmp[31:0]
+ dst[0] := tmp[32]
+ dst[7:1] := 0
+
+
+
+ ADX
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add unsigned 64-bit integers "a" and "b" with unsigned 8-bit carry-in "c_in"
+ (carry or overflow flag), and store the unsigned 64-bit result in "out", and the
+ carry-out in "dst" (carry or overflow flag).
+
+ tmp[64:0] := a[63:0] + b[63:0] + (c_in > 0 ? 1 : 0)
+ MEM[out+63:out] := tmp[63:0]
+ dst[0] := tmp[64]
+ dst[7:1] := 0
+
+
+
+ ADX
+
+ Arithmetic
+
+
+
+
+
+ Perform one round of an AES encryption flow on data (state) in "a" using the
+ round key in "RoundKey", and store the result in "dst"."
+ a[127:0] := ShiftRows(a[127:0])
+ a[127:0] := SubBytes(a[127:0])
+ a[127:0] := MixColumns(a[127:0])
+ dst[127:0] := a[127:0] XOR RoundKey[127:0]
+
+
+ AES
+
+ Cryptography
+
+
+
+
+
+ Perform the last round of an AES encryption flow on data (state) in "a" using
+ the round key in "RoundKey", and store the result in "dst"."
+ a[127:0] := ShiftRows(a[127:0])
+ a[127:0] := SubBytes(a[127:0])
+ dst[127:0] := a[127:0] XOR RoundKey[127:0]
+
+
+ AES
+
+ Cryptography
+
+
+
+
+
+ Perform one round of an AES decryption flow on data (state) in "a" using the
+ round key in "RoundKey", and store the result in "dst".
+ a[127:0] := InvShiftRows(a[127:0])
+ a[127:0] := InvSubBytes(a[127:0])
+ a[127:0] := InvMixColumns(a[127:0])
+ dst[127:0] := a[127:0] XOR RoundKey[127:0]
+
+
+ AES
+
+ Cryptography
+
+
+
+
+
+ Perform the last round of an AES decryption flow on data (state) in "a" using
+ the round key in "RoundKey", and store the result in "dst".
+ a[127:0] := InvShiftRows(a[127:0])
+ a[127:0] := InvSubBytes(a[127:0])
+ dst[127:0] := a[127:0] XOR RoundKey[127:0]
+
+
+ AES
+
+ Cryptography
+
+
+
+
+ Perform the InvMixColumns transformation on "a" and store the result in "dst".
+ dst[127:0] := InvMixColumns(a[127:0])
+
+
+ AES
+
+ Cryptography
+
+
+
+
+
+ Assist in expanding the AES cipher key by computing steps towards generating a
+ round key for encryption cipher using data from "a" and an 8-bit round constant
+ specified in "imm8", and store the result in "dst"."
+ X3[31:0] := a[127:96]
+ X2[31:0] := a[95:64]
+ X1[31:0] := a[63:32]
+ X0[31:0] := a[31:0]
+ RCON[31:0] := ZeroExtend32(imm8[7:0])
+ dst[31:0] := SubWord(X1)
+ dst[63:32] := RotWord(SubWord(X1)) XOR RCON
+ dst[95:64] := SubWord(X3)
+ dst[127:96] := RotWord(SubWord(X3)) XOR RCON
+
+
+ AES
+
+ Cryptography
+
+
+
+
+
+
+
+
+ Compute dot-product of BF16 (16-bit) floating-point pairs in tiles "a" and "b",
+ accumulating the intermediate single-precision (32-bit) floating-point elements with
+ elements in "dst", and store the 32-bit result back to tile "dst".
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (a.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
tmp.fp32[n] += FP32(a.row[m].bf16[2*k+0]) * FP32(b.row[k].bf16[2*n+0])
tmp.fp32[n] += FP32(a.row[m].bf16[2*k+1]) * FP32(b.row[k].bf16[2*n+1])
- ENDFOR
- ENDFOR
- write_row_and_zero(dst, m, tmp, dst.colsb)
-ENDFOR
-zero_upper_rows(dst, dst.rows)
-zero_tileconfig_start()
-
-
-
-
-
- Tile
- AMXINT8
- Application-Targeted
-
-
-
-
- Compute dot-product of bytes in tiles with a source/destination accumulator. Multiply groups of 4 adjacent pairs of signed 8-bit integers in "a" with corresponding unsigned 8-bit integers in "b", producing 4 intermediate 32-bit results. Sum these 4 results with the corresponding 32-bit integer in "dst", and store the 32-bit result back to tile "dst".
- DEFINE DPBD(c, x, y) {
- tmp1 := SignExtend32(x.byte[0]) * ZeroExtend32(y.byte[0])
- tmp2 := SignExtend32(x.byte[1]) * ZeroExtend32(y.byte[1])
- tmp3 := SignExtend32(x.byte[2]) * ZeroExtend32(y.byte[2])
- tmp4 := SignExtend32(x.byte[3]) * ZeroExtend32(y.byte[3])
-
- RETURN c + tmp1 + tmp2 + tmp3 + tmp4
-}
-FOR m := 0 TO dst.rows - 1
- tmp := dst.row[m]
- FOR k := 0 TO (a.colsb / 4) - 1
- FOR n := 0 TO (dst.colsb / 4) - 1
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+ AMX-BF16
+
+ Application-Targeted
+
+
+
+ Compute dot-product of BF16 (16-bit) floating-point pairs in tiles "src0" and
+ "src1", accumulating the intermediate single-precision (32-bit) floating-point elements
+ with elements in "dst", and store the 32-bit result back to tile "dst". The shape of
+ tile is specified in the struct of __tile1024i. The register of the tile is allocated by
+ compiler.
+
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (src0.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
+ tmp.fp32[n] += FP32(src0.row[m].bf16[2*k+0]) * FP32(src1.row[k].bf16[2*n+0])
+ tmp.fp32[n] += FP32(src0.row[m].bf16[2*k+1]) * FP32(src1.row[k].bf16[2*n+1])
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+
+
+ AMX-BF16
+
+ Application-Targeted
+
+
+
+
+
+
+
+
+ Perform matrix multiplication of two tiles containing complex elements and
+ accumulate the results into a packed single precision tile. Each dword element in input
+ tiles "a" and "b" is interpreted as a complex number with FP16 real part and FP16
+ imaginary part. Calculates the imaginary part of the result. For each possible
+ combination of (row of "a", column of "b"), it performs a set of multiplication and
+ accumulations on all corresponding complex numbers (one from "a" and one from "b"). The
+ imaginary part of the "a" element is multiplied with the real part of the corresponding
+ "b" element, and the real part of the "a" element is multiplied with the imaginary part
+ of the corresponding "b" elements. The two accumulated results are added, and then
+ accumulated into the corresponding row and column of "dst".
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (a.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
+ tmp.fp32[n] += FP32(a.row[m].fp16[2*k+0]) * FP32(b.row[k].fp16[2*n+1])
+ tmp.fp32[n] += FP32(a.row[m].fp16[2*k+1]) * FP32(b.row[k].fp16[2*n+0])
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+ AMX-COMPLEX
+
+ Application-Targeted
+
+
+
+
+
+
+ Perform matrix multiplication of two tiles containing complex elements and
+ accumulate the results into a packed single precision tile. Each dword element in input
+ tiles "a" and "b" is interpreted as a complex number with FP16 real part and FP16
+ imaginary part. Calculates the real part of the result. For each possible combination of
+ (row of "a", column of "b"), it performs a set of multiplication and accumulations on
+ all corresponding complex numbers (one from "a" and one from "b"). The real part of the
+ "a" element is multiplied with the real part of the corresponding "b" element, and the
+ negated imaginary part of the "a" element is multiplied with the imaginary part of the
+ corresponding "b" elements. The two accumulated results are added, and then accumulated
+ into the corresponding row and column of "dst".
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (a.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
+ tmp.fp32[n] += FP32(a.row[m].fp16[2*k+0]) * FP32(b.row[k].fp16[2*n+0])
+ tmp.fp32[n] += FP32(-a.row[m].fp16[2*k+1]) * FP32(b.row[k].fp16[2*n+1])
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+ AMX-COMPLEX
+
+ Application-Targeted
+
+
+
+ Perform matrix multiplication of two tiles containing complex elements and
+ accumulate the results into a packed single precision tile. Each dword element in input
+ tiles "src0" and "src1" is interpreted as a complex number with FP16 real part and FP16
+ imaginary part. This function calculates the imaginary part of the result.
+
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (src0.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
+ tmp.fp32[n] += FP32(src0.row[m].fp16[2*k+0]) * FP32(src1.row[k].fp16[2*n+1])
+ tmp.fp32[n] += FP32(src0.row[m].fp16[2*k+1]) * FP32(src1.row[k].fp16[2*n+0])
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+
+
+ AMX-COMPLEX
+
+ Application-Targeted
+
+
+
+ Perform matrix multiplication of two tiles containing complex elements and
+ accumulate the results into a packed single precision tile. Each dword element in input
+ tiles src0 and src1 is interpreted as a complex number with FP16 real part and FP16
+ imaginary part. This function calculates the real part of the result.
+
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (src0.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
+ tmp.fp32[n] += FP32(src0.row[m].fp16[2*k+0]) * FP32(src1.row[k].fp16[2*n+0])
+ tmp.fp32[n] += FP32(-src0.row[m].fp16[2*k+1]) * FP32(src1.row[k].fp16[2*n+1])
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+
+
+ AMX-COMPLEX
+
+ Application-Targeted
+
+
+
+
+
+
+
+ Compute dot-product of FP16 (16-bit) floating-point pairs in tiles "a" and "b",
+ accumulating the intermediate single-precision (32-bit) floating-point elements with
+ elements in "dst", and store the 32-bit result back to tile "dst".
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (a.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
+ tmp.fp32[n] += FP32(a.row[m].fp16[2*k+0]) * FP32(b.row[k].fp16[2*n+0])
+ tmp.fp32[n] += FP32(a.row[m].fp16[2*k+1]) * FP32(b.row[k].fp16[2*n+1])
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+ AMX-FP16
+
+ Application-Targeted
+
+
+
+ Compute dot-product of FP16 (16-bit) floating-point pairs in tiles "src0" and
+ "src1", accumulating the intermediate single-precision (32-bit) floating-point elements
+ with elements in "dst", and store the 32-bit result back to tile "dst". The shape of
+ tile is specified in the struct of __tile1024i. The register of the tile is allocated by
+ compiler.
+
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (src0.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
+ tmp.fp32[n] += FP32(src0.row[m].fp16[2*k+0]) * FP32(src1.row[k].fp16[2*n+0])
+ tmp.fp32[n] += FP32(src0.row[m].fp16[2*k+1]) * FP32(src1.row[k].fp16[2*n+1])
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+
+
+ AMX-FP16
+
+ Application-Targeted
+
+
+
+
+
+
+
+
+ Compute dot-product of bytes in tiles with a source/destination accumulator.
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "a" with corresponding
+ unsigned 8-bit integers in "b", producing 4 intermediate 32-bit results. Sum these 4
+ results with the corresponding 32-bit integer in "dst", and store the 32-bit result back
+ to tile "dst".
+ DEFINE DPBD(c, x, y) {
+ tmp1 := SignExtend32(x.byte[0]) * ZeroExtend32(y.byte[0])
+ tmp2 := SignExtend32(x.byte[1]) * ZeroExtend32(y.byte[1])
+ tmp3 := SignExtend32(x.byte[2]) * ZeroExtend32(y.byte[2])
+ tmp4 := SignExtend32(x.byte[3]) * ZeroExtend32(y.byte[3])
+
+ RETURN c + tmp1 + tmp2 + tmp3 + tmp4
+ }
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (a.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
tmp.dword[n] := DPBD(tmp.dword[n], a.row[m].dword[k], b.row[k].dword[n])
- ENDFOR
- ENDFOR
- write_row_and_zero(dst, m, tmp, dst.colsb)
-ENDFOR
-zero_upper_rows(dst, dst.rows)
-zero_tileconfig_start()
-
-
-
-
-
- Tile
- AMXINT8
- Application-Targeted
-
-
-
-
- Compute dot-product of bytes in tiles with a source/destination accumulator. Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate 32-bit results. Sum these 4 results with the corresponding 32-bit integer in "dst", and store the 32-bit result back to tile "dst".
- DEFINE DPBD(c, x, y) {
- tmp1 := ZeroExtend32(x.byte[0]) * SignExtend32(y.byte[0])
- tmp2 := ZeroExtend32(x.byte[1]) * SignExtend32(y.byte[1])
- tmp3 := ZeroExtend32(x.byte[2]) * SignExtend32(y.byte[2])
- tmp4 := ZeroExtend32(x.byte[3]) * SignExtend32(y.byte[3])
-
- RETURN c + tmp1 + tmp2 + tmp3 + tmp4
-}
-FOR m := 0 TO dst.rows - 1
- tmp := dst.row[m]
- FOR k := 0 TO (a.colsb / 4) - 1
- FOR n := 0 TO (dst.colsb / 4) - 1
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+ AMX-INT8
+
+ Application-Targeted
+
+
+
+
+
+
+ Compute dot-product of bytes in tiles with a source/destination accumulator.
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding
+ signed 8-bit integers in "b", producing 4 intermediate 32-bit results. Sum these 4
+ results with the corresponding 32-bit integer in "dst", and store the 32-bit result back
+ to tile "dst".
+ DEFINE DPBD(c, x, y) {
+ tmp1 := ZeroExtend32(x.byte[0]) * SignExtend32(y.byte[0])
+ tmp2 := ZeroExtend32(x.byte[1]) * SignExtend32(y.byte[1])
+ tmp3 := ZeroExtend32(x.byte[2]) * SignExtend32(y.byte[2])
+ tmp4 := ZeroExtend32(x.byte[3]) * SignExtend32(y.byte[3])
+
+ RETURN c + tmp1 + tmp2 + tmp3 + tmp4
+ }
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (a.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
tmp.dword[n] := DPBD(tmp.dword[n], a.row[m].dword[k], b.row[k].dword[n])
- ENDFOR
- ENDFOR
- write_row_and_zero(dst, m, tmp, dst.colsb)
-ENDFOR
-zero_upper_rows(dst, dst.rows)
-zero_tileconfig_start()
-
-
-
-
-
- Tile
- AMXINT8
- Application-Targeted
-
-
-
-
- Compute dot-product of bytes in tiles with a source/destination accumulator. Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding unsigned 8-bit integers in "b", producing 4 intermediate 32-bit results. Sum these 4 results with the corresponding 32-bit integer in "dst", and store the 32-bit result back to tile "dst".
- DEFINE DPBD(c, x, y) {
- tmp1 := ZeroExtend32(x.byte[0]) * ZeroExtend32(y.byte[0])
- tmp2 := ZeroExtend32(x.byte[1]) * ZeroExtend32(y.byte[1])
- tmp3 := ZeroExtend32(x.byte[2]) * ZeroExtend32(y.byte[2])
- tmp4 := ZeroExtend32(x.byte[3]) * ZeroExtend32(y.byte[3])
-
- RETURN c + tmp1 + tmp2 + tmp3 + tmp4
-}
-FOR m := 0 TO dst.rows - 1
- tmp := dst.row[m]
- FOR k := 0 TO (a.colsb / 4) - 1
- FOR n := 0 TO (dst.colsb / 4) - 1
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+ AMX-INT8
+
+ Application-Targeted
+
+
+
+
+
+
+ Compute dot-product of bytes in tiles with a source/destination accumulator.
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding
+ unsigned 8-bit integers in "b", producing 4 intermediate 32-bit results. Sum these 4
+ results with the corresponding 32-bit integer in "dst", and store the 32-bit result back
+ to tile "dst".
+ DEFINE DPBD(c, x, y) {
+ tmp1 := ZeroExtend32(x.byte[0]) * ZeroExtend32(y.byte[0])
+ tmp2 := ZeroExtend32(x.byte[1]) * ZeroExtend32(y.byte[1])
+ tmp3 := ZeroExtend32(x.byte[2]) * ZeroExtend32(y.byte[2])
+ tmp4 := ZeroExtend32(x.byte[3]) * ZeroExtend32(y.byte[3])
+
+ RETURN c + tmp1 + tmp2 + tmp3 + tmp4
+ }
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (a.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
tmp.dword[n] := DPBD(tmp.dword[n], a.row[m].dword[k], b.row[k].dword[n])
- ENDFOR
- ENDFOR
- write_row_and_zero(dst, m, tmp, dst.colsb)
-ENDFOR
-zero_upper_rows(dst, dst.rows)
-zero_tileconfig_start()
-
-
-
-
-
- Tile
- AMXINT8
- Application-Targeted
-
-
-
-
- Compute dot-product of bytes in tiles with a source/destination accumulator. Multiply groups of 4 adjacent pairs of signed 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate 32-bit results. Sum these 4 results with the corresponding 32-bit integer in "dst", and store the 32-bit result back to tile "dst".
- DEFINE DPBD(c, x, y) {
- tmp1 := SignExtend32(x.byte[0]) * SignExtend32(y.byte[0])
- tmp2 := SignExtend32(x.byte[1]) * SignExtend32(y.byte[1])
- tmp3 := SignExtend32(x.byte[2]) * SignExtend32(y.byte[2])
- tmp4 := SignExtend32(x.byte[3]) * SignExtend32(y.byte[3])
-
- RETURN c + tmp1 + tmp2 + tmp3 + tmp4
-}
-FOR m := 0 TO dst.rows - 1
- tmp := dst.row[m]
- FOR k := 0 TO (a.colsb / 4) - 1
- FOR n := 0 TO (dst.colsb / 4) - 1
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+ AMX-INT8
+
+ Application-Targeted
+
+
+
+
+
+
+ Compute dot-product of bytes in tiles with a source/destination accumulator.
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "a" with corresponding
+ signed 8-bit integers in "b", producing 4 intermediate 32-bit results. Sum these 4
+ results with the corresponding 32-bit integer in "dst", and store the 32-bit result back
+ to tile "dst".
+ DEFINE DPBD(c, x, y) {
+ tmp1 := SignExtend32(x.byte[0]) * SignExtend32(y.byte[0])
+ tmp2 := SignExtend32(x.byte[1]) * SignExtend32(y.byte[1])
+ tmp3 := SignExtend32(x.byte[2]) * SignExtend32(y.byte[2])
+ tmp4 := SignExtend32(x.byte[3]) * SignExtend32(y.byte[3])
+
+ RETURN c + tmp1 + tmp2 + tmp3 + tmp4
+ }
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (a.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
tmp.dword[n] := DPBD(tmp.dword[n], a.row[m].dword[k], b.row[k].dword[n])
- ENDFOR
- ENDFOR
- write_row_and_zero(dst, m, tmp, dst.colsb)
-ENDFOR
-zero_upper_rows(dst, dst.rows)
-zero_tileconfig_start()
-
-
-
-
-
- Tile
- AMXTILE
- Application-Targeted
-
-
- Load tile configuration from a 64-byte memory location specified by "mem_addr". The tile configuration format is specified below, and includes the tile type pallette, the number of bytes per row, and the number of rows. If the specified pallette_id is zero, that signifies the init state for both the tile config and the tile data, and the tiles are zeroed. Any invalid configurations will result in #GP fault.
-
-// format of memory payload. each field is a byte.
-// 0: palette_id
-// 1: startRow (8b)
-// 2-15: reserved (must be zero)
-// 16-17: tile0.colsb -- bytes_per_row
-// 18-19: tile1.colsb
-// 20-21: tile2.colsb
-// ...
-// 46-47: tile15.colsb
-// 48: tile0.rows
-// 49: tile1.rows
-// 50: tile2.rows
-// ...
-// 63: tile15.rows
-
-
-
-
-
- Tile
- AMXTILE
- Application-Targeted
-
-
- Stores the current tile configuration to a 64-byte memory location specified by "mem_addr". The tile configuration format is specified below, and includes the tile type pallette, the number of bytes per row, and the number of rows. If tiles are not configured, all zeroes will be stored to memory.
-
-// format of memory payload. each field is a byte.
-// 0: palette_id
-// 1: startRow (8b)
-// 2-15: reserved (must be zero)
-// 16-17: tile0.colsb -- bytes_per_row
-// 18-19: tile1.colsb
-// 20-21: tile2.colsb
-// ...
-// 46-47: tile15.colsb
-// 48: tile0.rows
-// 49: tile1.rows
-// 50: tile2.rows
-// ...
-// 63: tile15.rows
-
-
-
-
-
- Tile
- AMXTILE
- Application-Targeted
-
-
-
-
- Load tile rows from memory specified by "base" address and "stride" into destination tile "dst" using the tile configuration previously configured via "_tile_loadconfig".
- start := tileconfig.startRow
-IF start == 0 // not restarting, zero incoming state
- tilezero(dst)
-FI
-nbytes := dst.colsb
-DO WHILE start < dst.rows
- memptr := base + start * stride
- write_row_and_zero(dst, start, read_memory(memptr, nbytes), nbytes)
- start := start + 1
-OD
-zero_upper_rows(dst, dst.rows)
-zero_tileconfig_start()
-
-
-
-
-
- Tile
- AMXTILE
- Application-Targeted
-
-
-
-
- Load tile rows from memory specified by "base" address and "stride" into destination tile "dst" using the tile configuration previously configured via "_tile_loadconfig". This intrinsic provides a hint to the implementation that the data will likely not be reused in the near future and the data caching can be optimized accordingly.
- start := tileconfig.startRow
-IF start == 0 // not restarting, zero incoming state
- tilezero(dst)
-FI
-nbytes := dst.colsb
-DO WHILE start < dst.rows
- memptr := base + start * stride
- write_row_and_zero(dst, start, read_memory(memptr, nbytes), nbytes)
- start := start + 1
-OD
-zero_upper_rows(dst, dst.rows)
-zero_tileconfig_start()
-
-
-
-
-
- Tile
- AMXTILE
- Application-Targeted
-
- Release the tile configuration to return to the init state, which releases all storage it currently holds.
-
-
-
-
- Tile
- AMXTILE
- Application-Targeted
-
-
-
-
- Store the tile specified by "src" to memory specified by "base" address and "stride" using the tile configuration previously configured via "_tile_loadconfig".
- start := tileconfig.startRow
-DO WHILE start < src.rows
- memptr := base + start * stride
- write_memory(memptr, src.colsb, src.row[start])
- start := start + 1
-OD
-zero_tileconfig_start()
-
-
-
-
-
- Tile
- AMXTILE
- Application-Targeted
-
-
- Zero the tile specified by "tdest".
- nbytes := palette_table[tileconfig.palette_id].bytes_per_row
-FOR i := 0 TO palette_table[tileconfig.palette_id].max_rows-1
- FOR j := 0 TO nbytes-1
- tdest.row[i].byte[j] := 0
- ENDFOR
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Alternatively add and subtract packed double-precision (64-bit) floating-point elements in "a" to/from packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF ((j & 1) == 0)
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Alternatively add and subtract packed single-precision (32-bit) floating-point elements in "a" to/from packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF ((j & 1) == 0)
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Logical
-
-
-
- Compute the bitwise AND of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Logical
-
-
-
- Compute the bitwise AND of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Logical
-
-
-
- Compute the bitwise NOT of packed double-precision (64-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Logical
-
-
-
- Compute the bitwise NOT of packed single-precision (32-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
-
- Blend packed double-precision (64-bit) floating-point elements from "a" and "b" using control mask "imm8", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF imm8[j]
- dst[i+63:i] := b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
-
- Blend packed single-precision (32-bit) floating-point elements from "a" and "b" using control mask "imm8", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF imm8[j]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
-
- Blend packed double-precision (64-bit) floating-point elements from "a" and "b" using "mask", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF mask[i+63]
- dst[i+63:i] := b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
-
- Blend packed single-precision (32-bit) floating-point elements from "a" and "b" using "mask", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF mask[i+31]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
-
- Conditionally multiply the packed single-precision (32-bit) floating-point elements in "a" and "b" using the high 4 bits in "imm8", sum the four products, and conditionally store the sum in "dst" using the low 4 bits of "imm8".
-
-DEFINE DP(a[127:0], b[127:0], imm8[7:0]) {
- FOR j := 0 to 3
- i := j*32
- IF imm8[(4+j)%8]
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+ AMX-INT8
+
+ Application-Targeted
+
+
+
+ Compute dot-product of bytes in tiles with a source/destination accumulator.
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "src0" with
+ corresponding signed 8-bit integers in "src1", producing 4 intermediate 32-bit results.
+ Sum these 4 results with the corresponding 32-bit integer in "dst", and store the 32-bit
+ result back to tile "dst". The shape of tile is specified in the struct of __tile1024i.
+ The register of the tile is allocated by compiler.
+
+ DEFINE DPBD(c, x, y) {
+ tmp1 := SignExtend32(x.byte[0]) * SignExtend32(y.byte[0])
+ tmp2 := SignExtend32(x.byte[1]) * SignExtend32(y.byte[1])
+ tmp3 := SignExtend32(x.byte[2]) * SignExtend32(y.byte[2])
+ tmp4 := SignExtend32(x.byte[3]) * SignExtend32(y.byte[3])
+ RETURN c + tmp1 + tmp2 + tmp3 + tmp4
+ }
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (src0.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
+ tmp.dword[n] := DPBD(tmp.dword[n], src0.row[m].dword[k], src1.row[k].dword[n])
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+
+
+ AMX-INT8
+
+ Application-Targeted
+
+
+
+ Compute dot-product of bytes in tiles with a source/destination accumulator.
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "src0" with
+ corresponding unsigned 8-bit integers in "src1", producing 4 intermediate 32-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "dst", and store
+ the 32-bit result back to tile "dst". The shape of tile is specified in the struct of
+ __tile1024i. The register of the tile is allocated by compiler.
+
+ DEFINE DPBD(c, x, y) {
+ tmp1 := SignExtend32(x.byte[0]) * ZeroExtend32(y.byte[0])
+ tmp2 := SignExtend32(x.byte[1]) * ZeroExtend32(y.byte[1])
+ tmp3 := SignExtend32(x.byte[2]) * ZeroExtend32(y.byte[2])
+ tmp4 := SignExtend32(x.byte[3]) * ZeroExtend32(y.byte[3])
+ RETURN c + tmp1 + tmp2 + tmp3 + tmp4
+ }
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (src0.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
+ tmp.dword[n] := DPBD(tmp.dword[n], src0.row[m].dword[k], src1.row[k].dword[n])
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+
+
+ AMX-INT8
+
+ Application-Targeted
+
+
+
+ Compute dot-product of bytes in tiles with a source/destination accumulator.
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "src0" with
+ corresponding signed 8-bit integers in "src1", producing 4 intermediate 32-bit results.
+ Sum these 4 results with the corresponding 32-bit integer in "dst", and store the 32-bit
+ result back to tile "dst". The shape of tile is specified in the struct of __tile1024i.
+ The register of the tile is allocated by compiler.
+
+ DEFINE DPBD(c, x, y) {
+ tmp1 := ZeroExtend32(x.byte[0]) * SignExtend32(y.byte[0])
+ tmp2 := ZeroExtend32(x.byte[1]) * SignExtend32(y.byte[1])
+ tmp3 := ZeroExtend32(x.byte[2]) * SignExtend32(y.byte[2])
+ tmp4 := ZeroExtend32(x.byte[3]) * SignExtend32(y.byte[3])
+ RETURN c + tmp1 + tmp2 + tmp3 + tmp4
+ }
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (src0.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
+ tmp.dword[n] := DPBD(tmp.dword[n], src0.row[m].dword[k], src1.row[k].dword[n])
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+
+
+ AMX-INT8
+
+ Application-Targeted
+
+
+
+ Compute dot-product of bytes in tiles with a source/destination accumulator.
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "src0" with
+ corresponding unsigned 8-bit integers in "src1", producing 4 intermediate 32-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "dst", and store
+ the 32-bit result back to tile "dst". The shape of tile is specified in the struct of
+ __tile1024i. The register of the tile is allocated by compiler.
+
+ DEFINE DPBD(c, x, y) {
+ tmp1 := ZeroExtend32(x.byte[0]) * ZeroExtend32(y.byte[0])
+ tmp2 := ZeroExtend32(x.byte[1]) * ZeroExtend32(y.byte[1])
+ tmp3 := ZeroExtend32(x.byte[2]) * ZeroExtend32(y.byte[2])
+ tmp4 := ZeroExtend32(x.byte[3]) * ZeroExtend32(y.byte[3])
+ RETURN c + tmp1 + tmp2 + tmp3 + tmp4
+ }
+ FOR m := 0 TO dst.rows - 1
+ tmp := dst.row[m]
+ FOR k := 0 TO (src0.colsb / 4) - 1
+ FOR n := 0 TO (dst.colsb / 4) - 1
+ tmp.dword[n] := DPBD(tmp.dword[n], src0.row[m].dword[k], src1.row[k].dword[n])
+ ENDFOR
+ ENDFOR
+ write_row_and_zero(dst, m, tmp, dst.colsb)
+ ENDFOR
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+
+
+ AMX-INT8
+
+ Application-Targeted
+
+
+
+
+
+
+ Load tile configuration from a 64-byte memory location specified by "mem_addr".
+ The tile configuration format is specified below, and includes the tile type pallette,
+ the number of bytes per row, and the number of rows. If the specified pallette_id is
+ zero, that signifies the init state for both the tile config and the tile data, and the
+ tiles are zeroed. Any invalid configurations will result in #GP fault.
+
+ // format of memory payload. each field is a byte.
+ // 0: palette
+ // 1: start_row
+ // 2-15: reserved, must be zero
+ // 16-17: tile0.colsb
+ // 18-19: tile1.colsb
+ // 20-21: tile2.colsb
+ // ...
+ // 30-31: tile7.colsb
+ // 32-47: reserved, must be zero
+ // 48: tile0.rows
+ // 49: tile1.rows
+ // 50: tile2.rows
+ // ...
+ // 55: tile7.rows
+ // 56-63: reserved, must be zero
+
+
+ AMX-TILE
+
+ Application-Targeted
+
+
+
+
+ Stores the current tile configuration to a 64-byte memory location specified by
+ "mem_addr". The tile configuration format is specified below, and includes the tile type
+ pallette, the number of bytes per row, and the number of rows. If tiles are not
+ configured, all zeroes will be stored to memory.
+
+ // format of memory payload. each field is a byte.
+ // 0: palette
+ // 1: start_row
+ // 2-15: reserved, must be zero
+ // 16-17: tile0.colsb
+ // 18-19: tile1.colsb
+ // 20-21: tile2.colsb
+ // ...
+ // 30-31: tile7.colsb
+ // 32-47: reserved, must be zero
+ // 48: tile0.rows
+ // 49: tile1.rows
+ // 50: tile2.rows
+ // ...
+ // 55: tile7.rows
+ // 56-63: reserved, must be zero
+
+
+ AMX-TILE
+
+ Application-Targeted
+
+
+
+
+
+
+ Load tile rows from memory specifieid by "base" address and "stride" into
+ destination tile "dst" using the tile configuration previously configured via
+ "_tile_loadconfig".
+ start := tileconfig.startRow
+ IF start == 0 // not restarting, zero incoming state
+ tilezero(dst)
+ FI
+ nbytes := dst.colsb
+ DO WHILE start < dst.rows
+ memptr := base + start * stride
+ write_row_and_zero(dst, start, read_memory(memptr, nbytes), nbytes)
+ start := start + 1
+ OD
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+ AMX-TILE
+
+ Application-Targeted
+
+
+
+
+
+
+ Load tile rows from memory specifieid by "base" address and "stride" into
+ destination tile "dst" using the tile configuration previously configured via
+ "_tile_loadconfig". This intrinsic provides a hint to the implementation that the data
+ will likely not be reused in the near future and the data caching can be optimized
+ accordingly.
+ start := tileconfig.startRow
+ IF start == 0 // not restarting, zero incoming state
+ tilezero(dst)
+ FI
+ nbytes := dst.colsb
+ DO WHILE start < dst.rows
+ memptr := base + start * stride
+ write_row_and_zero(dst, start, read_memory(memptr, nbytes), nbytes)
+ start := start + 1
+ OD
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+ AMX-TILE
+
+ Application-Targeted
+
+
+
+ Release the tile configuration to return to the init state, which releases all
+ storage it currently holds.
+
+ AMX-TILE
+
+ Application-Targeted
+
+
+
+
+
+
+ Store the tile specified by "src" to memory specifieid by "base" address and
+ "stride" using the tile configuration previously configured via "_tile_loadconfig".
+ start := tileconfig.startRow
+ DO WHILE start < src.rows
+ memptr := base + start * stride
+ write_memory(memptr, src.colsb, src.row[start])
+ start := start + 1
+ OD
+ zero_tileconfig_start()
+
+
+ AMX-TILE
+
+ Application-Targeted
+
+
+
+
+ Zero the tile specified by "tdest".
+ nbytes := palette_table[tileconfig.palette_id].bytes_per_row
+ FOR i := 0 TO palette_table[tileconfig.palette_id].max_rows-1
+ FOR j := 0 TO nbytes-1
+ tdest.row[i].byte[j] := 0
+ ENDFOR
+ ENDFOR
+
+
+ AMX-TILE
+
+ Application-Targeted
+
+
+
+ Load tile rows from memory specifieid by "base" address and "stride" into
+ destination tile "dst". The shape of tile is specified in the struct of __tile1024i. The
+ register of the tile is allocated by compiler.
+
+ start := tileconfig.startRow
+ IF start == 0 // not restarting, zero incoming state
+ tilezero(dst)
+ FI
+ nbytes := dst.colsb
+ DO WHILE start < dst.rows
+ memptr := base + start * stride
+ write_row_and_zero(dst, start, read_memory(memptr, nbytes), nbytes)
+ start := start + 1
+ OD
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+
+
+ AMX-TILE
+
+ Application-Targeted
+
+
+
+ Store the tile specified by "src" to memory specifieid by "base" address and
+ "stride". The shape of tile is specified in the struct of __tile1024i. The register of
+ the tile is allocated by compiler.
+
+ start := tileconfig.startRow
+ DO WHILE start < src.rows
+ memptr := base + start * stride
+ write_memory(memptr, src.colsb, src.row[start])
+ start := start + 1
+ OD
+ zero_tileconfig_start()
+
+
+
+
+ AMX-TILE
+
+ Application-Targeted
+
+
+
+ Load tile rows from memory specifieid by "base" address and "stride" into
+ destination tile "dst". This intrinsic provides a hint to the implementation that the
+ data will likely not be reused in the near future and the data caching can be optimized
+ accordingly. The shape of tile is specified in the struct of __tile1024i. The register
+ of the tile is allocated by compiler.
+
+ start := tileconfig.startRow
+ IF start == 0 // not restarting, zero incoming state
+ tilezero(dst)
+ FI
+ nbytes := dst.colsb
+ DO WHILE start < dst.rows
+ memptr := base + start * stride
+ write_row_and_zero(dst, start, read_memory(memptr, nbytes), nbytes)
+ start := start + 1
+ OD
+ zero_upper_rows(dst, dst.rows)
+ zero_tileconfig_start()
+
+
+
+
+ AMX-TILE
+
+ Application-Targeted
+
+
+
+ Zero the tile specified by "dst". The shape of tile is specified in the struct
+ of __tile1024i. The register of the tile is allocated by compiler.
+
+ nbytes := palette_table[tileconfig.palette_id].bytes_per_row
+ FOR i := 0 TO palette_table[tileconfig.palette_id].max_rows-1
+ FOR j := 0 TO nbytes-1
+ tdest.row[i].byte[j] := 0
+ ENDFOR
+ ENDFOR
+
+
+ AMX-TILE
+
+ Application-Targeted
+
+
+
+
+
+
+ Compute the inverse cosine of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ACOS(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the inverse cosine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ACOS(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic cosine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ACOSH(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic cosine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ACOSH(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the inverse sine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ASIN(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the inverse sine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ASIN(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic sine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ASINH(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic sine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ASINH(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the inverse tangent of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ATAN(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the inverse tangent of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ATAN(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+
+ Compute the inverse tangent of packed double-precision (64-bit) floating-point
+ elements in "a" divided by packed elements in "b", and store the results in "dst"
+ expressed in radians.
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ATAN2(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+
+ Compute the inverse tangent of packed single-precision (32-bit) floating-point
+ elements in "a" divided by packed elements in "b", and store the results in "dst"
+ expressed in radians.
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ATAN2(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic tangent of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ATANH(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic tangent of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ATANH(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := COS(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := COS(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := COSD(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := COSD(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic cosine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := COSH(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic cosine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := COSH(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+
+ Compute the length of the hypotenous of a right triangle, with the lengths of
+ the other two sides of the triangle stored as packed double-precision (64-bit)
+ floating-point elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := SQRT(POW(a[i+63:i], 2.0) + POW(b[i+63:i], 2.0))
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+
+ Compute the length of the hypotenous of a right triangle, with the lengths of
+ the other two sides of the triangle stored as packed single-precision (32-bit)
+ floating-point elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := SQRT(POW(a[i+31:i], 2.0) + POW(b[i+31:i], 2.0))
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed double-precision (64-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := SIN(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed single-precision (32-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := SIN(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+
+ Compute the sine and cosine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", and store the cosine into
+ memory at "mem_addr".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := SIN(a[i+63:i])
+ MEM[mem_addr+i+63:mem_addr+i] := COS(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+
+ Compute the sine and cosine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", and store the cosine into
+ memory at "mem_addr".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := SIN(a[i+31:i])
+ MEM[mem_addr+i+31:mem_addr+i] := COS(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed double-precision (64-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := SIND(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed single-precision (32-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := SIND(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic sine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := SINH(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic sine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := SINH(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := TAN(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := TAN(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := TAND(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := TAND(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic tangent of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := TANH(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic tangent of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := TANH(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Trigonometry
+
+
+
+
+ Compute the cube root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := CubeRoot(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the cube root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := CubeRoot(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed complex
+ numbers in "a", and store the complex results in "dst". Each complex number is composed
+ of two adjacent single-precision (32-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp32[0] + i * vec.fp32[1]".
+
+ DEFINE CEXP(a[31:0], b[31:0]) {
+ result[31:0] := POW(FP32(e), a[31:0]) * COS(b[31:0])
+ result[63:32] := POW(FP32(e), a[31:0]) * SIN(b[31:0])
+ RETURN result
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := CEXP(a[i+31:i], a[i+63:i+32])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of packed complex numbers in "a", and store the
+ complex results in "dst". Each complex number is composed of two adjacent
+ single-precision (32-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp32[0] + i * vec.fp32[1]".
+
+ DEFINE CLOG(a[31:0], b[31:0]) {
+ result[31:0] := LOG(SQRT(POW(a, 2.0) + POW(b, 2.0)))
+ result[63:32] := ATAN2(b, a)
+ RETURN result
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := CLOG(a[i+31:i], a[i+63:i+32])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed complex snumbers in "a", and store the
+ complex results in "dst". Each complex number is composed of two adjacent
+ single-precision (32-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp32[0] + i * vec.fp32[1]".
+
+ DEFINE CSQRT(a[31:0], b[31:0]) {
+ sign[31:0] := (b < 0.0) ? -FP32(1.0) : FP32(1.0)
+ result[31:0] := SQRT((a + SQRT(POW(a, 2.0) + POW(b, 2.0))) / 2.0)
+ result[63:32] := sign * SQRT((-a + SQRT(POW(a, 2.0) + POW(b, 2.0))) / 2.0)
+ RETURN result
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := CSQRT(a[i+31:i], a[i+63:i+32])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := POW(e, a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := POW(FP32(e), a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := POW(10.0, a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := POW(FP32(10.0), a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 2 raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := POW(2.0, a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 2 raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", subtract one from each
+ element, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := POW(e, a[i+63:i]) - 1.0
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", subtract one from each
+ element, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := POW(FP32(e), a[i+31:i]) - 1.0
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the inverse cube root of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := InvCubeRoot(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the inverse cube root of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := InvCubeRoot(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the inverse square root of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := InvSQRT(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the inverse square root of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := InvSQRT(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := LOG(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := LOG(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the base-10 logarithm of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := LOG(a[i+63:i]) / LOG(10.0)
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the base-10 logarithm of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := LOG(a[i+31:i]) / LOG(10.0)
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of one plus packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := LOG(1.0 + a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of one plus packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := LOG(1.0 + a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the base-2 logarithm of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := LOG(a[i+63:i]) / LOG(2.0)
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the base-2 logarithm of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := LOG(a[i+31:i]) / LOG(2.0)
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision floating-point number representing the integer
+ exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision floating-point number representing the integer
+ exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the exponential value of packed double-precision (64-bit)
+ floating-point elements in "a" raised by packed elements in "b", and store the results
+ in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := POW(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the exponential value of packed single-precision (32-bit)
+ floating-point elements in "a" raised by packed elements in "b", and store the results
+ in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := POW(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst". Note that this intrinsic is less
+ efficient than "_mm_sqrt_pd".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst". Note that this intrinsic is less
+ efficient than "_mm_sqrt_ps".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the cumulative distribution function of packed double-precision
+ (64-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := CDFNormal(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+ Compute the cumulative distribution function of packed single-precision
+ (32-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := CDFNormal(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse cumulative distribution function of packed double-precision
+ (64-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := InverseCDFNormal(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse cumulative distribution function of packed single-precision
+ (32-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := InverseCDFNormal(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+ Compute the error function of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ERF(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+ Compute the error function of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ERF(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+ Compute the complementary error function of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := 1.0 - ERF(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+ Compute the complementary error function of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+63:i] := 1.0 - ERF(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse complementary error function of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+63:i]))
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse complementary error function of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+31:i]))
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse error function of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := 1.0 / ERF(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse error function of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+63:i] := 1.0 / ERF(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Probability/Statistics
+
+
+
+
+
+ Divide packed signed 8-bit integers in "a" by packed elements in "b", and store
+ the truncated results in "dst".
+
+ FOR j := 0 to 31
+ i := 8*j
+ IF b[i+7:i] == 0
+ #DE
+ FI
+ dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed signed 16-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 15
+ i := 16*j
+ IF b[i+15:i] == 0
+ #DE
+ FI
+ dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed signed 32-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF b[i+31:i] == 0
+ #DE
+ FI
+ dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed signed 64-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ IF b[i+63:i] == 0
+ #DE
+ FI
+ dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 31
+ i := 8*j
+ IF b[i+7:i] == 0
+ #DE
+ FI
+ dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 15
+ i := 16*j
+ IF b[i+15:i] == 0
+ #DE
+ FI
+ dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF b[i+31:i] == 0
+ #DE
+ FI
+ dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ IF b[i+63:i] == 0
+ #DE
+ FI
+ dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 32-bit integers in "a" by packed elements in "b", and store the
+ truncated results in "dst".
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed 32-bit integers in "a" by packed elements in "b", store the
+ truncated results in "dst", and store the remainders as packed 32-bit integers into
+ memory at "mem_addr".
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
+ MEM[mem_addr+i+31:mem_addr+i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 32-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 8-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 31
+ i := 8*j
+ dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 16-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 15
+ i := 16*j
+ dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 32-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 64-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 3
+ i := 64*j
+ dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 31
+ i := 8*j
+ dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 15
+ i := 16*j
+ dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 3
+ i := 64*j
+ dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", store
+ the truncated results in "dst", and store the remainders as packed unsigned 32-bit
+ integers into memory at "mem_addr".
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
+ MEM[mem_addr+i+31:mem_addr+i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Arithmetic
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed double-precision floating-point
+ elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := CEIL(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed single-precision floating-point
+ elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := CEIL(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed double-precision floating-point
+ elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := FLOOR(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed single-precision floating-point
+ elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := FLOOR(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" to
+ the nearest integer value, and store the results as packed double-precision
+ floating-point elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd"
+ instruction.
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ROUND(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" to
+ the nearest integer value, and store the results as packed single-precision
+ floating-point elements in "dst". This intrinsic may generate the "roundps"/"vroundps"
+ instruction.
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ROUND(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+ Truncate the packed double-precision (64-bit) floating-point elements in "a",
+ and store the results as packed double-precision floating-point elements in "dst". This
+ intrinsic may generate the "roundpd"/"vroundpd" instruction.
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := TRUNCATE(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Miscellaneous
+
+
+
+
+ Truncate the packed single-precision (32-bit) floating-point elements in "a",
+ and store the results as packed single-precision floating-point elements in "dst". This
+ intrinsic may generate the "roundps"/"vroundps" instruction.
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := TRUNCATE(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Alternatively add and subtract packed double-precision (64-bit) floating-point
+ elements in "a" to/from packed elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF ((j & 1) == 0)
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Alternatively add and subtract packed single-precision (32-bit) floating-point
+ elements in "a" to/from packed elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF ((j & 1) == 0)
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+
+ Conditionally multiply the packed single-precision (32-bit) floating-point
+ elements in "a" and "b" using the high 4 bits in "imm8", sum the four products, and
+ conditionally store the sum in "dst" using the low 4 bits of "imm8".
+
+ DEFINE DP(a[127:0], b[127:0], imm8[7:0]) {
+ FOR j := 0 to 3
+ i := j*32
+ IF imm8[(4+j)%8]
temp[i+31:i] := a[i+31:i] * b[i+31:i]
- ELSE
+ ELSE
temp[i+31:i] := FP32(0.0)
- FI
- ENDFOR
-
- sum[31:0] := (temp[127:96] + temp[95:64]) + (temp[63:32] + temp[31:0])
-
- FOR j := 0 to 3
- i := j*32
- IF imm8[j%8]
+ FI
+ ENDFOR
+
+ sum[31:0] := (temp[127:96] + temp[95:64]) + (temp[63:32] + temp[31:0])
+
+ FOR j := 0 to 3
+ i := j*32
+ IF imm8[j%8]
tmpdst[i+31:i] := sum[31:0]
- ELSE
+ ELSE
tmpdst[i+31:i] := FP32(0.0)
- FI
- ENDFOR
- RETURN tmpdst[127:0]
-}
-dst[127:0] := DP(a[127:0], b[127:0], imm8[7:0])
-dst[255:128] := DP(a[255:128], b[255:128], imm8[7:0])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of double-precision (64-bit) floating-point elements in "a" and "b", and pack the results in "dst".
-
-dst[63:0] := a[127:64] + a[63:0]
-dst[127:64] := b[127:64] + b[63:0]
-dst[191:128] := a[255:192] + a[191:128]
-dst[255:192] := b[255:192] + b[191:128]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of single-precision (32-bit) floating-point elements in "a" and "b", and pack the results in "dst".
-
-dst[31:0] := a[63:32] + a[31:0]
-dst[63:32] := a[127:96] + a[95:64]
-dst[95:64] := b[63:32] + b[31:0]
-dst[127:96] := b[127:96] + b[95:64]
-dst[159:128] := a[191:160] + a[159:128]
-dst[191:160] := a[255:224] + a[223:192]
-dst[223:192] := b[191:160] + b[159:128]
-dst[255:224] := b[255:224] + b[223:192]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Horizontally subtract adjacent pairs of double-precision (64-bit) floating-point elements in "a" and "b", and pack the results in "dst".
-
-dst[63:0] := a[63:0] - a[127:64]
-dst[127:64] := b[63:0] - b[127:64]
-dst[191:128] := a[191:128] - a[255:192]
-dst[255:192] := b[191:128] - b[255:192]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of single-precision (32-bit) floating-point elements in "a" and "b", and pack the results in "dst".
-
-dst[31:0] := a[31:0] - a[63:32]
-dst[63:32] := a[95:64] - a[127:96]
-dst[95:64] := b[31:0] - b[63:32]
-dst[127:96] := b[95:64] - b[127:96]
-dst[159:128] := a[159:128] - a[191:160]
-dst[191:160] := a[223:192] - a[255:224]
-dst[223:192] := b[159:128] - b[191:160]
-dst[255:224] := b[223:192] - b[255:224]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Logical
-
-
-
- Compute the bitwise OR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Logical
-
-
-
- Compute the bitwise OR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes using the control in "imm8", and store the results in "dst".
-
-dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
-dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
-dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
-dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-dst[95:64] := SELECT4(b[127:0], imm8[5:4])
-dst[127:96] := SELECT4(b[127:0], imm8[7:6])
-dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-dst[223:192] := SELECT4(b[255:128], imm8[5:4])
-dst[255:224] := SELECT4(b[255:128], imm8[7:6])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Arithmetic
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Logical
-
-
-
- Compute the bitwise XOR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Logical
-
-
-
- Compute the bitwise XOR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in "dst".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ( a[i+63:i] OP b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in "dst".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ( a[i+63:i] OP b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in "dst".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] OP b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in "dst".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ( a[i+31:i] OP b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Compare
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-dst[63:0] := ( a[63:0] OP b[63:0] ) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX
- Compare
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-dst[31:0] := ( a[31:0] OP b[31:0] ) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_FP32(a[k+63:k])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 32*j
- dst[i+63:i] := Convert_FP32_To_FP64(a[k+31:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[k+63:k])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_Int32(a[k+63:k])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX
- Swizzle
-
-
-
- Extract 128 bits (composed of integer data) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX
- Swizzle
-
-
-
- Extract a 32-bit integer from "a", selected with "index", and store the result in "dst".
-
-dst[31:0] := (a[255:0] >> (index[2:0] * 32))[31:0]
-
-
-
-
- Integer
- AVX
- Swizzle
-
-
-
- Extract a 64-bit integer from "a", selected with "index", and store the result in "dst".
-
-dst[63:0] := (a[255:0] >> (index[1:0] * 64))[63:0]
-
-
-
-
- AVX
- General Support
-
-
- Zero the contents of all XMM or YMM registers.
- YMM0[MAX:0] := 0
-YMM1[MAX:0] := 0
-YMM2[MAX:0] := 0
-YMM3[MAX:0] := 0
-YMM4[MAX:0] := 0
-YMM5[MAX:0] := 0
-YMM6[MAX:0] := 0
-YMM7[MAX:0] := 0
-IF _64_BIT_MODE
- YMM8[MAX:0] := 0
- YMM9[MAX:0] := 0
- YMM10[MAX:0] := 0
- YMM11[MAX:0] := 0
- YMM12[MAX:0] := 0
- YMM13[MAX:0] := 0
- YMM14[MAX:0] := 0
- YMM15[MAX:0] := 0
-FI
-
-
-
-
-
- AVX
- General Support
-
-
- Zero the upper 128 bits of all YMM registers; the lower 128-bits of the registers are unmodified.
- YMM0[MAX:128] := 0
-YMM1[MAX:128] := 0
-YMM2[MAX:128] := 0
-YMM3[MAX:128] := 0
-YMM4[MAX:128] := 0
-YMM5[MAX:128] := 0
-YMM6[MAX:128] := 0
-YMM7[MAX:128] := 0
-IF _64_BIT_MODE
- YMM8[MAX:128] := 0
- YMM9[MAX:128] := 0
- YMM10[MAX:128] := 0
- YMM11[MAX:128] := 0
- YMM12[MAX:128] := 0
- YMM13[MAX:128] := 0
- YMM14[MAX:128] := 0
- YMM15[MAX:128] := 0
-FI
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], b[1:0])
-dst[63:32] := SELECT4(a[127:0], b[33:32])
-dst[95:64] := SELECT4(a[127:0], b[65:64])
-dst[127:96] := SELECT4(a[127:0], b[97:96])
-dst[159:128] := SELECT4(a[255:128], b[129:128])
-dst[191:160] := SELECT4(a[255:128], b[161:160])
-dst[223:192] := SELECT4(a[255:128], b[193:192])
-dst[255:224] := SELECT4(a[255:128], b[225:224])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" using the control in "b", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], b[1:0])
-dst[63:32] := SELECT4(a[127:0], b[33:32])
-dst[95:64] := SELECT4(a[127:0], b[65:64])
-dst[127:96] := SELECT4(a[127:0], b[97:96])
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst".
-
-IF (b[1] == 0) dst[63:0] := a[63:0]; FI
-IF (b[1] == 1) dst[63:0] := a[127:64]; FI
-IF (b[65] == 0) dst[127:64] := a[63:0]; FI
-IF (b[65] == 1) dst[127:64] := a[127:64]; FI
-IF (b[129] == 0) dst[191:128] := a[191:128]; FI
-IF (b[129] == 1) dst[191:128] := a[255:192]; FI
-IF (b[193] == 0) dst[255:192] := a[191:128]; FI
-IF (b[193] == 1) dst[255:192] := a[255:192]; FI
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" using the control in "b", and store the results in "dst".
-
-IF (b[1] == 0) dst[63:0] := a[63:0]; FI
-IF (b[1] == 1) dst[63:0] := a[127:64]; FI
-IF (b[65] == 0) dst[127:64] := a[63:0]; FI
-IF (b[65] == 1) dst[127:64] := a[127:64]; FI
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst".
-
-IF (imm8[0] == 0) dst[63:0] := a[63:0]; FI
-IF (imm8[0] == 1) dst[63:0] := a[127:64]; FI
-IF (imm8[1] == 0) dst[127:64] := a[63:0]; FI
-IF (imm8[1] == 1) dst[127:64] := a[127:64]; FI
-IF (imm8[2] == 0) dst[191:128] := a[191:128]; FI
-IF (imm8[2] == 1) dst[191:128] := a[255:192]; FI
-IF (imm8[3] == 0) dst[255:192] := a[191:128]; FI
-IF (imm8[3] == 1) dst[255:192] := a[255:192]; FI
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" using the control in "imm8", and store the results in "dst".
-
-IF (imm8[0] == 0) dst[63:0] := a[63:0]; FI
-IF (imm8[0] == 1) dst[63:0] := a[127:64]; FI
-IF (imm8[1] == 0) dst[127:64] := a[63:0]; FI
-IF (imm8[1] == 1) dst[127:64] := a[127:64]; FI
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
-
- Shuffle 128-bits (composed of 4 packed single-precision (32-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-DEFINE SELECT4(src1, src2, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src1[127:0]
- 1: tmp[127:0] := src1[255:128]
- 2: tmp[127:0] := src2[127:0]
- 3: tmp[127:0] := src2[255:128]
- ESAC
- IF control[3]
- tmp[127:0] := 0
- FI
- RETURN tmp[127:0]
-}
-dst[127:0] := SELECT4(a[255:0], b[255:0], imm8[3:0])
-dst[255:128] := SELECT4(a[255:0], b[255:0], imm8[7:4])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
-
- Shuffle 128-bits (composed of 2 packed double-precision (64-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-DEFINE SELECT4(src1, src2, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src1[127:0]
- 1: tmp[127:0] := src1[255:128]
- 2: tmp[127:0] := src2[127:0]
- 3: tmp[127:0] := src2[255:128]
- ESAC
- IF control[3]
- tmp[127:0] := 0
- FI
- RETURN tmp[127:0]
-}
-dst[127:0] := SELECT4(a[255:0], b[255:0], imm8[3:0])
-dst[255:128] := SELECT4(a[255:0], b[255:0], imm8[7:4])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX
- Swizzle
-
-
-
-
- Shuffle 128-bits (composed of integer data) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-DEFINE SELECT4(src1, src2, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src1[127:0]
- 1: tmp[127:0] := src1[255:128]
- 2: tmp[127:0] := src2[127:0]
- 3: tmp[127:0] := src2[255:128]
- ESAC
- IF control[3]
- tmp[127:0] := 0
- FI
- RETURN tmp[127:0]
-}
-dst[127:0] := SELECT4(a[255:0], b[255:0], imm8[3:0])
-dst[255:128] := SELECT4(a[255:0], b[255:0], imm8[7:4])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Load
-
-
- Broadcast a single-precision (32-bit) floating-point element from memory to all elements of "dst".
-
-tmp[31:0] := MEM[mem_addr+31:mem_addr]
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := tmp[31:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Load
- Swizzle
-
-
- Broadcast a single-precision (32-bit) floating-point element from memory to all elements of "dst".
-
-tmp[31:0] := MEM[mem_addr+31:mem_addr]
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := tmp[31:0]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX
- Load
- Swizzle
-
-
- Broadcast a double-precision (64-bit) floating-point element from memory to all elements of "dst".
-
-tmp[63:0] := MEM[mem_addr+63:mem_addr]
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := tmp[63:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Load
- Swizzle
-
-
- Broadcast 128 bits from memory (composed of 4 packed single-precision (32-bit) floating-point elements) to all elements of "dst".
-
-tmp[127:0] := MEM[mem_addr+127:mem_addr]
-dst[127:0] := tmp[127:0]
-dst[255:128] := tmp[127:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Load
- Swizzle
-
-
- Broadcast 128 bits from memory (composed of 2 packed double-precision (64-bit) floating-point elements) to all elements of "dst".
-
-tmp[127:0] := MEM[mem_addr+127:mem_addr]
-dst[127:0] := tmp[127:0]
-dst[255:128] := tmp[127:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
-
- Copy "a" to "dst", then insert 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "b" into "dst" at the location specified by "imm8".
-
-dst[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
-
- Copy "a" to "dst", then insert 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "b" into "dst" at the location specified by "imm8".
-
-dst[255:0] := a[255:0]
-CASE imm8[0] OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX
- Swizzle
-
-
-
-
- Copy "a" to "dst", then insert 128 bits from "b" into "dst" at the location specified by "imm8".
-
-dst[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX
- Swizzle
-
-
-
-
- Copy "a" to "dst", and insert the 8-bit integer "i" into "dst" at the location specified by "index".
-
-dst[255:0] := a[255:0]
-sel := index[4:0]*8
-dst[sel+7:sel] := i[7:0]
-
-
-
-
- Integer
- AVX
- Swizzle
-
-
-
-
- Copy "a" to "dst", and insert the 16-bit integer "i" into "dst" at the location specified by "index".
-
-dst[255:0] := a[255:0]
-sel := index[3:0]*16
-dst[sel+15:sel] := i[15:0]
-
-
-
-
- Integer
- AVX
- Swizzle
-
-
-
-
- Copy "a" to "dst", and insert the 32-bit integer "i" into "dst" at the location specified by "index".
-
-dst[255:0] := a[255:0]
-sel := index[2:0]*32
-dst[sel+31:sel] := i[31:0]
-
-
-
-
- Integer
- AVX
- Swizzle
-
-
-
-
- Copy "a" to "dst", and insert the 64-bit integer "i" into "dst" at the location specified by "index".
-
-dst[255:0] := a[255:0]
-sel := index[1:0]*64
-dst[sel+63:sel] := i[63:0]
-
-
-
-
- Floating Point
- AVX
- Load
-
-
- Load 256-bits (composed of 4 packed double-precision (64-bit) floating-point elements) from memory into "dst".
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
- Store 256-bits (composed of 4 packed double-precision (64-bit) floating-point elements) from "a" into memory.
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Floating Point
- AVX
- Load
-
-
- Load 256-bits (composed of 8 packed single-precision (32-bit) floating-point elements) from memory into "dst".
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
- Store 256-bits (composed of 8 packed single-precision (32-bit) floating-point elements) from "a" into memory.
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Floating Point
- AVX
- Load
-
-
- Load 256-bits (composed of 4 packed double-precision (64-bit) floating-point elements) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
- Store 256-bits (composed of 4 packed double-precision (64-bit) floating-point elements) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Floating Point
- AVX
- Load
-
-
- Load 256-bits (composed of 8 packed single-precision (32-bit) floating-point elements) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
- Store 256-bits (composed of 8 packed single-precision (32-bit) floating-point elements) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Integer
- AVX
- Load
-
-
- Load 256-bits of integer data from memory into "dst".
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX
- Store
-
-
-
- Store 256-bits of integer data from "a" into memory.
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Integer
- AVX
- Load
-
-
- Load 256-bits of integer data from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX
- Store
-
-
-
- Store 256-bits of integer data from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Floating Point
- AVX
- Load
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memory into "dst" using "mask" (elements are zeroed out when the high bit of the corresponding element is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF mask[i+63]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
-
- Store packed double-precision (64-bit) floating-point elements from "a" into memory using "mask".
-
-FOR j := 0 to 3
- i := j*64
- IF mask[i+63]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX
- Load
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memory into "dst" using "mask" (elements are zeroed out when the high bit of the corresponding element is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF mask[i+63]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
-
- Store packed double-precision (64-bit) floating-point elements from "a" into memory using "mask".
-
-FOR j := 0 to 1
- i := j*64
- IF mask[i+63]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX
- Load
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using "mask" (elements are zeroed out when the high bit of the corresponding element is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF mask[i+31]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
-
- Store packed single-precision (32-bit) floating-point elements from "a" into memory using "mask".
-
-FOR j := 0 to 7
- i := j*32
- IF mask[i+31]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX
- Load
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using "mask" (elements are zeroed out when the high bit of the corresponding element is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF mask[i+31]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
-
- Store packed single-precision (32-bit) floating-point elements from "a" into memory using "mask".
-
-FOR j := 0 to 3
- i := j*32
- IF mask[i+31]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX
- Move
-
-
- Duplicate odd-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst".
-
-dst[31:0] := a[63:32]
-dst[63:32] := a[63:32]
-dst[95:64] := a[127:96]
-dst[127:96] := a[127:96]
-dst[159:128] := a[191:160]
-dst[191:160] := a[191:160]
-dst[223:192] := a[255:224]
-dst[255:224] := a[255:224]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Move
-
-
- Duplicate even-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst".
-
-dst[31:0] := a[31:0]
-dst[63:32] := a[31:0]
-dst[95:64] := a[95:64]
-dst[127:96] := a[95:64]
-dst[159:128] := a[159:128]
-dst[191:160] := a[159:128]
-dst[223:192] := a[223:192]
-dst[255:224] := a[223:192]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Move
-
-
- Duplicate even-indexed double-precision (64-bit) floating-point elements from "a", and store the results in "dst".
-
-dst[63:0] := a[63:0]
-dst[127:64] := a[63:0]
-dst[191:128] := a[191:128]
-dst[255:192] := a[191:128]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX
- Load
-
-
- Load 256-bits of integer data from unaligned memory into "dst". This intrinsic may perform better than "_mm256_loadu_si256" when the data crosses a cache line boundary.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX
- Store
-
-
-
- Store 256-bits of integer data from "a" into memory using a non-temporal memory hint.
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
- Store 256-bits (composed of 4 packed double-precision (64-bit) floating-point elements) from "a" into memory using a non-temporal memory hint.
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
- Store 256-bits (composed of 8 packed single-precision (32-bit) floating-point elements) from "a" into memory using a non-temporal memory hint.
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 1.5*2^-12.
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := 1.0 / a[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 1.5*2^-12.
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := SQRT(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := SQRT(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" using the "rounding" parameter, and store the results as packed double-precision floating-point elements in "dst".
- [round_note]
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ROUND(a[i+63:i], rounding)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" using the "rounding" parameter, and store the results as packed single-precision floating-point elements in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ROUND(a[i+31:i], rounding)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Swizzle
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 256 bits (representing integer data) in "a" and "b", and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set "CF" to 0. Return the "ZF" value.
-
-IF ((a[255:0] AND b[255:0]) == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-IF (((NOT a[255:0]) AND b[255:0]) == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-RETURN ZF
-
-
-
-
-
- Integer
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 256 bits (representing integer data) in "a" and "b", and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set "CF" to 0. Return the "CF" value.
-
-IF ((a[255:0] AND b[255:0]) == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-IF (((NOT a[255:0]) AND b[255:0]) == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-RETURN CF
-
-
-
-
-
- Integer
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 256 bits (representing integer data) in "a" and "b", and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF" values are zero, otherwise return 0.
-
-IF ((a[255:0] AND b[255:0]) == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-IF (((NOT a[255:0]) AND b[255:0]) == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-IF (ZF == 0 && CF == 0)
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 256 bits (representing double-precision (64-bit) floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return the "ZF" value.
-
-tmp[255:0] := a[255:0] AND b[255:0]
-IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[255:0] := (NOT a[255:0]) AND b[255:0]
-IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-dst := ZF
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 256 bits (representing double-precision (64-bit) floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return the "CF" value.
-
-tmp[255:0] := a[255:0] AND b[255:0]
-IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[255:0] := (NOT a[255:0]) AND b[255:0]
-IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-dst := CF
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 256 bits (representing double-precision (64-bit) floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF" values are zero, otherwise return 0.
-
-tmp[255:0] := a[255:0] AND b[255:0]
-IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[255:0] := (NOT a[255:0]) AND b[255:0]
-IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-IF (ZF == 0 && CF == 0)
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing double-precision (64-bit) floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return the "ZF" value.
-
-tmp[127:0] := a[127:0] AND b[127:0]
-IF (tmp[63] == 0 && tmp[127] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[127:0] := (NOT a[127:0]) AND b[127:0]
-IF (tmp[63] == 0 && tmp[127] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-dst := ZF
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing double-precision (64-bit) floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return the "CF" value.
-
-tmp[127:0] := a[127:0] AND b[127:0]
-IF (tmp[63] == 0 && tmp[127] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[127:0] := (NOT a[127:0]) AND b[127:0]
-IF (tmp[63] == 0 && tmp[127] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-dst := CF
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing double-precision (64-bit) floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF" values are zero, otherwise return 0.
-
-tmp[127:0] := a[127:0] AND b[127:0]
-IF (tmp[63] == 0 && tmp[127] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[127:0] := (NOT a[127:0]) AND b[127:0]
-IF (tmp[63] == 0 && tmp[127] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-IF (ZF == 0 && CF == 0)
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 256 bits (representing single-precision (32-bit) floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return the "ZF" value.
-
-tmp[255:0] := a[255:0] AND b[255:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0 && \
- tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[255:0] := (NOT a[255:0]) AND b[255:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0 && \
- tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-dst := ZF
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 256 bits (representing single-precision (32-bit) floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return the "CF" value.
-
-tmp[255:0] := a[255:0] AND b[255:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0 && \
- tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[255:0] := (NOT a[255:0]) AND b[255:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0 && \
- tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-dst := CF
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 256 bits (representing single-precision (32-bit) floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF" values are zero, otherwise return 0.
-
-tmp[255:0] := a[255:0] AND b[255:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0 && \
- tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[255:0] := (NOT a[255:0]) AND b[255:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0 && \
- tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-IF (ZF == 0 && CF == 0)
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing single-precision (32-bit) floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return the "ZF" value.
-
-tmp[127:0] := a[127:0] AND b[127:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[127:0] := (NOT a[127:0]) AND b[127:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-dst := ZF
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing single-precision (32-bit) floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return the "CF" value.
-
-tmp[127:0] := a[127:0] AND b[127:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[127:0] := (NOT a[127:0]) AND b[127:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-dst := CF
-
-
-
-
-
- Floating Point
- Flag
- AVX
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing single-precision (32-bit) floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero, otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF" values are zero, otherwise return 0.
-
-tmp[127:0] := a[127:0] AND b[127:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-tmp[127:0] := (NOT a[127:0]) AND b[127:0]
-IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-IF (ZF == 0 && CF == 0)
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Floating Point
- AVX
- Miscellaneous
-
-
- Set each bit of mask "dst" based on the most significant bit of the corresponding packed double-precision (64-bit) floating-point element in "a".
-
-FOR j := 0 to 3
- i := j*64
- IF a[i+63]
- dst[j] := 1
- ELSE
- dst[j] := 0
- FI
-ENDFOR
-dst[MAX:4] := 0
-
-
-
-
-
- Floating Point
- AVX
- Miscellaneous
-
-
- Set each bit of mask "dst" based on the most significant bit of the corresponding packed single-precision (32-bit) floating-point element in "a".
-
-FOR j := 0 to 7
- i := j*32
- IF a[i+31]
- dst[j] := 1
- ELSE
- dst[j] := 0
- FI
-ENDFOR
-dst[MAX:8] := 0
-
-
-
-
-
- Floating Point
- AVX
- Set
-
-
- Return vector of type __m256d with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- Floating Point
- AVX
- Set
-
-
- Return vector of type __m256 with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- Integer
- AVX
- Set
-
-
- Return vector of type __m256i with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- Floating Point
- AVX
- Set
-
-
-
-
-
- Set packed double-precision (64-bit) floating-point elements in "dst" with the supplied values.
-
-dst[63:0] := e0
-dst[127:64] := e1
-dst[191:128] := e2
-dst[255:192] := e3
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Set
-
-
-
-
-
-
-
-
-
- Set packed single-precision (32-bit) floating-point elements in "dst" with the supplied values.
-
-dst[31:0] := e0
-dst[63:32] := e1
-dst[95:64] := e2
-dst[127:96] := e3
-dst[159:128] := e4
-dst[191:160] := e5
-dst[223:192] := e6
-dst[255:224] := e7
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed 8-bit integers in "dst" with the supplied values.
-
-dst[7:0] := e0
-dst[15:8] := e1
-dst[23:16] := e2
-dst[31:24] := e3
-dst[39:32] := e4
-dst[47:40] := e5
-dst[55:48] := e6
-dst[63:56] := e7
-dst[71:64] := e8
-dst[79:72] := e9
-dst[87:80] := e10
-dst[95:88] := e11
-dst[103:96] := e12
-dst[111:104] := e13
-dst[119:112] := e14
-dst[127:120] := e15
-dst[135:128] := e16
-dst[143:136] := e17
-dst[151:144] := e18
-dst[159:152] := e19
-dst[167:160] := e20
-dst[175:168] := e21
-dst[183:176] := e22
-dst[191:184] := e23
-dst[199:192] := e24
-dst[207:200] := e25
-dst[215:208] := e26
-dst[223:216] := e27
-dst[231:224] := e28
-dst[239:232] := e29
-dst[247:240] := e30
-dst[255:248] := e31
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed 16-bit integers in "dst" with the supplied values.
-
-dst[15:0] := e0
-dst[31:16] := e1
-dst[47:32] := e2
-dst[63:48] := e3
-dst[79:64] := e4
-dst[95:80] := e5
-dst[111:96] := e6
-dst[127:112] := e7
-dst[143:128] := e8
-dst[159:144] := e9
-dst[175:160] := e10
-dst[191:176] := e11
-dst[207:192] := e12
-dst[223:208] := e13
-dst[239:224] := e14
-dst[255:240] := e15
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
-
-
-
-
-
-
-
- Set packed 32-bit integers in "dst" with the supplied values.
-
-dst[31:0] := e0
-dst[63:32] := e1
-dst[95:64] := e2
-dst[127:96] := e3
-dst[159:128] := e4
-dst[191:160] := e5
-dst[223:192] := e6
-dst[255:224] := e7
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
-
-
-
- Set packed 64-bit integers in "dst" with the supplied values.
-
-dst[63:0] := e0
-dst[127:64] := e1
-dst[191:128] := e2
-dst[255:192] := e3
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Set
-
-
-
-
-
- Set packed double-precision (64-bit) floating-point elements in "dst" with the supplied values in reverse order.
-
-dst[63:0] := e3
-dst[127:64] := e2
-dst[191:128] := e1
-dst[255:192] := e0
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Set
-
-
-
-
-
-
-
-
-
- Set packed single-precision (32-bit) floating-point elements in "dst" with the supplied values in reverse order.
-
-dst[31:0] := e7
-dst[63:32] := e6
-dst[95:64] := e5
-dst[127:96] := e4
-dst[159:128] := e3
-dst[191:160] := e2
-dst[223:192] := e1
-dst[255:224] := e0
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed 8-bit integers in "dst" with the supplied values in reverse order.
-
-dst[7:0] := e31
-dst[15:8] := e30
-dst[23:16] := e29
-dst[31:24] := e28
-dst[39:32] := e27
-dst[47:40] := e26
-dst[55:48] := e25
-dst[63:56] := e24
-dst[71:64] := e23
-dst[79:72] := e22
-dst[87:80] := e21
-dst[95:88] := e20
-dst[103:96] := e19
-dst[111:104] := e18
-dst[119:112] := e17
-dst[127:120] := e16
-dst[135:128] := e15
-dst[143:136] := e14
-dst[151:144] := e13
-dst[159:152] := e12
-dst[167:160] := e11
-dst[175:168] := e10
-dst[183:176] := e9
-dst[191:184] := e8
-dst[199:192] := e7
-dst[207:200] := e6
-dst[215:208] := e5
-dst[223:216] := e4
-dst[231:224] := e3
-dst[239:232] := e2
-dst[247:240] := e1
-dst[255:248] := e0
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed 16-bit integers in "dst" with the supplied values in reverse order.
-
-dst[15:0] := e15
-dst[31:16] := e14
-dst[47:32] := e13
-dst[63:48] := e12
-dst[79:64] := e11
-dst[95:80] := e10
-dst[111:96] := e9
-dst[127:112] := e8
-dst[143:128] := e7
-dst[159:144] := e6
-dst[175:160] := e5
-dst[191:176] := e4
-dst[207:192] := e3
-dst[223:208] := e2
-dst[239:224] := e1
-dst[255:240] := e0
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
-
-
-
-
-
-
-
- Set packed 32-bit integers in "dst" with the supplied values in reverse order.
-
-dst[31:0] := e7
-dst[63:32] := e6
-dst[95:64] := e5
-dst[127:96] := e4
-dst[159:128] := e3
-dst[191:160] := e2
-dst[223:192] := e1
-dst[255:224] := e0
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
-
-
-
- Set packed 64-bit integers in "dst" with the supplied values in reverse order.
-
-dst[63:0] := e3
-dst[127:64] := e2
-dst[191:128] := e1
-dst[255:192] := e0
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Set
-
-
- Broadcast double-precision (64-bit) floating-point value "a" to all elements of "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Set
-
-
- Broadcast single-precision (32-bit) floating-point value "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
- Broadcast 8-bit integer "a" to all elements of "dst". This intrinsic may generate the "vpbroadcastb".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := a[7:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
- Broadcast 16-bit integer "a" to all all elements of "dst". This intrinsic may generate the "vpbroadcastw".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := a[15:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
- Broadcast 32-bit integer "a" to all elements of "dst". This intrinsic may generate the "vpbroadcastd".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Set
-
-
- Broadcast 64-bit integer "a" to all elements of "dst". This intrinsic may generate the "vpbroadcastq".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Cast
-
-
- Cast vector of type __m256d to type __m256.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX
- Cast
-
-
- Cast vector of type __m256 to type __m256d.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- Integer
- AVX
- Cast
-
-
- Cast vector of type __m256 to type __m256i. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- Integer
- AVX
- Cast
-
-
- Cast vector of type __m256d to type __m256i. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX
- Cast
-
-
- Cast vector of type __m256i to type __m256. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX
- Cast
-
-
- Cast vector of type __m256i to type __m256d. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX
- Cast
-
-
- Cast vector of type __m256 to type __m128. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX
- Cast
-
-
- Cast vector of type __m256d to type __m128d. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Integer
- AVX
- Cast
-
-
- Cast vector of type __m256i to type __m128i. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX
- Cast
-
-
- Cast vector of type __m128 to type __m256; the upper 128 bits of the result are undefined. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX
- Cast
-
-
- Cast vector of type __m128d to type __m256d; the upper 128 bits of the result are undefined. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Integer
- AVX
- Cast
-
-
- Cast vector of type __m128i to type __m256i; the upper 128 bits of the result are undefined. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX
- Cast
-
-
- Cast vector of type __m128 to type __m256; the upper 128 bits of the result are zeroed. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX
- Cast
-
-
- Cast vector of type __m128d to type __m256d; the upper 128 bits of the result are zeroed. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Integer
- AVX
- Cast
-
-
- Cast vector of type __m128i to type __m256i; the upper 128 bits of the result are zeroed. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" down to an integer value, and store the results as packed single-precision floating-point elements in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := FLOOR(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" up to an integer value, and store the results as packed single-precision floating-point elements in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := CEIL(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" down to an integer value, and store the results as packed double-precision floating-point elements in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := FLOOR(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" up to an integer value, and store the results as packed double-precision floating-point elements in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := CEIL(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- General Support
-
-
- Return vector of type __m256 with undefined elements.
-
-
-
- Floating Point
- AVX
- General Support
-
-
- Return vector of type __m256d with undefined elements.
-
-
-
- Integer
- AVX
- General Support
-
-
- Return vector of type __m256i with undefined elements.
-
-
-
- Floating Point
- AVX
- Set
-
-
-
- Set packed __m256 vector "dst" with the supplied values.
-
-dst[127:0] := lo[127:0]
-dst[255:128] := hi[127:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Set
-
-
-
- Set packed __m256d vector "dst" with the supplied values.
-
-dst[127:0] := lo[127:0]
-dst[255:128] := hi[127:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX
- Set
-
-
-
- Set packed __m256i vector "dst" with the supplied values.
-
-dst[127:0] := lo[127:0]
-dst[255:128] := hi[127:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Set
-
-
-
- Set packed __m256 vector "dst" with the supplied values.
-
-dst[127:0] := lo[127:0]
-dst[255:128] := hi[127:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Set
-
-
-
- Set packed __m256d vector "dst" with the supplied values.
-
-dst[127:0] := lo[127:0]
-dst[255:128] := hi[127:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX
- Set
-
-
-
- Set packed __m256i vector "dst" with the supplied values.
-
-dst[127:0] := lo[127:0]
-dst[255:128] := hi[127:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX
- Load
-
-
-
- Load two 128-bit values (composed of 4 packed single-precision (32-bit) floating-point elements) from memory, and combine them into a 256-bit value in "dst".
- "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
-
-dst[127:0] := MEM[loaddr+127:loaddr]
-dst[255:128] := MEM[hiaddr+127:hiaddr]
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Load
-
-
-
- Load two 128-bit values (composed of 2 packed double-precision (64-bit) floating-point elements) from memory, and combine them into a 256-bit value in "dst".
- "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
-
-dst[127:0] := MEM[loaddr+127:loaddr]
-dst[255:128] := MEM[hiaddr+127:hiaddr]
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Load
-
-
-
- Load two 128-bit values (composed of integer data) from memory, and combine them into a 256-bit value in "dst".
- "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
-
-dst[127:0] := MEM[loaddr+127:loaddr]
-dst[255:128] := MEM[hiaddr+127:hiaddr]
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
-
- Store the high and low 128-bit halves (each composed of 4 packed single-precision (32-bit) floating-point elements) from "a" into memory two different 128-bit locations.
- "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
-
-MEM[loaddr+127:loaddr] := a[127:0]
-MEM[hiaddr+127:hiaddr] := a[255:128]
-
-
-
-
- Floating Point
- AVX
- Store
-
-
-
-
- Store the high and low 128-bit halves (each composed of 2 packed double-precision (64-bit) floating-point elements) from "a" into memory two different 128-bit locations.
- "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
-
-MEM[loaddr+127:loaddr] := a[127:0]
-MEM[hiaddr+127:hiaddr] := a[255:128]
-
-
-
-
- Integer
- AVX
- Store
-
-
-
-
- Store the high and low 128-bit halves (each composed of integer data) from "a" into memory two different 128-bit locations.
- "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
-
-MEM[loaddr+127:loaddr] := a[127:0]
-MEM[hiaddr+127:hiaddr] := a[255:128]
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse cosine of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ACOS(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ACOS(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse hyperbolic cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ACOSH(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse hyperbolic cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ACOSH(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ASIN(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ASIN(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse hyperbolic sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ASINH(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse hyperbolic sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ASINH(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ATAN(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ATAN(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
-
- Compute the inverse tangent of packed double-precision (64-bit) floating-point elements in "a" divided by packed elements in "b", and store the results in "dst" expressed in radians.
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ATAN2(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
-
- Compute the inverse tangent of packed single-precision (32-bit) floating-point elements in "a" divided by packed elements in "b", and store the results in "dst" expressed in radians.
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ATAN2(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse hyperbolic tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ATANH(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the inverse hyperbolic tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ATANH(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the cube root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := CubeRoot(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the cube root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := CubeRoot(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the cumulative distribution function of packed double-precision (64-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := CDFNormal(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the cumulative distribution function of packed single-precision (32-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := CDFNormal(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the inverse cumulative distribution function of packed double-precision (64-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := InverseCDFNormal(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the inverse cumulative distribution function of packed single-precision (32-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := InverseCDFNormal(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed complex numbers in "a", and store the complex results in "dst". Each complex number is composed of two adjacent single-precision (32-bit) floating-point elements, which defines the complex number "complex = vec.fp32[0] + i * vec.fp32[1]".
-
-DEFINE CEXP(a[31:0], b[31:0]) {
- result[31:0] := POW(FP32(e), a[31:0]) * COS(b[31:0])
- result[63:32] := POW(FP32(e), a[31:0]) * SIN(b[31:0])
- RETURN result
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := CEXP(a[i+31:i], a[i+63:i+32])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the natural logarithm of packed complex numbers in "a", and store the complex results in "dst". Each complex number is composed of two adjacent single-precision (32-bit) floating-point elements, which defines the complex number "complex = vec.fp32[0] + i * vec.fp32[1]".
-
-DEFINE CLOG(a[31:0], b[31:0]) {
- result[31:0] := LOG(SQRT(POW(a, 2.0) + POW(b, 2.0)))
- result[63:32] := ATAN2(b, a)
- RETURN result
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := CLOG(a[i+31:i], a[i+63:i+32])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := COS(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := COS(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := COSD(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := COSD(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the hyperbolic cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := COSH(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the hyperbolic cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := COSH(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the square root of packed complex snumbers in "a", and store the complex results in "dst". Each complex number is composed of two adjacent single-precision (32-bit) floating-point elements, which defines the complex number "complex = vec.fp32[0] + i * vec.fp32[1]".
-
-DEFINE CSQRT(a[31:0], b[31:0]) {
- sign[31:0] := (b < 0.0) ? -FP32(1.0) : FP32(1.0)
- result[31:0] := SQRT((a + SQRT(POW(a, 2.0) + POW(b, 2.0))) / 2.0)
- result[63:32] := sign * SQRT((-a + SQRT(POW(a, 2.0) + POW(b, 2.0))) / 2.0)
- RETURN result
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := CSQRT(a[i+31:i], a[i+63:i+32])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed signed 8-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 31
- i := 8*j
- IF b[i+7:i] == 0
- #DE
- FI
- dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed signed 16-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 15
- i := 16*j
- IF b[i+15:i] == 0
- #DE
- FI
- dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed signed 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- IF b[i+31:i] == 0
- #DE
- FI
- dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed signed 64-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- IF b[i+63:i] == 0
- #DE
- FI
- dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 31
- i := 8*j
- IF b[i+7:i] == 0
- #DE
- FI
- dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 15
- i := 16*j
- IF b[i+15:i] == 0
- #DE
- FI
- dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- IF b[i+31:i] == 0
- #DE
- FI
- dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- IF b[i+63:i] == 0
- #DE
- FI
- dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ERF(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ERF(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the complementary error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := 1.0 - ERF(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the complementary error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+63:i] := 1.0 - ERF(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the inverse complementary error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+63:i]))
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the inverse complementary error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+31:i]))
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the inverse error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := 1.0 / ERF(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Probability/Statistics
-
-
- Compute the inverse error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+63:i] := 1.0 / ERF(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := POW(e, a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := POW(FP32(e), a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the exponential value of 10 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := POW(10.0, a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the exponential value of 10 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := POW(FP32(10.0), a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the exponential value of 2 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := POW(2.0, a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the exponential value of 2 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed double-precision (64-bit) floating-point elements in "a", subtract one from each element, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := POW(e, a[i+63:i]) - 1.0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed single-precision (32-bit) floating-point elements in "a", subtract one from each element, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := POW(FP32(e), a[i+31:i]) - 1.0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
-
- Compute the length of the hypotenous of a right triangle, with the lengths of the other two sides of the triangle stored as packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := SQRT(POW(a[i+63:i], 2.0) + POW(b[i+63:i], 2.0))
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
-
- Compute the length of the hypotenous of a right triangle, with the lengths of the other two sides of the triangle stored as packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := SQRT(POW(a[i+31:i], 2.0) + POW(b[i+31:i], 2.0))
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
- FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
-
- Divide packed 32-bit integers in "a" by packed elements in "b", store the truncated results in "dst", and store the remainders as packed 32-bit integers into memory at "mem_addr".
- FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
- MEM[mem_addr+i+31:mem_addr+i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the inverse cube root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := InvCubeRoot(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the inverse cube root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := InvCubeRoot(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the inverse square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := InvSQRT(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the inverse square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := InvSQRT(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed 32-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the natural logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := LOG(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the natural logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := LOG(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the base-10 logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := LOG(a[i+63:i]) / LOG(10.0)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the base-10 logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := LOG(a[i+31:i]) / LOG(10.0)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the natural logarithm of one plus packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := LOG(1.0 + a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the natural logarithm of one plus packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := LOG(1.0 + a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the base-2 logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := LOG(a[i+63:i]) / LOG(2.0)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the base-2 logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := LOG(a[i+31:i]) / LOG(2.0)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
-
- Compute the exponential value of packed double-precision (64-bit) floating-point elements in "a" raised by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := POW(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
-
- Compute the exponential value of packed single-precision (32-bit) floating-point elements in "a" raised by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := POW(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed 8-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 31
- i := 8*j
- dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed 16-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 15
- i := 16*j
- dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed 32-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed 64-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 3
- i := 64*j
- dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 31
- i := 8*j
- dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 15
- i := 16*j
- dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 3
- i := 64*j
- dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := SIN(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := SIN(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
-
- Compute the sine and cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, store the sine in "dst", and store the cosine into memory at "mem_addr".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := SIN(a[i+63:i])
- MEM[mem_addr+i+63:mem_addr+i] := COS(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
-
- Compute the sine and cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, store the sine in "dst", and store the cosine into memory at "mem_addr".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := SIN(a[i+31:i])
- MEM[mem_addr+i+31:mem_addr+i] := COS(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the sine of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := SIND(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the sine of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := SIND(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the hyperbolic sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := SINH(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the hyperbolic sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := SINH(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" up to an integer value, and store the results as packed double-precision floating-point elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := CEIL(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" up to an integer value, and store the results as packed single-precision floating-point elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := CEIL(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" down to an integer value, and store the results as packed double-precision floating-point elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := FLOOR(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" down to an integer value, and store the results as packed single-precision floating-point elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := FLOOR(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" to the nearest integer value, and store the results as packed double-precision floating-point elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ROUND(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" to the nearest integer value, and store the results as packed single-precision floating-point elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ROUND(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". Note that this intrinsic is less efficient than "_mm_sqrt_pd".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := SQRT(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Elementary Math Functions
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". Note that this intrinsic is less efficient than "_mm_sqrt_ps".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := SQRT(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := TAN(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := TAN(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := TAND(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := TAND(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the hyperbolic tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := TANH(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Trigonometry
-
-
- Compute the hyperbolic tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := TANH(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Miscellaneous
-
-
- Truncate the packed double-precision (64-bit) floating-point elements in "a", and store the results as packed double-precision floating-point elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := TRUNCATE(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Miscellaneous
-
-
- Truncate the packed single-precision (32-bit) floating-point elements in "a", and store the results as packed single-precision floating-point elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := TRUNCATE(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
- FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", store the truncated results in "dst", and store the remainders as packed unsigned 32-bit integers into memory at "mem_addr".
- FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
- MEM[mem_addr+i+31:mem_addr+i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- AVX
- Arithmetic
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- AVX
- Convert
-
-
- Copy the lower single-precision (32-bit) floating-point element of "a" to "dst".
-
-dst[31:0] := a[31:0]
-
-
-
-
-
- Floating Point
- AVX
- Convert
-
-
- Copy the lower double-precision (64-bit) floating-point element of "a" to "dst".
-
-dst[63:0] := a[63:0]
-
-
-
-
-
- Integer
- AVX
- Convert
-
-
- Copy the lower 32-bit integer in "a" to "dst".
-
-dst[31:0] := a[31:0]
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Extract an 8-bit integer from "a", selected with "index", and store the result in "dst".
-
-dst[7:0] := (a[255:0] >> (index[4:0] * 8))[7:0]
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Extract a 16-bit integer from "a", selected with "index", and store the result in "dst".
-
-dst[15:0] := (a[255:0] >> (index[3:0] * 16))[15:0]
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
- Compute the absolute value of packed signed 8-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := ABS(a[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
- Compute the absolute value of packed signed 16-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := ABS(a[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
- Compute the absolute value of packed signed 32-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ABS(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Add packed 8-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := a[i+7:i] + b[i+7:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Add packed 16-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := a[i+15:i] + b[i+15:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Add packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Add packed 64-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Add packed 8-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Add packed 16-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Miscellaneous
-
-
-
-
- Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst".
-
-FOR j := 0 to 1
- i := j*128
- tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
- dst[i+127:i] := tmp[127:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Logical
-
-
-
- Compute the bitwise AND of 256 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[255:0] := (a[255:0] AND b[255:0])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Logical
-
-
-
- Compute the bitwise NOT of 256 bits (representing integer data) in "a" and then AND with "b", and store the result in "dst".
-
-dst[255:0] := ((NOT a[255:0]) AND b[255:0])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Probability/Statistics
-
-
-
- Average packed unsigned 8-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Probability/Statistics
-
-
-
- Average packed unsigned 16-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
-
- Blend packed 16-bit integers from "a" and "b" within 128-bit lanes using control mask "imm8", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- IF imm8[j%8]
- dst[i+15:i] := b[i+15:i]
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
-
- Blend packed 32-bit integers from "a" and "b" using control mask "imm8", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF imm8[j]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
-
- Blend packed 32-bit integers from "a" and "b" using control mask "imm8", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF imm8[j]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
-
- Blend packed 8-bit integers from "a" and "b" using "mask", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- IF mask[i+7]
- dst[i+7:i] := b[i+7:i]
- ELSE
- dst[i+7:i] := a[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
- Broadcast the low packed 8-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := a[7:0]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
- Broadcast the low packed 8-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := a[7:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
- Broadcast the low packed 32-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
- Broadcast the low packed 32-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
- Broadcast the low packed 64-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
- Broadcast the low packed 64-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Swizzle
-
-
- Broadcast the low double-precision (64-bit) floating-point element from "a" to all elements of "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Swizzle
-
-
- Broadcast the low double-precision (64-bit) floating-point element from "a" to all elements of "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
- Broadcast 128 bits of integer data from "a" to all 128-bit lanes in "dst".
-
-dst[127:0] := a[127:0]
-dst[255:128] := a[127:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
- Broadcast 128 bits of integer data from "a" to all 128-bit lanes in "dst".
-
-dst[127:0] := a[127:0]
-dst[255:128] := a[127:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Swizzle
-
-
- Broadcast the low single-precision (32-bit) floating-point element from "a" to all elements of "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Swizzle
-
-
- Broadcast the low single-precision (32-bit) floating-point element from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := a[15:0]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := a[15:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Compare
-
-
-
- Compare packed 8-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := ( a[i+7:i] == b[i+7:i] ) ? 0xFF : 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Compare
-
-
-
- Compare packed 16-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := ( a[i+15:i] == b[i+15:i] ) ? 0xFFFF : 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Compare
-
-
-
- Compare packed 32-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Compare
-
-
-
- Compare packed 64-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ( a[i+63:i] == b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := ( a[i+7:i] > b[i+7:i] ) ? 0xFF : 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := ( a[i+15:i] > b[i+15:i] ) ? 0xFFFF : 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ( a[i+31:i] > b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ( a[i+63:i] > b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j:= 0 to 7
- i := 32*j
- k := 16*j
- dst[i+31:i] := SignExtend32(a[k+15:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Sign extend packed 16-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j:= 0 to 3
- i := 64*j
- k := 16*j
- dst[i+63:i] := SignExtend64(a[k+15:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j:= 0 to 3
- i := 64*j
- k := 32*j
- dst[i+63:i] := SignExtend64(a[k+31:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- l := j*16
- dst[l+15:l] := SignExtend16(a[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Sign extend packed 8-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 8*j
- dst[i+31:i] := SignExtend32(a[k+7:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 8*j
- dst[i+63:i] := SignExtend64(a[k+7:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 16*j
- dst[i+31:i] := ZeroExtend32(a[k+15:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j:= 0 to 3
- i := 64*j
- k := 16*j
- dst[i+63:i] := ZeroExtend64(a[k+15:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j:= 0 to 3
- i := 64*j
- k := 32*j
- dst[i+63:i] := ZeroExtend64(a[k+31:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- l := j*16
- dst[l+15:l] := ZeroExtend16(a[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 8*j
- dst[i+31:i] := ZeroExtend32(a[k+7:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Convert
-
-
- Zero extend packed unsigned 8-bit integers in the low 8 byte sof "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 8*j
- dst[i+63:i] := ZeroExtend64(a[k+7:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Extract 128 bits (composed of integer data) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of 16-bit integers in "a" and "b", and pack the signed 16-bit results in "dst".
-
-dst[15:0] := a[31:16] + a[15:0]
-dst[31:16] := a[63:48] + a[47:32]
-dst[47:32] := a[95:80] + a[79:64]
-dst[63:48] := a[127:112] + a[111:96]
-dst[79:64] := b[31:16] + b[15:0]
-dst[95:80] := b[63:48] + b[47:32]
-dst[111:96] := b[95:80] + b[79:64]
-dst[127:112] := b[127:112] + b[111:96]
-dst[143:128] := a[159:144] + a[143:128]
-dst[159:144] := a[191:176] + a[175:160]
-dst[175:160] := a[223:208] + a[207:192]
-dst[191:176] := a[255:240] + a[239:224]
-dst[207:192] := b[159:144] + b[143:128]
-dst[223:208] := b[191:176] + b[175:160]
-dst[239:224] := b[223:208] + b[207:192]
-dst[255:240] := b[255:240] + b[239:224]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of 32-bit integers in "a" and "b", and pack the signed 32-bit results in "dst".
-
-dst[31:0] := a[63:32] + a[31:0]
-dst[63:32] := a[127:96] + a[95:64]
-dst[95:64] := b[63:32] + b[31:0]
-dst[127:96] := b[127:96] + b[95:64]
-dst[159:128] := a[191:160] + a[159:128]
-dst[191:160] := a[255:224] + a[223:192]
-dst[223:192] := b[191:160] + b[159:128]
-dst[255:224] := b[255:224] + b[223:192]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of signed 16-bit integers in "a" and "b" using saturation, and pack the signed 16-bit results in "dst".
-
-dst[15:0] := Saturate16(a[31:16] + a[15:0])
-dst[31:16] := Saturate16(a[63:48] + a[47:32])
-dst[47:32] := Saturate16(a[95:80] + a[79:64])
-dst[63:48] := Saturate16(a[127:112] + a[111:96])
-dst[79:64] := Saturate16(b[31:16] + b[15:0])
-dst[95:80] := Saturate16(b[63:48] + b[47:32])
-dst[111:96] := Saturate16(b[95:80] + b[79:64])
-dst[127:112] := Saturate16(b[127:112] + b[111:96])
-dst[143:128] := Saturate16(a[159:144] + a[143:128])
-dst[159:144] := Saturate16(a[191:176] + a[175:160])
-dst[175:160] := Saturate16(a[223:208] + a[207:192])
-dst[191:176] := Saturate16(a[255:240] + a[239:224])
-dst[207:192] := Saturate16(b[159:144] + b[143:128])
-dst[223:208] := Saturate16(b[191:176] + b[175:160])
-dst[239:224] := Saturate16(b[223:208] + b[207:192])
-dst[255:240] := Saturate16(b[255:240] + b[239:224])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Horizontally subtract adjacent pairs of 16-bit integers in "a" and "b", and pack the signed 16-bit results in "dst".
-
-dst[15:0] := a[15:0] - a[31:16]
-dst[31:16] := a[47:32] - a[63:48]
-dst[47:32] := a[79:64] - a[95:80]
-dst[63:48] := a[111:96] - a[127:112]
-dst[79:64] := b[15:0] - b[31:16]
-dst[95:80] := b[47:32] - b[63:48]
-dst[111:96] := b[79:64] - b[95:80]
-dst[127:112] := b[111:96] - b[127:112]
-dst[143:128] := a[143:128] - a[159:144]
-dst[159:144] := a[175:160] - a[191:176]
-dst[175:160] := a[207:192] - a[223:208]
-dst[191:176] := a[239:224] - a[255:240]
-dst[207:192] := b[143:128] - b[159:144]
-dst[223:208] := b[175:160] - b[191:176]
-dst[239:224] := b[207:192] - b[223:208]
-dst[255:240] := b[239:224] - b[255:240]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Horizontally subtract adjacent pairs of 32-bit integers in "a" and "b", and pack the signed 32-bit results in "dst".
-
-dst[31:0] := a[31:0] - a[63:32]
-dst[63:32] := a[95:64] - a[127:96]
-dst[95:64] := b[31:0] - b[63:32]
-dst[127:96] := b[95:64] - b[127:96]
-dst[159:128] := a[159:128] - a[191:160]
-dst[191:160] := a[223:192] - a[255:224]
-dst[223:192] := b[159:128] - b[191:160]
-dst[255:224] := b[223:192] - b[255:224]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Horizontally subtract adjacent pairs of signed 16-bit integers in "a" and "b" using saturation, and pack the signed 16-bit results in "dst".
-
-dst[15:0] := Saturate16(a[15:0] - a[31:16])
-dst[31:16] := Saturate16(a[47:32] - a[63:48])
-dst[47:32] := Saturate16(a[79:64] - a[95:80])
-dst[63:48] := Saturate16(a[111:96] - a[127:112])
-dst[79:64] := Saturate16(b[15:0] - b[31:16])
-dst[95:80] := Saturate16(b[47:32] - b[63:48])
-dst[111:96] := Saturate16(b[79:64] - b[95:80])
-dst[127:112] := Saturate16(b[111:96] - b[127:112])
-dst[143:128] := Saturate16(a[143:128] - a[159:144])
-dst[159:144] := Saturate16(a[175:160] - a[191:176])
-dst[175:160] := Saturate16(a[207:192] - a[223:208])
-dst[191:176] := Saturate16(a[239:224] - a[255:240])
-dst[207:192] := Saturate16(b[143:128] - b[159:144])
-dst[223:208] := Saturate16(b[175:160] - b[191:176])
-dst[239:224] := Saturate16(b[207:192] - b[223:208])
-dst[255:240] := Saturate16(b[239:224] - b[255:240])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
- Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
- Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
- Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
- Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
- Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
- Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
- Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
- Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
-
- Copy "a" to "dst", then insert 128 bits (composed of integer data) from "b" into "dst" at the location specified by "imm8".
-
-dst[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers, and pack the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) + SignExtend32(a[i+15:i]*b[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Vertically multiply each unsigned 8-bit integer from "a" with the corresponding signed 8-bit integer from "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the saturated results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*32
- IF mask[i+63]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-mask[MAX:128] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*32
- IF mask[i+63]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-mask[MAX:256] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*32
- IF mask[i+31]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-mask[MAX:128] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*32
- IF mask[i+31]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-mask[MAX:256] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
-
-
- Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*32
- IF mask[i+31]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-mask[MAX:128] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
-
-
- Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*32
- IF mask[i+31]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-mask[MAX:256] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
-
-
- Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*32
- IF mask[i+63]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-mask[MAX:128] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
-
-
- Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*32
- IF mask[i+63]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-mask[MAX:256] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*64
- IF mask[i+63]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-mask[MAX:128] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*64
- IF mask[i+63]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-mask[MAX:256] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- IF mask[i+31]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-mask[MAX:64] := 0
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Load
-
-
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- IF mask[i+31]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-mask[MAX:128] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
-
-
- Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- IF mask[i+31]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-mask[MAX:64] := 0
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
-
-
- Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- IF mask[i+31]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-mask[MAX:128] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
-
-
- Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*64
- IF mask[i+63]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-mask[MAX:128] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
-
-
-
- Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from "src" when the highest bit is not set in the corresponding element). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*64
- IF mask[i+63]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-mask[MAX:256] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
- Load packed 32-bit integers from memory into "dst" using "mask" (elements are zeroed out when the highest bit is not set in the corresponding element).
-
-FOR j := 0 to 3
- i := j*32
- IF mask[i+31]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
- Load packed 32-bit integers from memory into "dst" using "mask" (elements are zeroed out when the highest bit is not set in the corresponding element).
-
-FOR j := 0 to 7
- i := j*32
- IF mask[i+31]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
- Load packed 64-bit integers from memory into "dst" using "mask" (elements are zeroed out when the highest bit is not set in the corresponding element).
-
-FOR j := 0 to 1
- i := j*64
- IF mask[i+63]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
-
- Load packed 64-bit integers from memory into "dst" using "mask" (elements are zeroed out when the highest bit is not set in the corresponding element).
-
-FOR j := 0 to 3
- i := j*64
- IF mask[i+63]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Store
-
-
-
-
- Store packed 32-bit integers from "a" into memory using "mask" (elements are not stored when the highest bit is not set in the corresponding element).
-
-FOR j := 0 to 3
- i := j*32
- IF mask[i+31]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX2
- Store
-
-
-
-
- Store packed 32-bit integers from "a" into memory using "mask" (elements are not stored when the highest bit is not set in the corresponding element).
-
-FOR j := 0 to 7
- i := j*32
- IF mask[i+31]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX2
- Store
-
-
-
-
- Store packed 64-bit integers from "a" into memory using "mask" (elements are not stored when the highest bit is not set in the corresponding element).
-
-FOR j := 0 to 1
- i := j*64
- IF mask[i+63]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX2
- Store
-
-
-
-
- Store packed 64-bit integers from "a" into memory using "mask" (elements are not stored when the highest bit is not set in the corresponding element).
-
-FOR j := 0 to 3
- i := j*64
- IF mask[i+63]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Special Math Functions
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Miscellaneous
-
-
- Create mask from the most significant bit of each 8-bit element in "a", and store the result in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[j] := a[i+7]
-ENDFOR
-
-
-
-
-
- Integer
- AVX2
- Miscellaneous
-
-
-
-
- Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit integers in "a" compared to those in "b", and store the 16-bit results in "dst".
- Eight SADs are performed for each 128-bit lane using one quadruplet from "b" and eight quadruplets from "a". One quadruplet is selected from "b" starting at on the offset specified in "imm8". Eight quadruplets are formed from sequential 8-bit integers selected from "a" starting at the offset specified in "imm8".
-
-DEFINE MPSADBW(a[127:0], b[127:0], imm8[2:0]) {
- a_offset := imm8[2]*32
- b_offset := imm8[1:0]*32
- FOR j := 0 to 7
- i := j*8
- k := a_offset+i
- l := b_offset
- tmp[i*2+15:i*2] := ABS(Signed(a[k+7:k] - b[l+7:l])) + ABS(Signed(a[k+15:k+8] - b[l+15:l+8])) + \
- ABS(Signed(a[k+23:k+16] - b[l+23:l+16])) + ABS(Signed(a[k+31:k+24] - b[l+31:l+24]))
- ENDFOR
- RETURN tmp[127:0]
-}
-dst[127:0] := MPSADBW(a[127:0], b[127:0], imm8[2:0])
-dst[255:128] := MPSADBW(a[255:128], b[255:128], imm8[5:3])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Multiply the low signed 32-bit integers from each packed 64-bit element in "a" and "b", and store the signed 64-bit results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Multiply the low unsigned 32-bit integers from each packed 64-bit element in "a" and "b", and store the unsigned 64-bit results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[i+31:i] * b[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 15
- i := j*16
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Multiply the packed unsigned 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 15
- i := j*16
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Truncate each intermediate integer to the 18 most significant bits, round by adding 1, and store bits [16:1] to "dst".
-
-FOR j := 0 to 15
- i := j*16
- tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
- dst[i+15:i] := tmp[16:1]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 15
- i := j*16
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[15:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Multiply the packed signed 32-bit integers in "a" and "b", producing intermediate 64-bit integers, and store the low 32 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 7
- i := j*32
- tmp[63:0] := a[i+31:i] * b[i+31:i]
- dst[i+31:i] := tmp[31:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Logical
-
-
-
- Compute the bitwise OR of 256 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[255:0] := (a[255:0] OR b[255:0])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Miscellaneous
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using signed saturation, and store the results in "dst".
-
-dst[7:0] := Saturate8(a[15:0])
-dst[15:8] := Saturate8(a[31:16])
-dst[23:16] := Saturate8(a[47:32])
-dst[31:24] := Saturate8(a[63:48])
-dst[39:32] := Saturate8(a[79:64])
-dst[47:40] := Saturate8(a[95:80])
-dst[55:48] := Saturate8(a[111:96])
-dst[63:56] := Saturate8(a[127:112])
-dst[71:64] := Saturate8(b[15:0])
-dst[79:72] := Saturate8(b[31:16])
-dst[87:80] := Saturate8(b[47:32])
-dst[95:88] := Saturate8(b[63:48])
-dst[103:96] := Saturate8(b[79:64])
-dst[111:104] := Saturate8(b[95:80])
-dst[119:112] := Saturate8(b[111:96])
-dst[127:120] := Saturate8(b[127:112])
-dst[135:128] := Saturate8(a[143:128])
-dst[143:136] := Saturate8(a[159:144])
-dst[151:144] := Saturate8(a[175:160])
-dst[159:152] := Saturate8(a[191:176])
-dst[167:160] := Saturate8(a[207:192])
-dst[175:168] := Saturate8(a[223:208])
-dst[183:176] := Saturate8(a[239:224])
-dst[191:184] := Saturate8(a[255:240])
-dst[199:192] := Saturate8(b[143:128])
-dst[207:200] := Saturate8(b[159:144])
-dst[215:208] := Saturate8(b[175:160])
-dst[223:216] := Saturate8(b[191:176])
-dst[231:224] := Saturate8(b[207:192])
-dst[239:232] := Saturate8(b[223:208])
-dst[247:240] := Saturate8(b[239:224])
-dst[255:248] := Saturate8(b[255:240])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Miscellaneous
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using signed saturation, and store the results in "dst".
-
-dst[15:0] := Saturate16(a[31:0])
-dst[31:16] := Saturate16(a[63:32])
-dst[47:32] := Saturate16(a[95:64])
-dst[63:48] := Saturate16(a[127:96])
-dst[79:64] := Saturate16(b[31:0])
-dst[95:80] := Saturate16(b[63:32])
-dst[111:96] := Saturate16(b[95:64])
-dst[127:112] := Saturate16(b[127:96])
-dst[143:128] := Saturate16(a[159:128])
-dst[159:144] := Saturate16(a[191:160])
-dst[175:160] := Saturate16(a[223:192])
-dst[191:176] := Saturate16(a[255:224])
-dst[207:192] := Saturate16(b[159:128])
-dst[223:208] := Saturate16(b[191:160])
-dst[239:224] := Saturate16(b[223:192])
-dst[255:240] := Saturate16(b[255:224])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Miscellaneous
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using unsigned saturation, and store the results in "dst".
-
-dst[7:0] := SaturateU8(a[15:0])
-dst[15:8] := SaturateU8(a[31:16])
-dst[23:16] := SaturateU8(a[47:32])
-dst[31:24] := SaturateU8(a[63:48])
-dst[39:32] := SaturateU8(a[79:64])
-dst[47:40] := SaturateU8(a[95:80])
-dst[55:48] := SaturateU8(a[111:96])
-dst[63:56] := SaturateU8(a[127:112])
-dst[71:64] := SaturateU8(b[15:0])
-dst[79:72] := SaturateU8(b[31:16])
-dst[87:80] := SaturateU8(b[47:32])
-dst[95:88] := SaturateU8(b[63:48])
-dst[103:96] := SaturateU8(b[79:64])
-dst[111:104] := SaturateU8(b[95:80])
-dst[119:112] := SaturateU8(b[111:96])
-dst[127:120] := SaturateU8(b[127:112])
-dst[135:128] := SaturateU8(a[143:128])
-dst[143:136] := SaturateU8(a[159:144])
-dst[151:144] := SaturateU8(a[175:160])
-dst[159:152] := SaturateU8(a[191:176])
-dst[167:160] := SaturateU8(a[207:192])
-dst[175:168] := SaturateU8(a[223:208])
-dst[183:176] := SaturateU8(a[239:224])
-dst[191:184] := SaturateU8(a[255:240])
-dst[199:192] := SaturateU8(b[143:128])
-dst[207:200] := SaturateU8(b[159:144])
-dst[215:208] := SaturateU8(b[175:160])
-dst[223:216] := SaturateU8(b[191:176])
-dst[231:224] := SaturateU8(b[207:192])
-dst[239:232] := SaturateU8(b[223:208])
-dst[247:240] := SaturateU8(b[239:224])
-dst[255:248] := SaturateU8(b[255:240])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Miscellaneous
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using unsigned saturation, and store the results in "dst".
-
-dst[15:0] := SaturateU16(a[31:0])
-dst[31:16] := SaturateU16(a[63:32])
-dst[47:32] := SaturateU16(a[95:64])
-dst[63:48] := SaturateU16(a[127:96])
-dst[79:64] := SaturateU16(b[31:0])
-dst[95:80] := SaturateU16(b[63:32])
-dst[111:96] := SaturateU16(b[95:64])
-dst[127:112] := SaturateU16(b[127:96])
-dst[143:128] := SaturateU16(a[159:128])
-dst[159:144] := SaturateU16(a[191:160])
-dst[175:160] := SaturateU16(a[223:192])
-dst[191:176] := SaturateU16(a[255:224])
-dst[207:192] := SaturateU16(b[159:128])
-dst[223:208] := SaturateU16(b[191:160])
-dst[239:224] := SaturateU16(b[223:192])
-dst[255:240] := SaturateU16(b[255:224])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
-
- Shuffle 128-bits (composed of integer data) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-DEFINE SELECT4(src1, src2, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src1[127:0]
- 1: tmp[127:0] := src1[255:128]
- 2: tmp[127:0] := src2[127:0]
- 3: tmp[127:0] := src2[255:128]
- ESAC
- IF control[3]
- tmp[127:0] := 0
- FI
- RETURN tmp[127:0]
-}
-dst[127:0] := SELECT4(a[255:0], b[255:0], imm8[3:0])
-dst[255:128] := SELECT4(a[255:0], b[255:0], imm8[7:4])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Shuffle 64-bit integers in "a" across lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Swizzle
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" across lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Shuffle 32-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- id := idx[i+2:i]*32
- dst[i+31:i] := a[id+31:id]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX2
- Swizzle
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" across lanes using the corresponding index in "idx".
-
-FOR j := 0 to 7
- i := j*32
- id := idx[i+2:i]*32
- dst[i+31:i] := a[id+31:id]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Compute the absolute differences of packed unsigned 8-bit integers in "a" and "b", then horizontally sum each consecutive 8 differences to produce four unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low 16 bits of 64-bit elements in "dst".
-
-FOR j := 0 to 31
- i := j*8
- tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i])
-ENDFOR
-FOR j := 0 to 3
- i := j*64
- dst[i+15:i] := tmp[i+7:i] + tmp[i+15:i+8] + tmp[i+23:i+16] + tmp[i+31:i+24] + \
- tmp[i+39:i+32] + tmp[i+47:i+40] + tmp[i+55:i+48] + tmp[i+63:i+56]
- dst[i+63:i+16] := 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Shuffle 32-bit integers in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Shuffle 8-bit integers in "a" within 128-bit lanes according to shuffle control mask in the corresponding 8-bit element of "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- IF b[i+7] == 1
- dst[i+7:i] := 0
- ELSE
- index[3:0] := b[i+3:i]
- dst[i+7:i] := a[index*8+7:index*8]
- FI
- IF b[128+i+7] == 1
- dst[128+i+7:128+i] := 0
- ELSE
- index[3:0] := b[128+i+3:128+i]
- dst[128+i+7:128+i] := a[128+index*8+7:128+index*8]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with the low 64 bits of 128-bit lanes being copied from from "a" to "dst".
-
-dst[63:0] := a[63:0]
-dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
-dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
-dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
-dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
-dst[191:128] := a[191:128]
-dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
-dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
-dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
-dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with the high 64 bits of 128-bit lanes being copied from from "a" to "dst".
-
-dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
-dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
-dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
-dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
-dst[127:64] := a[127:64]
-dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
-dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
-dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
-dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
-dst[255:192] := a[255:192]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Negate packed signed 8-bit integers in "a" when the corresponding signed 8-bit integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed out when the corresponding element in "b" is zero.
-
-FOR j := 0 to 31
- i := j*8
- IF b[i+7:i] < 0
- dst[i+7:i] := -(a[i+7:i])
- ELSE IF b[i+7:i] == 0
- dst[i+7:i] := 0
- ELSE
- dst[i+7:i] := a[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Negate packed signed 16-bit integers in "a" when the corresponding signed 16-bit integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed out when the corresponding element in "b" is zero.
-
-FOR j := 0 to 15
- i := j*16
- IF b[i+15:i] < 0
- dst[i+15:i] := -(a[i+15:i])
- ELSE IF b[i+15:i] == 0
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Negate packed signed 32-bit integers in "a" when the corresponding signed 32-bit integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed out when the corresponding element in "b" is zero.
-
-FOR j := 0 to 7
- i := j*32
- IF b[i+31:i] < 0
- dst[i+31:i] := -(a[i+31:i])
- ELSE IF b[i+31:i] == 0
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift 128-bit lanes in "a" left by "imm8" bytes while shifting in zeros, and store the results in "dst".
-
-tmp := imm8[7:0]
-IF tmp > 15
- tmp := 16
-FI
-dst[127:0] := a[127:0] << (tmp*8)
-dst[255:128] := a[255:128] << (tmp*8)
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift 128-bit lanes in "a" left by "imm8" bytes while shifting in zeros, and store the results in "dst".
-
-tmp := imm8[7:0]
-IF tmp > 15
- tmp := 16
-FI
-dst[127:0] := a[127:0] << (tmp*8)
-dst[255:128] := a[255:128] << (tmp*8)
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF count[i+31:i] < 32
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF count[i+31:i] < 32
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift 128-bit lanes in "a" right by "imm8" bytes while shifting in zeros, and store the results in "dst".
-
-tmp := imm8[7:0]
-IF tmp > 15
- tmp := 16
-FI
-dst[127:0] := a[127:0] >> (tmp*8)
-dst[255:128] := a[255:128] >> (tmp*8)
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift 128-bit lanes in "a" right by "imm8" bytes while shifting in zeros, and store the results in "dst".
-
-tmp := imm8[7:0]
-IF tmp > 15
- tmp := 16
-FI
-dst[127:0] := a[127:0] >> (tmp*8)
-dst[255:128] := a[255:128] >> (tmp*8)
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Load
-
-
- Load 256-bits of integer data from memory into "dst" using a non-temporal memory hint.
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := a[i+7:i] - b[i+7:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := a[i+15:i] - b[i+15:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Arithmetic
-
-
-
- Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Logical
-
-
-
- Compute the bitwise XOR of 256 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[255:0] := (a[255:0] XOR b[255:0])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Unpack and interleave 8-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[71:64]
- dst[15:8] := src2[71:64]
- dst[23:16] := src1[79:72]
- dst[31:24] := src2[79:72]
- dst[39:32] := src1[87:80]
- dst[47:40] := src2[87:80]
- dst[55:48] := src1[95:88]
- dst[63:56] := src2[95:88]
- dst[71:64] := src1[103:96]
- dst[79:72] := src2[103:96]
- dst[87:80] := src1[111:104]
- dst[95:88] := src2[111:104]
- dst[103:96] := src1[119:112]
- dst[111:104] := src2[119:112]
- dst[119:112] := src1[127:120]
- dst[127:120] := src2[127:120]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Unpack and interleave 16-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[79:64]
- dst[31:16] := src2[79:64]
- dst[47:32] := src1[95:80]
- dst[63:48] := src2[95:80]
- dst[79:64] := src1[111:96]
- dst[95:80] := src2[111:96]
- dst[111:96] := src1[127:112]
- dst[127:112] := src2[127:112]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Unpack and interleave 32-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Unpack and interleave 64-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Unpack and interleave 8-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[7:0]
- dst[15:8] := src2[7:0]
- dst[23:16] := src1[15:8]
- dst[31:24] := src2[15:8]
- dst[39:32] := src1[23:16]
- dst[47:40] := src2[23:16]
- dst[55:48] := src1[31:24]
- dst[63:56] := src2[31:24]
- dst[71:64] := src1[39:32]
- dst[79:72] := src2[39:32]
- dst[87:80] := src1[47:40]
- dst[95:88] := src2[47:40]
- dst[103:96] := src1[55:48]
- dst[111:104] := src2[55:48]
- dst[119:112] := src1[63:56]
- dst[127:120] := src2[63:56]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Unpack and interleave 16-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[15:0]
- dst[31:16] := src2[15:0]
- dst[47:32] := src1[31:16]
- dst[63:48] := src2[31:16]
- dst[79:64] := src1[47:32]
- dst[95:80] := src2[47:32]
- dst[111:96] := src1[63:48]
- dst[127:112] := src2[63:48]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Unpack and interleave 32-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX2
- Swizzle
-
-
-
- Unpack and interleave 64-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-dst[MAX:256] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Miscellaneous
-
-
-
- Unpack and interleave 32 bits from masks "a" and "b", and store the 64-bit result in "dst".
-
-dst[31:0] := b[31:0]
-dst[63:32] := a[31:0]
-dst[MAX:64] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Miscellaneous
-
-
-
- Unpack and interleave 16 bits from masks "a" and "b", and store the 32-bit result in "dst".
-
-dst[15:0] := b[15:0]
-dst[31:16] := a[15:0]
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit integers in "a" compared to those in "b", and store the 16-bit results in "dst".
- Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit lane uses the selected quadruplet at 8-bit offsets.
-
-FOR i := 0 to 1
- tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
- tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
- tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
- tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
-ENDFOR
-FOR j := 0 to 3
- i := j*64
- dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
- ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
-
- dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
- ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
-
- dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] - tmp[i+31:i+24]) +\
- ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
-
- dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] - tmp[i+39:i+32]) +\
- ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
-
- Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit integers in "a" compared to those in "b", and store the 16-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit lane uses the selected quadruplet at 8-bit offsets.
-
-FOR i := 0 to 1
- tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
- tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
- tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
- tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
-ENDFOR
-FOR j := 0 to 3
- i := j*64
- tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
- ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
-
- tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
- ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
-
- tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] - tmp[i+31:i+24]) +\
- ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
-
- tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] - tmp[i+39:i+32]) +\
- ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
-ENDFOR
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit integers in "a" compared to those in "b", and store the 16-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit lane uses the selected quadruplet at 8-bit offsets.
-
-FOR i := 0 to 1
- tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
- tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
- tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
- tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
-ENDFOR
-FOR j := 0 to 3
- i := j*64
- tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
- ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
-
- tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
- ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
-
- tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] - tmp[i+31:i+24]) +\
- ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
-
- tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] - tmp[i+39:i+32]) +\
- ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
-ENDFOR
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit integers in "a" compared to those in "b", and store the 16-bit results in "dst".
- Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit lane uses the selected quadruplet at 8-bit offsets.
-
-FOR i := 0 to 3
- tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
- tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
- tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
- tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
-ENDFOR
-FOR j := 0 to 7
- i := j*64
- dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
- ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
-
- dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
- ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
-
- dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] - tmp[i+31:i+24]) +\
- ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
-
- dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] - tmp[i+39:i+32]) +\
- ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
-
- Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit integers in "a" compared to those in "b", and store the 16-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit lane uses the selected quadruplet at 8-bit offsets.
-
-FOR i := 0 to 3
- tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
- tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
- tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
- tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
-ENDFOR
-FOR j := 0 to 7
- i := j*64
- tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
- ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
-
- tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
- ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
-
- tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] - tmp[i+31:i+24]) +\
- ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
-
- tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] - tmp[i+39:i+32]) +\
- ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
-ENDFOR
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit integers in "a" compared to those in "b", and store the 16-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit lane uses the selected quadruplet at 8-bit offsets.
-
-FOR i := 0 to 3
- tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
- tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
- tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
- tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
-ENDFOR
-FOR j := 0 to 7
- i := j*64
- tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
- ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
-
- tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
- ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
-
- tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] - tmp[i+31:i+24]) +\
- ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
-
- tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] - tmp[i+39:i+32]) +\
- ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
-ENDFOR
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit integers in "a" compared to those in "b", and store the 16-bit results in "dst".
- Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected according to the control in "imm8", and each SAD in each 64-bit lane uses the selected quadruplet at 8-bit offsets.
-
-tmp.dword[0] := b.dword[ imm8[1:0] ]
-tmp.dword[1] := b.dword[ imm8[3:2] ]
-tmp.dword[2] := b.dword[ imm8[5:4] ]
-tmp.dword[3] := b.dword[ imm8[7:6] ]
-FOR j := 0 to 1
- i := j*64
- dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
- ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
-
- dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
- ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
-
- dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] - tmp[i+31:i+24]) +\
- ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
-
- dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] - tmp[i+39:i+32]) +\
- ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
-
- Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit integers in "a" compared to those in "b", and store the 16-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected according to the control in "imm8", and each SAD in each 64-bit lane uses the selected quadruplet at 8-bit offsets.
-
-tmp.dword[0] := b.dword[ imm8[1:0] ]
-tmp.dword[1] := b.dword[ imm8[3:2] ]
-tmp.dword[2] := b.dword[ imm8[5:4] ]
-tmp.dword[3] := b.dword[ imm8[7:6] ]
-FOR j := 0 to 1
- i := j*64
- tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
- ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
-
- tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
- ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
-
- tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] - tmp[i+31:i+24]) +\
- ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
-
- tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] - tmp[i+39:i+32]) +\
- ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
-ENDFOR
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit integers in "a" compared to those in "b", and store the 16-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected according to the control in "imm8", and each SAD in each 64-bit lane uses the selected quadruplet at 8-bit offsets.
-
-tmp.dword[0] := b.dword[ imm8[1:0] ]
-tmp.dword[1] := b.dword[ imm8[3:2] ]
-tmp.dword[2] := b.dword[ imm8[5:4] ]
-tmp.dword[3] := b.dword[ imm8[7:6] ]
-FOR j := 0 to 1
- i := j*64
- tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
- ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
-
- tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
- ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
-
- tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] - tmp[i+31:i+24]) +\
- ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
-
- tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] - tmp[i+39:i+32]) +\
- ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
-ENDFOR
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
-
-
- Load packed 16-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Move
-
-
-
-
- Move packed 16-bit integers from "a" into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Store
-
-
-
-
- Store packed 16-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- MEM[mem_addr+i+15:mem_addr+i] := a[i+15:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
-
- Load packed 16-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Move
-
-
-
- Move packed 16-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Load
-
-
-
-
- Load packed 16-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Move
-
-
-
-
- Move packed 16-bit integers from "a" into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Store
-
-
-
-
- Store packed 16-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- MEM[mem_addr+i+15:mem_addr+i] := a[i+15:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512BW
- Load
-
-
-
- Load packed 16-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Move
-
-
-
- Move packed 16-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
-
-
- Load packed 16-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Move
-
-
-
-
- Move packed 16-bit integers from "a" into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Store
-
-
-
-
- Store packed 16-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- MEM[mem_addr+i+15:mem_addr+i] := a[i+15:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
-
- Load packed 16-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Move
-
-
-
- Move packed 16-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
-
-
- Load packed 8-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Move
-
-
-
-
- Move packed 8-bit integers from "a" into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Store
-
-
-
-
- Store packed 8-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
-
- Load packed 8-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Move
-
-
-
- Move packed 8-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Load
-
-
-
-
- Load packed 8-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Move
-
-
-
-
- Move packed 8-bit integers from "a" into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Store
-
-
-
-
- Store packed 8-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512BW
- Load
-
-
-
- Load packed 8-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Move
-
-
-
- Move packed 8-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
-
-
- Load packed 8-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Move
-
-
-
-
- Move packed 8-bit integers from "a" into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Store
-
-
-
-
- Store packed 8-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
-
- Load packed 8-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Move
-
-
-
- Move packed 8-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compute the absolute value of packed signed 8-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := ABS(a[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
- Compute the absolute value of packed signed 8-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := ABS(a[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
- Compute the absolute value of packed signed 8-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := ABS(a[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Compute the absolute value of packed signed 8-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := ABS(a[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Compute the absolute value of packed signed 8-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := ABS(a[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compute the absolute value of packed signed 8-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := ABS(a[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
- Compute the absolute value of packed signed 8-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := ABS(a[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compute the absolute value of packed signed 16-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := ABS(a[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
- Compute the absolute value of packed signed 16-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := ABS(a[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
- Compute the absolute value of packed signed 16-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := ABS(a[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Compute the absolute value of packed signed 16-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := ABS(a[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Compute the absolute value of packed signed 16-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := ABS(a[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compute the absolute value of packed signed 16-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := ABS(a[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
- Compute the absolute value of packed signed 16-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := ABS(a[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := Saturate16(a[31:0])
-tmp_dst[31:16] := Saturate16(a[63:32])
-tmp_dst[47:32] := Saturate16(a[95:64])
-tmp_dst[63:48] := Saturate16(a[127:96])
-tmp_dst[79:64] := Saturate16(b[31:0])
-tmp_dst[95:80] := Saturate16(b[63:32])
-tmp_dst[111:96] := Saturate16(b[95:64])
-tmp_dst[127:112] := Saturate16(b[127:96])
-tmp_dst[143:128] := Saturate16(a[159:128])
-tmp_dst[159:144] := Saturate16(a[191:160])
-tmp_dst[175:160] := Saturate16(a[223:192])
-tmp_dst[191:176] := Saturate16(a[255:224])
-tmp_dst[207:192] := Saturate16(b[159:128])
-tmp_dst[223:208] := Saturate16(b[191:160])
-tmp_dst[239:224] := Saturate16(b[223:192])
-tmp_dst[255:240] := Saturate16(b[255:224])
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := Saturate16(a[31:0])
-tmp_dst[31:16] := Saturate16(a[63:32])
-tmp_dst[47:32] := Saturate16(a[95:64])
-tmp_dst[63:48] := Saturate16(a[127:96])
-tmp_dst[79:64] := Saturate16(b[31:0])
-tmp_dst[95:80] := Saturate16(b[63:32])
-tmp_dst[111:96] := Saturate16(b[95:64])
-tmp_dst[127:112] := Saturate16(b[127:96])
-tmp_dst[143:128] := Saturate16(a[159:128])
-tmp_dst[159:144] := Saturate16(a[191:160])
-tmp_dst[175:160] := Saturate16(a[223:192])
-tmp_dst[191:176] := Saturate16(a[255:224])
-tmp_dst[207:192] := Saturate16(b[159:128])
-tmp_dst[223:208] := Saturate16(b[191:160])
-tmp_dst[239:224] := Saturate16(b[223:192])
-tmp_dst[255:240] := Saturate16(b[255:224])
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := Saturate16(a[31:0])
-tmp_dst[31:16] := Saturate16(a[63:32])
-tmp_dst[47:32] := Saturate16(a[95:64])
-tmp_dst[63:48] := Saturate16(a[127:96])
-tmp_dst[79:64] := Saturate16(b[31:0])
-tmp_dst[95:80] := Saturate16(b[63:32])
-tmp_dst[111:96] := Saturate16(b[95:64])
-tmp_dst[127:112] := Saturate16(b[127:96])
-tmp_dst[143:128] := Saturate16(a[159:128])
-tmp_dst[159:144] := Saturate16(a[191:160])
-tmp_dst[175:160] := Saturate16(a[223:192])
-tmp_dst[191:176] := Saturate16(a[255:224])
-tmp_dst[207:192] := Saturate16(b[159:128])
-tmp_dst[223:208] := Saturate16(b[191:160])
-tmp_dst[239:224] := Saturate16(b[223:192])
-tmp_dst[255:240] := Saturate16(b[255:224])
-tmp_dst[271:256] := Saturate16(a[287:256])
-tmp_dst[287:272] := Saturate16(a[319:288])
-tmp_dst[303:288] := Saturate16(a[351:320])
-tmp_dst[319:304] := Saturate16(a[383:352])
-tmp_dst[335:320] := Saturate16(b[287:256])
-tmp_dst[351:336] := Saturate16(b[319:288])
-tmp_dst[367:352] := Saturate16(b[351:320])
-tmp_dst[383:368] := Saturate16(b[383:352])
-tmp_dst[399:384] := Saturate16(a[415:384])
-tmp_dst[415:400] := Saturate16(a[447:416])
-tmp_dst[431:416] := Saturate16(a[479:448])
-tmp_dst[447:432] := Saturate16(a[511:480])
-tmp_dst[463:448] := Saturate16(b[415:384])
-tmp_dst[479:464] := Saturate16(b[447:416])
-tmp_dst[495:480] := Saturate16(b[479:448])
-tmp_dst[511:496] := Saturate16(b[511:480])
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := Saturate16(a[31:0])
-tmp_dst[31:16] := Saturate16(a[63:32])
-tmp_dst[47:32] := Saturate16(a[95:64])
-tmp_dst[63:48] := Saturate16(a[127:96])
-tmp_dst[79:64] := Saturate16(b[31:0])
-tmp_dst[95:80] := Saturate16(b[63:32])
-tmp_dst[111:96] := Saturate16(b[95:64])
-tmp_dst[127:112] := Saturate16(b[127:96])
-tmp_dst[143:128] := Saturate16(a[159:128])
-tmp_dst[159:144] := Saturate16(a[191:160])
-tmp_dst[175:160] := Saturate16(a[223:192])
-tmp_dst[191:176] := Saturate16(a[255:224])
-tmp_dst[207:192] := Saturate16(b[159:128])
-tmp_dst[223:208] := Saturate16(b[191:160])
-tmp_dst[239:224] := Saturate16(b[223:192])
-tmp_dst[255:240] := Saturate16(b[255:224])
-tmp_dst[271:256] := Saturate16(a[287:256])
-tmp_dst[287:272] := Saturate16(a[319:288])
-tmp_dst[303:288] := Saturate16(a[351:320])
-tmp_dst[319:304] := Saturate16(a[383:352])
-tmp_dst[335:320] := Saturate16(b[287:256])
-tmp_dst[351:336] := Saturate16(b[319:288])
-tmp_dst[367:352] := Saturate16(b[351:320])
-tmp_dst[383:368] := Saturate16(b[383:352])
-tmp_dst[399:384] := Saturate16(a[415:384])
-tmp_dst[415:400] := Saturate16(a[447:416])
-tmp_dst[431:416] := Saturate16(a[479:448])
-tmp_dst[447:432] := Saturate16(a[511:480])
-tmp_dst[463:448] := Saturate16(b[415:384])
-tmp_dst[479:464] := Saturate16(b[447:416])
-tmp_dst[495:480] := Saturate16(b[479:448])
-tmp_dst[511:496] := Saturate16(b[511:480])
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using signed saturation, and store the results in "dst".
-
-dst[15:0] := Saturate16(a[31:0])
-dst[31:16] := Saturate16(a[63:32])
-dst[47:32] := Saturate16(a[95:64])
-dst[63:48] := Saturate16(a[127:96])
-dst[79:64] := Saturate16(b[31:0])
-dst[95:80] := Saturate16(b[63:32])
-dst[111:96] := Saturate16(b[95:64])
-dst[127:112] := Saturate16(b[127:96])
-dst[143:128] := Saturate16(a[159:128])
-dst[159:144] := Saturate16(a[191:160])
-dst[175:160] := Saturate16(a[223:192])
-dst[191:176] := Saturate16(a[255:224])
-dst[207:192] := Saturate16(b[159:128])
-dst[223:208] := Saturate16(b[191:160])
-dst[239:224] := Saturate16(b[223:192])
-dst[255:240] := Saturate16(b[255:224])
-dst[271:256] := Saturate16(a[287:256])
-dst[287:272] := Saturate16(a[319:288])
-dst[303:288] := Saturate16(a[351:320])
-dst[319:304] := Saturate16(a[383:352])
-dst[335:320] := Saturate16(b[287:256])
-dst[351:336] := Saturate16(b[319:288])
-dst[367:352] := Saturate16(b[351:320])
-dst[383:368] := Saturate16(b[383:352])
-dst[399:384] := Saturate16(a[415:384])
-dst[415:400] := Saturate16(a[447:416])
-dst[431:416] := Saturate16(a[479:448])
-dst[447:432] := Saturate16(a[511:480])
-dst[463:448] := Saturate16(b[415:384])
-dst[479:464] := Saturate16(b[447:416])
-dst[495:480] := Saturate16(b[479:448])
-dst[511:496] := Saturate16(b[511:480])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := Saturate16(a[31:0])
-tmp_dst[31:16] := Saturate16(a[63:32])
-tmp_dst[47:32] := Saturate16(a[95:64])
-tmp_dst[63:48] := Saturate16(a[127:96])
-tmp_dst[79:64] := Saturate16(b[31:0])
-tmp_dst[95:80] := Saturate16(b[63:32])
-tmp_dst[111:96] := Saturate16(b[95:64])
-tmp_dst[127:112] := Saturate16(b[127:96])
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := Saturate16(a[31:0])
-tmp_dst[31:16] := Saturate16(a[63:32])
-tmp_dst[47:32] := Saturate16(a[95:64])
-tmp_dst[63:48] := Saturate16(a[127:96])
-tmp_dst[79:64] := Saturate16(b[31:0])
-tmp_dst[95:80] := Saturate16(b[63:32])
-tmp_dst[111:96] := Saturate16(b[95:64])
-tmp_dst[127:112] := Saturate16(b[127:96])
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := Saturate8(a[15:0])
-tmp_dst[15:8] := Saturate8(a[31:16])
-tmp_dst[23:16] := Saturate8(a[47:32])
-tmp_dst[31:24] := Saturate8(a[63:48])
-tmp_dst[39:32] := Saturate8(a[79:64])
-tmp_dst[47:40] := Saturate8(a[95:80])
-tmp_dst[55:48] := Saturate8(a[111:96])
-tmp_dst[63:56] := Saturate8(a[127:112])
-tmp_dst[71:64] := Saturate8(b[15:0])
-tmp_dst[79:72] := Saturate8(b[31:16])
-tmp_dst[87:80] := Saturate8(b[47:32])
-tmp_dst[95:88] := Saturate8(b[63:48])
-tmp_dst[103:96] := Saturate8(b[79:64])
-tmp_dst[111:104] := Saturate8(b[95:80])
-tmp_dst[119:112] := Saturate8(b[111:96])
-tmp_dst[127:120] := Saturate8(b[127:112])
-tmp_dst[135:128] := Saturate8(a[143:128])
-tmp_dst[143:136] := Saturate8(a[159:144])
-tmp_dst[151:144] := Saturate8(a[175:160])
-tmp_dst[159:152] := Saturate8(a[191:176])
-tmp_dst[167:160] := Saturate8(a[207:192])
-tmp_dst[175:168] := Saturate8(a[223:208])
-tmp_dst[183:176] := Saturate8(a[239:224])
-tmp_dst[191:184] := Saturate8(a[255:240])
-tmp_dst[199:192] := Saturate8(b[143:128])
-tmp_dst[207:200] := Saturate8(b[159:144])
-tmp_dst[215:208] := Saturate8(b[175:160])
-tmp_dst[223:216] := Saturate8(b[191:176])
-tmp_dst[231:224] := Saturate8(b[207:192])
-tmp_dst[239:232] := Saturate8(b[223:208])
-tmp_dst[247:240] := Saturate8(b[239:224])
-tmp_dst[255:248] := Saturate8(b[255:240])
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := Saturate8(a[15:0])
-tmp_dst[15:8] := Saturate8(a[31:16])
-tmp_dst[23:16] := Saturate8(a[47:32])
-tmp_dst[31:24] := Saturate8(a[63:48])
-tmp_dst[39:32] := Saturate8(a[79:64])
-tmp_dst[47:40] := Saturate8(a[95:80])
-tmp_dst[55:48] := Saturate8(a[111:96])
-tmp_dst[63:56] := Saturate8(a[127:112])
-tmp_dst[71:64] := Saturate8(b[15:0])
-tmp_dst[79:72] := Saturate8(b[31:16])
-tmp_dst[87:80] := Saturate8(b[47:32])
-tmp_dst[95:88] := Saturate8(b[63:48])
-tmp_dst[103:96] := Saturate8(b[79:64])
-tmp_dst[111:104] := Saturate8(b[95:80])
-tmp_dst[119:112] := Saturate8(b[111:96])
-tmp_dst[127:120] := Saturate8(b[127:112])
-tmp_dst[135:128] := Saturate8(a[143:128])
-tmp_dst[143:136] := Saturate8(a[159:144])
-tmp_dst[151:144] := Saturate8(a[175:160])
-tmp_dst[159:152] := Saturate8(a[191:176])
-tmp_dst[167:160] := Saturate8(a[207:192])
-tmp_dst[175:168] := Saturate8(a[223:208])
-tmp_dst[183:176] := Saturate8(a[239:224])
-tmp_dst[191:184] := Saturate8(a[255:240])
-tmp_dst[199:192] := Saturate8(b[143:128])
-tmp_dst[207:200] := Saturate8(b[159:144])
-tmp_dst[215:208] := Saturate8(b[175:160])
-tmp_dst[223:216] := Saturate8(b[191:176])
-tmp_dst[231:224] := Saturate8(b[207:192])
-tmp_dst[239:232] := Saturate8(b[223:208])
-tmp_dst[247:240] := Saturate8(b[239:224])
-tmp_dst[255:248] := Saturate8(b[255:240])
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := Saturate8(a[15:0])
-tmp_dst[15:8] := Saturate8(a[31:16])
-tmp_dst[23:16] := Saturate8(a[47:32])
-tmp_dst[31:24] := Saturate8(a[63:48])
-tmp_dst[39:32] := Saturate8(a[79:64])
-tmp_dst[47:40] := Saturate8(a[95:80])
-tmp_dst[55:48] := Saturate8(a[111:96])
-tmp_dst[63:56] := Saturate8(a[127:112])
-tmp_dst[71:64] := Saturate8(b[15:0])
-tmp_dst[79:72] := Saturate8(b[31:16])
-tmp_dst[87:80] := Saturate8(b[47:32])
-tmp_dst[95:88] := Saturate8(b[63:48])
-tmp_dst[103:96] := Saturate8(b[79:64])
-tmp_dst[111:104] := Saturate8(b[95:80])
-tmp_dst[119:112] := Saturate8(b[111:96])
-tmp_dst[127:120] := Saturate8(b[127:112])
-tmp_dst[135:128] := Saturate8(a[143:128])
-tmp_dst[143:136] := Saturate8(a[159:144])
-tmp_dst[151:144] := Saturate8(a[175:160])
-tmp_dst[159:152] := Saturate8(a[191:176])
-tmp_dst[167:160] := Saturate8(a[207:192])
-tmp_dst[175:168] := Saturate8(a[223:208])
-tmp_dst[183:176] := Saturate8(a[239:224])
-tmp_dst[191:184] := Saturate8(a[255:240])
-tmp_dst[199:192] := Saturate8(b[143:128])
-tmp_dst[207:200] := Saturate8(b[159:144])
-tmp_dst[215:208] := Saturate8(b[175:160])
-tmp_dst[223:216] := Saturate8(b[191:176])
-tmp_dst[231:224] := Saturate8(b[207:192])
-tmp_dst[239:232] := Saturate8(b[223:208])
-tmp_dst[247:240] := Saturate8(b[239:224])
-tmp_dst[255:248] := Saturate8(b[255:240])
-tmp_dst[263:256] := Saturate8(a[271:256])
-tmp_dst[271:264] := Saturate8(a[287:272])
-tmp_dst[279:272] := Saturate8(a[303:288])
-tmp_dst[287:280] := Saturate8(a[319:304])
-tmp_dst[295:288] := Saturate8(a[335:320])
-tmp_dst[303:296] := Saturate8(a[351:336])
-tmp_dst[311:304] := Saturate8(a[367:352])
-tmp_dst[319:312] := Saturate8(a[383:368])
-tmp_dst[327:320] := Saturate8(b[271:256])
-tmp_dst[335:328] := Saturate8(b[287:272])
-tmp_dst[343:336] := Saturate8(b[303:288])
-tmp_dst[351:344] := Saturate8(b[319:304])
-tmp_dst[359:352] := Saturate8(b[335:320])
-tmp_dst[367:360] := Saturate8(b[351:336])
-tmp_dst[375:368] := Saturate8(b[367:352])
-tmp_dst[383:376] := Saturate8(b[383:368])
-tmp_dst[391:384] := Saturate8(a[399:384])
-tmp_dst[399:392] := Saturate8(a[415:400])
-tmp_dst[407:400] := Saturate8(a[431:416])
-tmp_dst[415:408] := Saturate8(a[447:432])
-tmp_dst[423:416] := Saturate8(a[463:448])
-tmp_dst[431:424] := Saturate8(a[479:464])
-tmp_dst[439:432] := Saturate8(a[495:480])
-tmp_dst[447:440] := Saturate8(a[511:496])
-tmp_dst[455:448] := Saturate8(b[399:384])
-tmp_dst[463:456] := Saturate8(b[415:400])
-tmp_dst[471:464] := Saturate8(b[431:416])
-tmp_dst[479:472] := Saturate8(b[447:432])
-tmp_dst[487:480] := Saturate8(b[463:448])
-tmp_dst[495:488] := Saturate8(b[479:464])
-tmp_dst[503:496] := Saturate8(b[495:480])
-tmp_dst[511:504] := Saturate8(b[511:496])
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := Saturate8(a[15:0])
-tmp_dst[15:8] := Saturate8(a[31:16])
-tmp_dst[23:16] := Saturate8(a[47:32])
-tmp_dst[31:24] := Saturate8(a[63:48])
-tmp_dst[39:32] := Saturate8(a[79:64])
-tmp_dst[47:40] := Saturate8(a[95:80])
-tmp_dst[55:48] := Saturate8(a[111:96])
-tmp_dst[63:56] := Saturate8(a[127:112])
-tmp_dst[71:64] := Saturate8(b[15:0])
-tmp_dst[79:72] := Saturate8(b[31:16])
-tmp_dst[87:80] := Saturate8(b[47:32])
-tmp_dst[95:88] := Saturate8(b[63:48])
-tmp_dst[103:96] := Saturate8(b[79:64])
-tmp_dst[111:104] := Saturate8(b[95:80])
-tmp_dst[119:112] := Saturate8(b[111:96])
-tmp_dst[127:120] := Saturate8(b[127:112])
-tmp_dst[135:128] := Saturate8(a[143:128])
-tmp_dst[143:136] := Saturate8(a[159:144])
-tmp_dst[151:144] := Saturate8(a[175:160])
-tmp_dst[159:152] := Saturate8(a[191:176])
-tmp_dst[167:160] := Saturate8(a[207:192])
-tmp_dst[175:168] := Saturate8(a[223:208])
-tmp_dst[183:176] := Saturate8(a[239:224])
-tmp_dst[191:184] := Saturate8(a[255:240])
-tmp_dst[199:192] := Saturate8(b[143:128])
-tmp_dst[207:200] := Saturate8(b[159:144])
-tmp_dst[215:208] := Saturate8(b[175:160])
-tmp_dst[223:216] := Saturate8(b[191:176])
-tmp_dst[231:224] := Saturate8(b[207:192])
-tmp_dst[239:232] := Saturate8(b[223:208])
-tmp_dst[247:240] := Saturate8(b[239:224])
-tmp_dst[255:248] := Saturate8(b[255:240])
-tmp_dst[263:256] := Saturate8(a[271:256])
-tmp_dst[271:264] := Saturate8(a[287:272])
-tmp_dst[279:272] := Saturate8(a[303:288])
-tmp_dst[287:280] := Saturate8(a[319:304])
-tmp_dst[295:288] := Saturate8(a[335:320])
-tmp_dst[303:296] := Saturate8(a[351:336])
-tmp_dst[311:304] := Saturate8(a[367:352])
-tmp_dst[319:312] := Saturate8(a[383:368])
-tmp_dst[327:320] := Saturate8(b[271:256])
-tmp_dst[335:328] := Saturate8(b[287:272])
-tmp_dst[343:336] := Saturate8(b[303:288])
-tmp_dst[351:344] := Saturate8(b[319:304])
-tmp_dst[359:352] := Saturate8(b[335:320])
-tmp_dst[367:360] := Saturate8(b[351:336])
-tmp_dst[375:368] := Saturate8(b[367:352])
-tmp_dst[383:376] := Saturate8(b[383:368])
-tmp_dst[391:384] := Saturate8(a[399:384])
-tmp_dst[399:392] := Saturate8(a[415:400])
-tmp_dst[407:400] := Saturate8(a[431:416])
-tmp_dst[415:408] := Saturate8(a[447:432])
-tmp_dst[423:416] := Saturate8(a[463:448])
-tmp_dst[431:424] := Saturate8(a[479:464])
-tmp_dst[439:432] := Saturate8(a[495:480])
-tmp_dst[447:440] := Saturate8(a[511:496])
-tmp_dst[455:448] := Saturate8(b[399:384])
-tmp_dst[463:456] := Saturate8(b[415:400])
-tmp_dst[471:464] := Saturate8(b[431:416])
-tmp_dst[479:472] := Saturate8(b[447:432])
-tmp_dst[487:480] := Saturate8(b[463:448])
-tmp_dst[495:488] := Saturate8(b[479:464])
-tmp_dst[503:496] := Saturate8(b[495:480])
-tmp_dst[511:504] := Saturate8(b[511:496])
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using signed saturation, and store the results in "dst".
-
-dst[7:0] := Saturate8(a[15:0])
-dst[15:8] := Saturate8(a[31:16])
-dst[23:16] := Saturate8(a[47:32])
-dst[31:24] := Saturate8(a[63:48])
-dst[39:32] := Saturate8(a[79:64])
-dst[47:40] := Saturate8(a[95:80])
-dst[55:48] := Saturate8(a[111:96])
-dst[63:56] := Saturate8(a[127:112])
-dst[71:64] := Saturate8(b[15:0])
-dst[79:72] := Saturate8(b[31:16])
-dst[87:80] := Saturate8(b[47:32])
-dst[95:88] := Saturate8(b[63:48])
-dst[103:96] := Saturate8(b[79:64])
-dst[111:104] := Saturate8(b[95:80])
-dst[119:112] := Saturate8(b[111:96])
-dst[127:120] := Saturate8(b[127:112])
-dst[135:128] := Saturate8(a[143:128])
-dst[143:136] := Saturate8(a[159:144])
-dst[151:144] := Saturate8(a[175:160])
-dst[159:152] := Saturate8(a[191:176])
-dst[167:160] := Saturate8(a[207:192])
-dst[175:168] := Saturate8(a[223:208])
-dst[183:176] := Saturate8(a[239:224])
-dst[191:184] := Saturate8(a[255:240])
-dst[199:192] := Saturate8(b[143:128])
-dst[207:200] := Saturate8(b[159:144])
-dst[215:208] := Saturate8(b[175:160])
-dst[223:216] := Saturate8(b[191:176])
-dst[231:224] := Saturate8(b[207:192])
-dst[239:232] := Saturate8(b[223:208])
-dst[247:240] := Saturate8(b[239:224])
-dst[255:248] := Saturate8(b[255:240])
-dst[263:256] := Saturate8(a[271:256])
-dst[271:264] := Saturate8(a[287:272])
-dst[279:272] := Saturate8(a[303:288])
-dst[287:280] := Saturate8(a[319:304])
-dst[295:288] := Saturate8(a[335:320])
-dst[303:296] := Saturate8(a[351:336])
-dst[311:304] := Saturate8(a[367:352])
-dst[319:312] := Saturate8(a[383:368])
-dst[327:320] := Saturate8(b[271:256])
-dst[335:328] := Saturate8(b[287:272])
-dst[343:336] := Saturate8(b[303:288])
-dst[351:344] := Saturate8(b[319:304])
-dst[359:352] := Saturate8(b[335:320])
-dst[367:360] := Saturate8(b[351:336])
-dst[375:368] := Saturate8(b[367:352])
-dst[383:376] := Saturate8(b[383:368])
-dst[391:384] := Saturate8(a[399:384])
-dst[399:392] := Saturate8(a[415:400])
-dst[407:400] := Saturate8(a[431:416])
-dst[415:408] := Saturate8(a[447:432])
-dst[423:416] := Saturate8(a[463:448])
-dst[431:424] := Saturate8(a[479:464])
-dst[439:432] := Saturate8(a[495:480])
-dst[447:440] := Saturate8(a[511:496])
-dst[455:448] := Saturate8(b[399:384])
-dst[463:456] := Saturate8(b[415:400])
-dst[471:464] := Saturate8(b[431:416])
-dst[479:472] := Saturate8(b[447:432])
-dst[487:480] := Saturate8(b[463:448])
-dst[495:488] := Saturate8(b[479:464])
-dst[503:496] := Saturate8(b[495:480])
-dst[511:504] := Saturate8(b[511:496])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := Saturate8(a[15:0])
-tmp_dst[15:8] := Saturate8(a[31:16])
-tmp_dst[23:16] := Saturate8(a[47:32])
-tmp_dst[31:24] := Saturate8(a[63:48])
-tmp_dst[39:32] := Saturate8(a[79:64])
-tmp_dst[47:40] := Saturate8(a[95:80])
-tmp_dst[55:48] := Saturate8(a[111:96])
-tmp_dst[63:56] := Saturate8(a[127:112])
-tmp_dst[71:64] := Saturate8(b[15:0])
-tmp_dst[79:72] := Saturate8(b[31:16])
-tmp_dst[87:80] := Saturate8(b[47:32])
-tmp_dst[95:88] := Saturate8(b[63:48])
-tmp_dst[103:96] := Saturate8(b[79:64])
-tmp_dst[111:104] := Saturate8(b[95:80])
-tmp_dst[119:112] := Saturate8(b[111:96])
-tmp_dst[127:120] := Saturate8(b[127:112])
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := Saturate8(a[15:0])
-tmp_dst[15:8] := Saturate8(a[31:16])
-tmp_dst[23:16] := Saturate8(a[47:32])
-tmp_dst[31:24] := Saturate8(a[63:48])
-tmp_dst[39:32] := Saturate8(a[79:64])
-tmp_dst[47:40] := Saturate8(a[95:80])
-tmp_dst[55:48] := Saturate8(a[111:96])
-tmp_dst[63:56] := Saturate8(a[127:112])
-tmp_dst[71:64] := Saturate8(b[15:0])
-tmp_dst[79:72] := Saturate8(b[31:16])
-tmp_dst[87:80] := Saturate8(b[47:32])
-tmp_dst[95:88] := Saturate8(b[63:48])
-tmp_dst[103:96] := Saturate8(b[79:64])
-tmp_dst[111:104] := Saturate8(b[95:80])
-tmp_dst[119:112] := Saturate8(b[111:96])
-tmp_dst[127:120] := Saturate8(b[127:112])
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := SaturateU16(a[31:0])
-tmp_dst[31:16] := SaturateU16(a[63:32])
-tmp_dst[47:32] := SaturateU16(a[95:64])
-tmp_dst[63:48] := SaturateU16(a[127:96])
-tmp_dst[79:64] := SaturateU16(b[31:0])
-tmp_dst[95:80] := SaturateU16(b[63:32])
-tmp_dst[111:96] := SaturateU16(b[95:64])
-tmp_dst[127:112] := SaturateU16(b[127:96])
-tmp_dst[143:128] := SaturateU16(a[159:128])
-tmp_dst[159:144] := SaturateU16(a[191:160])
-tmp_dst[175:160] := SaturateU16(a[223:192])
-tmp_dst[191:176] := SaturateU16(a[255:224])
-tmp_dst[207:192] := SaturateU16(b[159:128])
-tmp_dst[223:208] := SaturateU16(b[191:160])
-tmp_dst[239:224] := SaturateU16(b[223:192])
-tmp_dst[255:240] := SaturateU16(b[255:224])
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := SaturateU16(a[31:0])
-tmp_dst[31:16] := SaturateU16(a[63:32])
-tmp_dst[47:32] := SaturateU16(a[95:64])
-tmp_dst[63:48] := SaturateU16(a[127:96])
-tmp_dst[79:64] := SaturateU16(b[31:0])
-tmp_dst[95:80] := SaturateU16(b[63:32])
-tmp_dst[111:96] := SaturateU16(b[95:64])
-tmp_dst[127:112] := SaturateU16(b[127:96])
-tmp_dst[143:128] := SaturateU16(a[159:128])
-tmp_dst[159:144] := SaturateU16(a[191:160])
-tmp_dst[175:160] := SaturateU16(a[223:192])
-tmp_dst[191:176] := SaturateU16(a[255:224])
-tmp_dst[207:192] := SaturateU16(b[159:128])
-tmp_dst[223:208] := SaturateU16(b[191:160])
-tmp_dst[239:224] := SaturateU16(b[223:192])
-tmp_dst[255:240] := SaturateU16(b[255:224])
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := SaturateU16(a[31:0])
-tmp_dst[31:16] := SaturateU16(a[63:32])
-tmp_dst[47:32] := SaturateU16(a[95:64])
-tmp_dst[63:48] := SaturateU16(a[127:96])
-tmp_dst[79:64] := SaturateU16(b[31:0])
-tmp_dst[95:80] := SaturateU16(b[63:32])
-tmp_dst[111:96] := SaturateU16(b[95:64])
-tmp_dst[127:112] := SaturateU16(b[127:96])
-tmp_dst[143:128] := SaturateU16(a[159:128])
-tmp_dst[159:144] := SaturateU16(a[191:160])
-tmp_dst[175:160] := SaturateU16(a[223:192])
-tmp_dst[191:176] := SaturateU16(a[255:224])
-tmp_dst[207:192] := SaturateU16(b[159:128])
-tmp_dst[223:208] := SaturateU16(b[191:160])
-tmp_dst[239:224] := SaturateU16(b[223:192])
-tmp_dst[255:240] := SaturateU16(b[255:224])
-tmp_dst[271:256] := SaturateU16(a[287:256])
-tmp_dst[287:272] := SaturateU16(a[319:288])
-tmp_dst[303:288] := SaturateU16(a[351:320])
-tmp_dst[319:304] := SaturateU16(a[383:352])
-tmp_dst[335:320] := SaturateU16(b[287:256])
-tmp_dst[351:336] := SaturateU16(b[319:288])
-tmp_dst[367:352] := SaturateU16(b[351:320])
-tmp_dst[383:368] := SaturateU16(b[383:352])
-tmp_dst[399:384] := SaturateU16(a[415:384])
-tmp_dst[415:400] := SaturateU16(a[447:416])
-tmp_dst[431:416] := SaturateU16(a[479:448])
-tmp_dst[447:432] := SaturateU16(a[511:480])
-tmp_dst[463:448] := SaturateU16(b[415:384])
-tmp_dst[479:464] := SaturateU16(b[447:416])
-tmp_dst[495:480] := SaturateU16(b[479:448])
-tmp_dst[511:496] := SaturateU16(b[511:480])
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := SaturateU16(a[31:0])
-tmp_dst[31:16] := SaturateU16(a[63:32])
-tmp_dst[47:32] := SaturateU16(a[95:64])
-tmp_dst[63:48] := SaturateU16(a[127:96])
-tmp_dst[79:64] := SaturateU16(b[31:0])
-tmp_dst[95:80] := SaturateU16(b[63:32])
-tmp_dst[111:96] := SaturateU16(b[95:64])
-tmp_dst[127:112] := SaturateU16(b[127:96])
-tmp_dst[143:128] := SaturateU16(a[159:128])
-tmp_dst[159:144] := SaturateU16(a[191:160])
-tmp_dst[175:160] := SaturateU16(a[223:192])
-tmp_dst[191:176] := SaturateU16(a[255:224])
-tmp_dst[207:192] := SaturateU16(b[159:128])
-tmp_dst[223:208] := SaturateU16(b[191:160])
-tmp_dst[239:224] := SaturateU16(b[223:192])
-tmp_dst[255:240] := SaturateU16(b[255:224])
-tmp_dst[271:256] := SaturateU16(a[287:256])
-tmp_dst[287:272] := SaturateU16(a[319:288])
-tmp_dst[303:288] := SaturateU16(a[351:320])
-tmp_dst[319:304] := SaturateU16(a[383:352])
-tmp_dst[335:320] := SaturateU16(b[287:256])
-tmp_dst[351:336] := SaturateU16(b[319:288])
-tmp_dst[367:352] := SaturateU16(b[351:320])
-tmp_dst[383:368] := SaturateU16(b[383:352])
-tmp_dst[399:384] := SaturateU16(a[415:384])
-tmp_dst[415:400] := SaturateU16(a[447:416])
-tmp_dst[431:416] := SaturateU16(a[479:448])
-tmp_dst[447:432] := SaturateU16(a[511:480])
-tmp_dst[463:448] := SaturateU16(b[415:384])
-tmp_dst[479:464] := SaturateU16(b[447:416])
-tmp_dst[495:480] := SaturateU16(b[479:448])
-tmp_dst[511:496] := SaturateU16(b[511:480])
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using unsigned saturation, and store the results in "dst".
-
-dst[15:0] := SaturateU16(a[31:0])
-dst[31:16] := SaturateU16(a[63:32])
-dst[47:32] := SaturateU16(a[95:64])
-dst[63:48] := SaturateU16(a[127:96])
-dst[79:64] := SaturateU16(b[31:0])
-dst[95:80] := SaturateU16(b[63:32])
-dst[111:96] := SaturateU16(b[95:64])
-dst[127:112] := SaturateU16(b[127:96])
-dst[143:128] := SaturateU16(a[159:128])
-dst[159:144] := SaturateU16(a[191:160])
-dst[175:160] := SaturateU16(a[223:192])
-dst[191:176] := SaturateU16(a[255:224])
-dst[207:192] := SaturateU16(b[159:128])
-dst[223:208] := SaturateU16(b[191:160])
-dst[239:224] := SaturateU16(b[223:192])
-dst[255:240] := SaturateU16(b[255:224])
-dst[271:256] := SaturateU16(a[287:256])
-dst[287:272] := SaturateU16(a[319:288])
-dst[303:288] := SaturateU16(a[351:320])
-dst[319:304] := SaturateU16(a[383:352])
-dst[335:320] := SaturateU16(b[287:256])
-dst[351:336] := SaturateU16(b[319:288])
-dst[367:352] := SaturateU16(b[351:320])
-dst[383:368] := SaturateU16(b[383:352])
-dst[399:384] := SaturateU16(a[415:384])
-dst[415:400] := SaturateU16(a[447:416])
-dst[431:416] := SaturateU16(a[479:448])
-dst[447:432] := SaturateU16(a[511:480])
-dst[463:448] := SaturateU16(b[415:384])
-dst[479:464] := SaturateU16(b[447:416])
-dst[495:480] := SaturateU16(b[479:448])
-dst[511:496] := SaturateU16(b[511:480])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := SaturateU16(a[31:0])
-tmp_dst[31:16] := SaturateU16(a[63:32])
-tmp_dst[47:32] := SaturateU16(a[95:64])
-tmp_dst[63:48] := SaturateU16(a[127:96])
-tmp_dst[79:64] := SaturateU16(b[31:0])
-tmp_dst[95:80] := SaturateU16(b[63:32])
-tmp_dst[111:96] := SaturateU16(b[95:64])
-tmp_dst[127:112] := SaturateU16(b[127:96])
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := SaturateU16(a[31:0])
-tmp_dst[31:16] := SaturateU16(a[63:32])
-tmp_dst[47:32] := SaturateU16(a[95:64])
-tmp_dst[63:48] := SaturateU16(a[127:96])
-tmp_dst[79:64] := SaturateU16(b[31:0])
-tmp_dst[95:80] := SaturateU16(b[63:32])
-tmp_dst[111:96] := SaturateU16(b[95:64])
-tmp_dst[127:112] := SaturateU16(b[127:96])
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := SaturateU8(a[15:0])
-tmp_dst[15:8] := SaturateU8(a[31:16])
-tmp_dst[23:16] := SaturateU8(a[47:32])
-tmp_dst[31:24] := SaturateU8(a[63:48])
-tmp_dst[39:32] := SaturateU8(a[79:64])
-tmp_dst[47:40] := SaturateU8(a[95:80])
-tmp_dst[55:48] := SaturateU8(a[111:96])
-tmp_dst[63:56] := SaturateU8(a[127:112])
-tmp_dst[71:64] := SaturateU8(b[15:0])
-tmp_dst[79:72] := SaturateU8(b[31:16])
-tmp_dst[87:80] := SaturateU8(b[47:32])
-tmp_dst[95:88] := SaturateU8(b[63:48])
-tmp_dst[103:96] := SaturateU8(b[79:64])
-tmp_dst[111:104] := SaturateU8(b[95:80])
-tmp_dst[119:112] := SaturateU8(b[111:96])
-tmp_dst[127:120] := SaturateU8(b[127:112])
-tmp_dst[135:128] := SaturateU8(a[143:128])
-tmp_dst[143:136] := SaturateU8(a[159:144])
-tmp_dst[151:144] := SaturateU8(a[175:160])
-tmp_dst[159:152] := SaturateU8(a[191:176])
-tmp_dst[167:160] := SaturateU8(a[207:192])
-tmp_dst[175:168] := SaturateU8(a[223:208])
-tmp_dst[183:176] := SaturateU8(a[239:224])
-tmp_dst[191:184] := SaturateU8(a[255:240])
-tmp_dst[199:192] := SaturateU8(b[143:128])
-tmp_dst[207:200] := SaturateU8(b[159:144])
-tmp_dst[215:208] := SaturateU8(b[175:160])
-tmp_dst[223:216] := SaturateU8(b[191:176])
-tmp_dst[231:224] := SaturateU8(b[207:192])
-tmp_dst[239:232] := SaturateU8(b[223:208])
-tmp_dst[247:240] := SaturateU8(b[239:224])
-tmp_dst[255:248] := SaturateU8(b[255:240])
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := SaturateU8(a[15:0])
-tmp_dst[15:8] := SaturateU8(a[31:16])
-tmp_dst[23:16] := SaturateU8(a[47:32])
-tmp_dst[31:24] := SaturateU8(a[63:48])
-tmp_dst[39:32] := SaturateU8(a[79:64])
-tmp_dst[47:40] := SaturateU8(a[95:80])
-tmp_dst[55:48] := SaturateU8(a[111:96])
-tmp_dst[63:56] := SaturateU8(a[127:112])
-tmp_dst[71:64] := SaturateU8(b[15:0])
-tmp_dst[79:72] := SaturateU8(b[31:16])
-tmp_dst[87:80] := SaturateU8(b[47:32])
-tmp_dst[95:88] := SaturateU8(b[63:48])
-tmp_dst[103:96] := SaturateU8(b[79:64])
-tmp_dst[111:104] := SaturateU8(b[95:80])
-tmp_dst[119:112] := SaturateU8(b[111:96])
-tmp_dst[127:120] := SaturateU8(b[127:112])
-tmp_dst[135:128] := SaturateU8(a[143:128])
-tmp_dst[143:136] := SaturateU8(a[159:144])
-tmp_dst[151:144] := SaturateU8(a[175:160])
-tmp_dst[159:152] := SaturateU8(a[191:176])
-tmp_dst[167:160] := SaturateU8(a[207:192])
-tmp_dst[175:168] := SaturateU8(a[223:208])
-tmp_dst[183:176] := SaturateU8(a[239:224])
-tmp_dst[191:184] := SaturateU8(a[255:240])
-tmp_dst[199:192] := SaturateU8(b[143:128])
-tmp_dst[207:200] := SaturateU8(b[159:144])
-tmp_dst[215:208] := SaturateU8(b[175:160])
-tmp_dst[223:216] := SaturateU8(b[191:176])
-tmp_dst[231:224] := SaturateU8(b[207:192])
-tmp_dst[239:232] := SaturateU8(b[223:208])
-tmp_dst[247:240] := SaturateU8(b[239:224])
-tmp_dst[255:248] := SaturateU8(b[255:240])
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := SaturateU8(a[15:0])
-tmp_dst[15:8] := SaturateU8(a[31:16])
-tmp_dst[23:16] := SaturateU8(a[47:32])
-tmp_dst[31:24] := SaturateU8(a[63:48])
-tmp_dst[39:32] := SaturateU8(a[79:64])
-tmp_dst[47:40] := SaturateU8(a[95:80])
-tmp_dst[55:48] := SaturateU8(a[111:96])
-tmp_dst[63:56] := SaturateU8(a[127:112])
-tmp_dst[71:64] := SaturateU8(b[15:0])
-tmp_dst[79:72] := SaturateU8(b[31:16])
-tmp_dst[87:80] := SaturateU8(b[47:32])
-tmp_dst[95:88] := SaturateU8(b[63:48])
-tmp_dst[103:96] := SaturateU8(b[79:64])
-tmp_dst[111:104] := SaturateU8(b[95:80])
-tmp_dst[119:112] := SaturateU8(b[111:96])
-tmp_dst[127:120] := SaturateU8(b[127:112])
-tmp_dst[135:128] := SaturateU8(a[143:128])
-tmp_dst[143:136] := SaturateU8(a[159:144])
-tmp_dst[151:144] := SaturateU8(a[175:160])
-tmp_dst[159:152] := SaturateU8(a[191:176])
-tmp_dst[167:160] := SaturateU8(a[207:192])
-tmp_dst[175:168] := SaturateU8(a[223:208])
-tmp_dst[183:176] := SaturateU8(a[239:224])
-tmp_dst[191:184] := SaturateU8(a[255:240])
-tmp_dst[199:192] := SaturateU8(b[143:128])
-tmp_dst[207:200] := SaturateU8(b[159:144])
-tmp_dst[215:208] := SaturateU8(b[175:160])
-tmp_dst[223:216] := SaturateU8(b[191:176])
-tmp_dst[231:224] := SaturateU8(b[207:192])
-tmp_dst[239:232] := SaturateU8(b[223:208])
-tmp_dst[247:240] := SaturateU8(b[239:224])
-tmp_dst[255:248] := SaturateU8(b[255:240])
-tmp_dst[263:256] := SaturateU8(a[271:256])
-tmp_dst[271:264] := SaturateU8(a[287:272])
-tmp_dst[279:272] := SaturateU8(a[303:288])
-tmp_dst[287:280] := SaturateU8(a[319:304])
-tmp_dst[295:288] := SaturateU8(a[335:320])
-tmp_dst[303:296] := SaturateU8(a[351:336])
-tmp_dst[311:304] := SaturateU8(a[367:352])
-tmp_dst[319:312] := SaturateU8(a[383:368])
-tmp_dst[327:320] := SaturateU8(b[271:256])
-tmp_dst[335:328] := SaturateU8(b[287:272])
-tmp_dst[343:336] := SaturateU8(b[303:288])
-tmp_dst[351:344] := SaturateU8(b[319:304])
-tmp_dst[359:352] := SaturateU8(b[335:320])
-tmp_dst[367:360] := SaturateU8(b[351:336])
-tmp_dst[375:368] := SaturateU8(b[367:352])
-tmp_dst[383:376] := SaturateU8(b[383:368])
-tmp_dst[391:384] := SaturateU8(a[399:384])
-tmp_dst[399:392] := SaturateU8(a[415:400])
-tmp_dst[407:400] := SaturateU8(a[431:416])
-tmp_dst[415:408] := SaturateU8(a[447:432])
-tmp_dst[423:416] := SaturateU8(a[463:448])
-tmp_dst[431:424] := SaturateU8(a[479:464])
-tmp_dst[439:432] := SaturateU8(a[495:480])
-tmp_dst[447:440] := SaturateU8(a[511:496])
-tmp_dst[455:448] := SaturateU8(b[399:384])
-tmp_dst[463:456] := SaturateU8(b[415:400])
-tmp_dst[471:464] := SaturateU8(b[431:416])
-tmp_dst[479:472] := SaturateU8(b[447:432])
-tmp_dst[487:480] := SaturateU8(b[463:448])
-tmp_dst[495:488] := SaturateU8(b[479:464])
-tmp_dst[503:496] := SaturateU8(b[495:480])
-tmp_dst[511:504] := SaturateU8(b[511:496])
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := SaturateU8(a[15:0])
-tmp_dst[15:8] := SaturateU8(a[31:16])
-tmp_dst[23:16] := SaturateU8(a[47:32])
-tmp_dst[31:24] := SaturateU8(a[63:48])
-tmp_dst[39:32] := SaturateU8(a[79:64])
-tmp_dst[47:40] := SaturateU8(a[95:80])
-tmp_dst[55:48] := SaturateU8(a[111:96])
-tmp_dst[63:56] := SaturateU8(a[127:112])
-tmp_dst[71:64] := SaturateU8(b[15:0])
-tmp_dst[79:72] := SaturateU8(b[31:16])
-tmp_dst[87:80] := SaturateU8(b[47:32])
-tmp_dst[95:88] := SaturateU8(b[63:48])
-tmp_dst[103:96] := SaturateU8(b[79:64])
-tmp_dst[111:104] := SaturateU8(b[95:80])
-tmp_dst[119:112] := SaturateU8(b[111:96])
-tmp_dst[127:120] := SaturateU8(b[127:112])
-tmp_dst[135:128] := SaturateU8(a[143:128])
-tmp_dst[143:136] := SaturateU8(a[159:144])
-tmp_dst[151:144] := SaturateU8(a[175:160])
-tmp_dst[159:152] := SaturateU8(a[191:176])
-tmp_dst[167:160] := SaturateU8(a[207:192])
-tmp_dst[175:168] := SaturateU8(a[223:208])
-tmp_dst[183:176] := SaturateU8(a[239:224])
-tmp_dst[191:184] := SaturateU8(a[255:240])
-tmp_dst[199:192] := SaturateU8(b[143:128])
-tmp_dst[207:200] := SaturateU8(b[159:144])
-tmp_dst[215:208] := SaturateU8(b[175:160])
-tmp_dst[223:216] := SaturateU8(b[191:176])
-tmp_dst[231:224] := SaturateU8(b[207:192])
-tmp_dst[239:232] := SaturateU8(b[223:208])
-tmp_dst[247:240] := SaturateU8(b[239:224])
-tmp_dst[255:248] := SaturateU8(b[255:240])
-tmp_dst[263:256] := SaturateU8(a[271:256])
-tmp_dst[271:264] := SaturateU8(a[287:272])
-tmp_dst[279:272] := SaturateU8(a[303:288])
-tmp_dst[287:280] := SaturateU8(a[319:304])
-tmp_dst[295:288] := SaturateU8(a[335:320])
-tmp_dst[303:296] := SaturateU8(a[351:336])
-tmp_dst[311:304] := SaturateU8(a[367:352])
-tmp_dst[319:312] := SaturateU8(a[383:368])
-tmp_dst[327:320] := SaturateU8(b[271:256])
-tmp_dst[335:328] := SaturateU8(b[287:272])
-tmp_dst[343:336] := SaturateU8(b[303:288])
-tmp_dst[351:344] := SaturateU8(b[319:304])
-tmp_dst[359:352] := SaturateU8(b[335:320])
-tmp_dst[367:360] := SaturateU8(b[351:336])
-tmp_dst[375:368] := SaturateU8(b[367:352])
-tmp_dst[383:376] := SaturateU8(b[383:368])
-tmp_dst[391:384] := SaturateU8(a[399:384])
-tmp_dst[399:392] := SaturateU8(a[415:400])
-tmp_dst[407:400] := SaturateU8(a[431:416])
-tmp_dst[415:408] := SaturateU8(a[447:432])
-tmp_dst[423:416] := SaturateU8(a[463:448])
-tmp_dst[431:424] := SaturateU8(a[479:464])
-tmp_dst[439:432] := SaturateU8(a[495:480])
-tmp_dst[447:440] := SaturateU8(a[511:496])
-tmp_dst[455:448] := SaturateU8(b[399:384])
-tmp_dst[463:456] := SaturateU8(b[415:400])
-tmp_dst[471:464] := SaturateU8(b[431:416])
-tmp_dst[479:472] := SaturateU8(b[447:432])
-tmp_dst[487:480] := SaturateU8(b[463:448])
-tmp_dst[495:488] := SaturateU8(b[479:464])
-tmp_dst[503:496] := SaturateU8(b[495:480])
-tmp_dst[511:504] := SaturateU8(b[511:496])
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Miscellaneous
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using unsigned saturation, and store the results in "dst".
-
-dst[7:0] := SaturateU8(a[15:0])
-dst[15:8] := SaturateU8(a[31:16])
-dst[23:16] := SaturateU8(a[47:32])
-dst[31:24] := SaturateU8(a[63:48])
-dst[39:32] := SaturateU8(a[79:64])
-dst[47:40] := SaturateU8(a[95:80])
-dst[55:48] := SaturateU8(a[111:96])
-dst[63:56] := SaturateU8(a[127:112])
-dst[71:64] := SaturateU8(b[15:0])
-dst[79:72] := SaturateU8(b[31:16])
-dst[87:80] := SaturateU8(b[47:32])
-dst[95:88] := SaturateU8(b[63:48])
-dst[103:96] := SaturateU8(b[79:64])
-dst[111:104] := SaturateU8(b[95:80])
-dst[119:112] := SaturateU8(b[111:96])
-dst[127:120] := SaturateU8(b[127:112])
-dst[135:128] := SaturateU8(a[143:128])
-dst[143:136] := SaturateU8(a[159:144])
-dst[151:144] := SaturateU8(a[175:160])
-dst[159:152] := SaturateU8(a[191:176])
-dst[167:160] := SaturateU8(a[207:192])
-dst[175:168] := SaturateU8(a[223:208])
-dst[183:176] := SaturateU8(a[239:224])
-dst[191:184] := SaturateU8(a[255:240])
-dst[199:192] := SaturateU8(b[143:128])
-dst[207:200] := SaturateU8(b[159:144])
-dst[215:208] := SaturateU8(b[175:160])
-dst[223:216] := SaturateU8(b[191:176])
-dst[231:224] := SaturateU8(b[207:192])
-dst[239:232] := SaturateU8(b[223:208])
-dst[247:240] := SaturateU8(b[239:224])
-dst[255:248] := SaturateU8(b[255:240])
-dst[263:256] := SaturateU8(a[271:256])
-dst[271:264] := SaturateU8(a[287:272])
-dst[279:272] := SaturateU8(a[303:288])
-dst[287:280] := SaturateU8(a[319:304])
-dst[295:288] := SaturateU8(a[335:320])
-dst[303:296] := SaturateU8(a[351:336])
-dst[311:304] := SaturateU8(a[367:352])
-dst[319:312] := SaturateU8(a[383:368])
-dst[327:320] := SaturateU8(b[271:256])
-dst[335:328] := SaturateU8(b[287:272])
-dst[343:336] := SaturateU8(b[303:288])
-dst[351:344] := SaturateU8(b[319:304])
-dst[359:352] := SaturateU8(b[335:320])
-dst[367:360] := SaturateU8(b[351:336])
-dst[375:368] := SaturateU8(b[367:352])
-dst[383:376] := SaturateU8(b[383:368])
-dst[391:384] := SaturateU8(a[399:384])
-dst[399:392] := SaturateU8(a[415:400])
-dst[407:400] := SaturateU8(a[431:416])
-dst[415:408] := SaturateU8(a[447:432])
-dst[423:416] := SaturateU8(a[463:448])
-dst[431:424] := SaturateU8(a[479:464])
-dst[439:432] := SaturateU8(a[495:480])
-dst[447:440] := SaturateU8(a[511:496])
-dst[455:448] := SaturateU8(b[399:384])
-dst[463:456] := SaturateU8(b[415:400])
-dst[471:464] := SaturateU8(b[431:416])
-dst[479:472] := SaturateU8(b[447:432])
-dst[487:480] := SaturateU8(b[463:448])
-dst[495:488] := SaturateU8(b[479:464])
-dst[503:496] := SaturateU8(b[495:480])
-dst[511:504] := SaturateU8(b[511:496])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := SaturateU8(a[15:0])
-tmp_dst[15:8] := SaturateU8(a[31:16])
-tmp_dst[23:16] := SaturateU8(a[47:32])
-tmp_dst[31:24] := SaturateU8(a[63:48])
-tmp_dst[39:32] := SaturateU8(a[79:64])
-tmp_dst[47:40] := SaturateU8(a[95:80])
-tmp_dst[55:48] := SaturateU8(a[111:96])
-tmp_dst[63:56] := SaturateU8(a[127:112])
-tmp_dst[71:64] := SaturateU8(b[15:0])
-tmp_dst[79:72] := SaturateU8(b[31:16])
-tmp_dst[87:80] := SaturateU8(b[47:32])
-tmp_dst[95:88] := SaturateU8(b[63:48])
-tmp_dst[103:96] := SaturateU8(b[79:64])
-tmp_dst[111:104] := SaturateU8(b[95:80])
-tmp_dst[119:112] := SaturateU8(b[111:96])
-tmp_dst[127:120] := SaturateU8(b[127:112])
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Miscellaneous
-
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[7:0] := SaturateU8(a[15:0])
-tmp_dst[15:8] := SaturateU8(a[31:16])
-tmp_dst[23:16] := SaturateU8(a[47:32])
-tmp_dst[31:24] := SaturateU8(a[63:48])
-tmp_dst[39:32] := SaturateU8(a[79:64])
-tmp_dst[47:40] := SaturateU8(a[95:80])
-tmp_dst[55:48] := SaturateU8(a[111:96])
-tmp_dst[63:56] := SaturateU8(a[127:112])
-tmp_dst[71:64] := SaturateU8(b[15:0])
-tmp_dst[79:72] := SaturateU8(b[31:16])
-tmp_dst[87:80] := SaturateU8(b[47:32])
-tmp_dst[95:88] := SaturateU8(b[63:48])
-tmp_dst[103:96] := SaturateU8(b[79:64])
-tmp_dst[111:104] := SaturateU8(b[95:80])
-tmp_dst[119:112] := SaturateU8(b[111:96])
-tmp_dst[127:120] := SaturateU8(b[127:112])
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed 8-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] + b[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed 8-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] + b[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Add packed 8-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := a[i+7:i] + b[i+7:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed 8-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] + b[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed 8-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] + b[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed 8-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] + b[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed 8-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] + b[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed signed 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed signed 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Add packed signed 8-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed signed 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed signed 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed signed 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed signed 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed signed 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed signed 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Add packed signed 16-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed signed 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed signed 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed signed 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed signed 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed 16-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] + b[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed 16-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] + b[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Add packed 16-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := a[i+15:i] + b[i+15:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed 16-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] + b[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed 16-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] + b[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Add packed 16-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] + b[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Add packed 16-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] + b[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
-
- Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*128
- tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
- tmp_dst[i+127:i] := tmp[127:0]
-ENDFOR
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*128
- tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
- tmp_dst[i+127:i] := tmp[127:0]
-ENDFOR
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst".
-
-FOR j := 0 to 3
- i := j*128
- tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
- dst[i+127:i] := tmp[127:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
-
- Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*128
- tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
- tmp_dst[i+127:i] := tmp[127:0]
-ENDFOR
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*128
- tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
- tmp_dst[i+127:i] := tmp[127:0]
-ENDFOR
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
-
- Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[255:0] := ((a[127:0] << 128)[255:0] OR b[127:0]) >> (imm8*8)
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[255:0] := ((a[127:0] << 128)[255:0] OR b[127:0]) >> (imm8*8)
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Average packed unsigned 8-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Average packed unsigned 8-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Average packed unsigned 8-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Average packed unsigned 8-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Average packed unsigned 8-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Average packed unsigned 8-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Average packed unsigned 8-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Average packed unsigned 16-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Average packed unsigned 16-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Average packed unsigned 16-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Average packed unsigned 16-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Average packed unsigned 16-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Average packed unsigned 16-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Average packed unsigned 16-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Blend packed 8-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := b[i+7:i]
- ELSE
- dst[i+7:i] := a[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Blend packed 8-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := b[i+7:i]
- ELSE
- dst[i+7:i] := a[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Blend packed 8-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := b[i+7:i]
- ELSE
- dst[i+7:i] := a[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Blend packed 16-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := b[i+15:i]
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Blend packed 16-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := b[i+15:i]
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Blend packed 16-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := b[i+15:i]
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Set
-
-
-
-
- Broadcast 8-bit integer "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
- Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Set
-
-
-
- Broadcast 8-bit integer "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
- Broadcast the low packed 8-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := a[7:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Set
-
-
-
-
- Broadcast 8-bit integer "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
- Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Set
-
-
-
- Broadcast 8-bit integer "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Set
-
-
-
-
- Broadcast 8-bit integer "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
- Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Set
-
-
-
- Broadcast 8-bit integer "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[7:0]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Set
-
-
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Set
-
-
-
- Broadcast 16-bit integer "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := a[15:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Set
-
-
-
-
- Broadcast 16-bit integer "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Set
-
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Set
-
-
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Set
-
-
-
- Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[15:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- off := 16*idx[i+3:i]
- dst[i+15:i] := idx[i+4] ? b[off+15:off] : a[off+15:off]
- ELSE
- dst[i+15:i] := idx[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- off := 16*idx[i+3:i]
- dst[i+15:i] := idx[i+4] ? b[off+15:off] : a[off+15:off]
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- off := 16*idx[i+3:i]
- dst[i+15:i] := idx[i+4] ? b[off+15:off] : a[off+15:off]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- off := 16*idx[i+3:i]
- dst[i+15:i] := idx[i+4] ? b[off+15:off] : a[off+15:off]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- off := 16*idx[i+4:i]
- dst[i+15:i] := idx[i+5] ? b[off+15:off] : a[off+15:off]
- ELSE
- dst[i+15:i] := idx[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- off := 16*idx[i+4:i]
- dst[i+15:i] := idx[i+5] ? b[off+15:off] : a[off+15:off]
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- off := 16*idx[i+4:i]
- dst[i+15:i] := idx[i+5] ? b[off+15:off] : a[off+15:off]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- off := 16*idx[i+4:i]
- dst[i+15:i] := idx[i+5] ? b[off+15:off] : a[off+15:off]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- off := 16*idx[i+2:i]
- dst[i+15:i] := idx[i+3] ? b[off+15:off] : a[off+15:off]
- ELSE
- dst[i+15:i] := idx[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- off := 16*idx[i+2:i]
- dst[i+15:i] := idx[i+3] ? b[off+15:off] : a[off+15:off]
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- off := 16*idx[i+2:i]
- dst[i+15:i] := idx[i+3] ? b[off+15:off] : a[off+15:off]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- off := 16*idx[i+2:i]
- dst[i+15:i] := idx[i+3] ? b[off+15:off] : a[off+15:off]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- id := idx[i+3:i]*16
- IF k[j]
- dst[i+15:i] := a[id+15:id]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- id := idx[i+3:i]*16
- IF k[j]
- dst[i+15:i] := a[id+15:id]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
- Shuffle 16-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- id := idx[i+3:i]*16
- dst[i+15:i] := a[id+15:id]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- id := idx[i+4:i]*16
- IF k[j]
- dst[i+15:i] := a[id+15:id]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- id := idx[i+4:i]*16
- IF k[j]
- dst[i+15:i] := a[id+15:id]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
- Shuffle 16-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- id := idx[i+4:i]*16
- dst[i+15:i] := a[id+15:id]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in "a" using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- id := idx[i+2:i]*16
- IF k[j]
- dst[i+15:i] := a[id+15:id]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in "a" using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- id := idx[i+2:i]*16
- IF k[j]
- dst[i+15:i] := a[id+15:id]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
- Shuffle 16-bit integers in "a" using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- id := idx[i+2:i]*16
- dst[i+15:i] := a[id+15:id]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the saturated results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the saturated results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Vertically multiply each unsigned 8-bit integer from "a" with the corresponding signed 8-bit integer from "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the saturated results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the saturated results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the saturated results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the saturated results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the saturated results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers, and pack the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) + SignExtend32(a[i+15:i]*b[i+15:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers, and pack the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) + SignExtend32(a[i+15:i]*b[i+15:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers, and pack the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) + SignExtend32(a[i+15:i]*b[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers, and pack the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) + SignExtend32(a[i+15:i]*b[i+15:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers, and pack the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) + SignExtend32(a[i+15:i]*b[i+15:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers, and pack the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) + SignExtend32(a[i+15:i]*b[i+15:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers, and pack the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) + SignExtend32(a[i+15:i]*b[i+15:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 8-bit integer in "a".
-
-FOR j := 0 to 31
- i := j*8
- IF a[i+7]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 8-bit integer in "a".
-
-FOR j := 0 to 63
- i := j*8
- IF a[i+7]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 8-bit integer in "a".
-
-FOR j := 0 to 15
- i := j*8
- IF a[i+7]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
- Set each packed 8-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := 0xFF
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
- Set each packed 8-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := 0xFF
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- AVX512VL
- Miscellaneous
-
-
- Set each packed 8-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := 0xFF
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
- Set each packed 16-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := 0xFFFF
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
- Set each packed 16-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := 0xFFFF
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
- Set each packed 16-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := 0xFFFF
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- dst[l+7:l] := Saturate8(a[i+15:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+15:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Store
-
-
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+15:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+15:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- dst[l+7:l] := Saturate8(a[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+15:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Store
-
-
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+15:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+15:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- dst[l+7:l] := Saturate8(a[i+15:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+15:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Store
-
-
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+15:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
- Convert packed signed 16-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+15:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
-
- Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := SignExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
- Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := SignExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
- Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- l := j*16
- dst[l+15:l] := SignExtend16(a[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
-
-
- Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := SignExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
-
- Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := SignExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
-
- Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := SignExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
- Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := SignExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- dst[l+7:l] := SaturateU8(a[i+15:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+15:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Store
-
-
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+15:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+15:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- dst[l+7:l] := SaturateU8(a[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+15:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Store
-
-
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+15:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+15:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- dst[l+7:l] := SaturateU8(a[i+15:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+15:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Store
-
-
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+15:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
- Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+15:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 16-bit integer in "a".
-
-FOR j := 0 to 15
- i := j*16
- IF a[i+15]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 16-bit integer in "a".
-
-FOR j := 0 to 31
- i := j*16
- IF a[i+15]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 16-bit integer in "a".
-
-FOR j := 0 to 7
- i := j*16
- IF a[i+15]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- dst[l+7:l] := Truncate8(a[i+15:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+15:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Store
-
-
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+15:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+15:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- dst[l+7:l] := Truncate8(a[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+15:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
- Store
-
-
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+15:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+15:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- dst[l+7:l] := Truncate8(a[i+15:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+15:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
- Store
-
-
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+15:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
- Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 16*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+15:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := ZeroExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := ZeroExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- l := j*16
- dst[l+15:l] := ZeroExtend16(a[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := ZeroExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Convert
-
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := ZeroExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := ZeroExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Convert
-
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*8
- l := j*16
- IF k[j]
- dst[l+15:l] := ZeroExtend16(a[i+7:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Truncate each intermediate integer to the 18 most significant bits, round by adding 1, and store bits [16:1] to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
- dst[i+15:i] := tmp[16:1]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Truncate each intermediate integer to the 18 most significant bits, round by adding 1, and store bits [16:1] to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
- dst[i+15:i] := tmp[16:1]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Truncate each intermediate integer to the 18 most significant bits, round by adding 1, and store bits [16:1] to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
- dst[i+15:i] := tmp[16:1]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Truncate each intermediate integer to the 18 most significant bits, round by adding 1, and store bits [16:1] to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
- dst[i+15:i] := tmp[16:1]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Truncate each intermediate integer to the 18 most significant bits, round by adding 1, and store bits [16:1] to "dst".
-
-FOR j := 0 to 31
- i := j*16
- tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
- dst[i+15:i] := tmp[16:1]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Truncate each intermediate integer to the 18 most significant bits, round by adding 1, and store bits [16:1] to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
- dst[i+15:i] := tmp[16:1]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Truncate each intermediate integer to the 18 most significant bits, round by adding 1, and store bits [16:1] to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
- dst[i+15:i] := tmp[16:1]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply the packed unsigned 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply the packed unsigned 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply the packed unsigned 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply the packed unsigned 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Multiply the packed unsigned 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 31
- i := j*16
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply the packed unsigned 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply the packed unsigned 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 31
- i := j*16
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply the packed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[15:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply the packed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[15:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply the packed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[15:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply the packed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[15:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Multiply the packed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 31
- i := j*16
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[15:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Multiply the packed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[15:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Multiply the packed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[15:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
- Compute the absolute differences of packed unsigned 8-bit integers in "a" and "b", then horizontally sum each consecutive 8 differences to produce eight unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low 16 bits of 64-bit elements in "dst".
-
-FOR j := 0 to 63
- i := j*8
- tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i])
-ENDFOR
-FOR j := 0 to 7
- i := j*64
- dst[i+15:i] := tmp[i+7:i] + tmp[i+15:i+8] + tmp[i+23:i+16] + tmp[i+31:i+24] + \
- tmp[i+39:i+32] + tmp[i+47:i+40] + tmp[i+55:i+48] + tmp[i+63:i+56]
- dst[i+63:i+16] := 0
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle packed 8-bit integers in "a" according to shuffle control mask in the corresponding 8-bit element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- IF b[i+7] == 1
- dst[i+7:i] := 0
- ELSE
- index[4:0] := b[i+3:i] + (j & 0x10)
- dst[i+7:i] := a[index*8+7:index*8]
- FI
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle packed 8-bit integers in "a" according to shuffle control mask in the corresponding 8-bit element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- IF b[i+7] == 1
- dst[i+7:i] := 0
- ELSE
- index[4:0] := b[i+3:i] + (j & 0x10)
- dst[i+7:i] := a[index*8+7:index*8]
- FI
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 8-bit integers in "a" within 128-bit lanes using the control in the corresponding 8-bit element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- IF b[i+7] == 1
- dst[i+7:i] := 0
- ELSE
- index[5:0] := b[i+3:i] + (j & 0x30)
- dst[i+7:i] := a[index*8+7:index*8]
- FI
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle packed 8-bit integers in "a" according to shuffle control mask in the corresponding 8-bit element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- IF b[i+7] == 1
- dst[i+7:i] := 0
- ELSE
- index[5:0] := b[i+3:i] + (j & 0x30)
- dst[i+7:i] := a[index*8+7:index*8]
- FI
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
- Shuffle packed 8-bit integers in "a" according to shuffle control mask in the corresponding 8-bit element of "b", and store the results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- IF b[i+7] == 1
- dst[i+7:i] := 0
- ELSE
- index[5:0] := b[i+3:i] + (j & 0x30)
- dst[i+7:i] := a[index*8+7:index*8]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle packed 8-bit integers in "a" according to shuffle control mask in the corresponding 8-bit element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- IF b[i+7] == 1
- dst[i+7:i] := 0
- ELSE
- index[3:0] := b[i+3:i]
- dst[i+7:i] := a[index*8+7:index*8]
- FI
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle packed 8-bit integers in "a" according to shuffle control mask in the corresponding 8-bit element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- IF b[i+7] == 1
- dst[i+7:i] := 0
- ELSE
- index[3:0] := b[i+3:i]
- dst[i+7:i] := a[index*8+7:index*8]
- FI
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with the low 64 bits of 128-bit lanes being copied from from "a" to "dst", using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := a[63:0]
-tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
-tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
-tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
-tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
-tmp_dst[191:128] := a[191:128]
-tmp_dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
-tmp_dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
-tmp_dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
-tmp_dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with the low 64 bits of 128-bit lanes being copied from from "a" to "dst", using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := a[63:0]
-tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
-tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
-tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
-tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
-tmp_dst[191:128] := a[191:128]
-tmp_dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
-tmp_dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
-tmp_dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
-tmp_dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with the low 64 bits of 128-bit lanes being copied from from "a" to "dst", using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := a[63:0]
-tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
-tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
-tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
-tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
-tmp_dst[191:128] := a[191:128]
-tmp_dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
-tmp_dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
-tmp_dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
-tmp_dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
-tmp_dst[319:256] := a[319:256]
-tmp_dst[335:320] := (a >> (imm8[1:0] * 16))[335:320]
-tmp_dst[351:336] := (a >> (imm8[3:2] * 16))[335:320]
-tmp_dst[367:352] := (a >> (imm8[5:4] * 16))[335:320]
-tmp_dst[383:368] := (a >> (imm8[7:6] * 16))[335:320]
-tmp_dst[447:384] := a[447:384]
-tmp_dst[463:448] := (a >> (imm8[1:0] * 16))[463:448]
-tmp_dst[479:464] := (a >> (imm8[3:2] * 16))[463:448]
-tmp_dst[495:480] := (a >> (imm8[5:4] * 16))[463:448]
-tmp_dst[511:496] := (a >> (imm8[7:6] * 16))[463:448]
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with the low 64 bits of 128-bit lanes being copied from from "a" to "dst", using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := a[63:0]
-tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
-tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
-tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
-tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
-tmp_dst[191:128] := a[191:128]
-tmp_dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
-tmp_dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
-tmp_dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
-tmp_dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
-tmp_dst[319:256] := a[319:256]
-tmp_dst[335:320] := (a >> (imm8[1:0] * 16))[335:320]
-tmp_dst[351:336] := (a >> (imm8[3:2] * 16))[335:320]
-tmp_dst[367:352] := (a >> (imm8[5:4] * 16))[335:320]
-tmp_dst[383:368] := (a >> (imm8[7:6] * 16))[335:320]
-tmp_dst[447:384] := a[447:384]
-tmp_dst[463:448] := (a >> (imm8[1:0] * 16))[463:448]
-tmp_dst[479:464] := (a >> (imm8[3:2] * 16))[463:448]
-tmp_dst[495:480] := (a >> (imm8[5:4] * 16))[463:448]
-tmp_dst[511:496] := (a >> (imm8[7:6] * 16))[463:448]
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
- Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with the low 64 bits of 128-bit lanes being copied from from "a" to "dst".
-
-dst[63:0] := a[63:0]
-dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
-dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
-dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
-dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
-dst[191:128] := a[191:128]
-dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
-dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
-dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
-dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
-dst[319:256] := a[319:256]
-dst[335:320] := (a >> (imm8[1:0] * 16))[335:320]
-dst[351:336] := (a >> (imm8[3:2] * 16))[335:320]
-dst[367:352] := (a >> (imm8[5:4] * 16))[335:320]
-dst[383:368] := (a >> (imm8[7:6] * 16))[335:320]
-dst[447:384] := a[447:384]
-dst[463:448] := (a >> (imm8[1:0] * 16))[463:448]
-dst[479:464] := (a >> (imm8[3:2] * 16))[463:448]
-dst[495:480] := (a >> (imm8[5:4] * 16))[463:448]
-dst[511:496] := (a >> (imm8[7:6] * 16))[463:448]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in the high 64 bits of "a" using the control in "imm8". Store the results in the high 64 bits of "dst", with the low 64 bits being copied from from "a" to "dst", using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := a[63:0]
-tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
-tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
-tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
-tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in the high 64 bits of "a" using the control in "imm8". Store the results in the high 64 bits of "dst", with the low 64 bits being copied from from "a" to "dst", using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := a[63:0]
-tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
-tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
-tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
-tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with the high 64 bits of 128-bit lanes being copied from from "a" to "dst", using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
-tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
-tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
-tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
-tmp_dst[127:64] := a[127:64]
-tmp_dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
-tmp_dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
-tmp_dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
-tmp_dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
-tmp_dst[255:192] := a[255:192]
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with the high 64 bits of 128-bit lanes being copied from from "a" to "dst", using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
-tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
-tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
-tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
-tmp_dst[127:64] := a[127:64]
-tmp_dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
-tmp_dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
-tmp_dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
-tmp_dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
-tmp_dst[255:192] := a[255:192]
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with the high 64 bits of 128-bit lanes being copied from from "a" to "dst", using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
-tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
-tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
-tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
-tmp_dst[127:64] := a[127:64]
-tmp_dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
-tmp_dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
-tmp_dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
-tmp_dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
-tmp_dst[255:192] := a[255:192]
-tmp_dst[271:256] := (a >> (imm8[1:0] * 16))[271:256]
-tmp_dst[287:272] := (a >> (imm8[3:2] * 16))[271:256]
-tmp_dst[303:288] := (a >> (imm8[5:4] * 16))[271:256]
-tmp_dst[319:304] := (a >> (imm8[7:6] * 16))[271:256]
-tmp_dst[383:320] := a[383:320]
-tmp_dst[399:384] := (a >> (imm8[1:0] * 16))[399:384]
-tmp_dst[415:400] := (a >> (imm8[3:2] * 16))[399:384]
-tmp_dst[431:416] := (a >> (imm8[5:4] * 16))[399:384]
-tmp_dst[447:432] := (a >> (imm8[7:6] * 16))[399:384]
-tmp_dst[511:448] := a[511:448]
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with the high 64 bits of 128-bit lanes being copied from from "a" to "dst", using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
-tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
-tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
-tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
-tmp_dst[127:64] := a[127:64]
-tmp_dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
-tmp_dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
-tmp_dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
-tmp_dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
-tmp_dst[255:192] := a[255:192]
-tmp_dst[271:256] := (a >> (imm8[1:0] * 16))[271:256]
-tmp_dst[287:272] := (a >> (imm8[3:2] * 16))[271:256]
-tmp_dst[303:288] := (a >> (imm8[5:4] * 16))[271:256]
-tmp_dst[319:304] := (a >> (imm8[7:6] * 16))[271:256]
-tmp_dst[383:320] := a[383:320]
-tmp_dst[399:384] := (a >> (imm8[1:0] * 16))[399:384]
-tmp_dst[415:400] := (a >> (imm8[3:2] * 16))[399:384]
-tmp_dst[431:416] := (a >> (imm8[5:4] * 16))[399:384]
-tmp_dst[447:432] := (a >> (imm8[7:6] * 16))[399:384]
-tmp_dst[511:448] := a[511:448]
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
- Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with the high 64 bits of 128-bit lanes being copied from from "a" to "dst".
-
-dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
-dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
-dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
-dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
-dst[127:64] := a[127:64]
-dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
-dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
-dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
-dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
-dst[255:192] := a[255:192]
-dst[271:256] := (a >> (imm8[1:0] * 16))[271:256]
-dst[287:272] := (a >> (imm8[3:2] * 16))[271:256]
-dst[303:288] := (a >> (imm8[5:4] * 16))[271:256]
-dst[319:304] := (a >> (imm8[7:6] * 16))[271:256]
-dst[383:320] := a[383:320]
-dst[399:384] := (a >> (imm8[1:0] * 16))[399:384]
-dst[415:400] := (a >> (imm8[3:2] * 16))[399:384]
-dst[431:416] := (a >> (imm8[5:4] * 16))[399:384]
-dst[447:432] := (a >> (imm8[7:6] * 16))[399:384]
-dst[511:448] := a[511:448]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Shuffle 16-bit integers in the low 64 bits of "a" using the control in "imm8". Store the results in the low 64 bits of "dst", with the high 64 bits being copied from from "a" to "dst", using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
-tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
-tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
-tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
-tmp_dst[127:64] := a[127:64]
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Shuffle 16-bit integers in the low 64 bits of "a" using the control in "imm8". Store the results in the low 64 bits of "dst", with the high 64 bits being copied from from "a" to "dst", using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
-tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
-tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
-tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
-tmp_dst[127:64] := a[127:64]
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
- Shift 128-bit lanes in "a" left by "imm8" bytes while shifting in zeros, and store the results in "dst".
-
-tmp := imm8[7:0]
-IF tmp > 15
- tmp := 16
-FI
-dst[127:0] := a[127:0] << (tmp*8)
-dst[255:128] := a[255:128] << (tmp*8)
-dst[383:256] := a[383:256] << (tmp*8)
-dst[511:384] := a[511:384] << (tmp*8)
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- IF count[i+15:i] < 16
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- IF count[i+15:i] < 16
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- IF count[i+15:i] < 16
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
- Shift 128-bit lanes in "a" right by "imm8" bytes while shifting in zeros, and store the results in "dst".
-
-tmp := imm8[7:0]
-IF tmp > 15
- tmp := 16
-FI
-dst[127:0] := a[127:0] >> (tmp*8)
-dst[255:128] := a[255:128] >> (tmp*8)
-dst[383:256] := a[383:256] >> (tmp*8)
-dst[511:384] := a[511:384] >> (tmp*8)
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*16
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- IF count[i+15:i] < 16
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Shift
-
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] - b[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] - b[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] - b[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] - b[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := a[i+7:i] - b[i+7:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] - b[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[i+7:i] - b[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit integers in "a" using saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit integers in "a" using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] - b[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] - b[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] - b[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] - b[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Arithmetic
-
-
-
- Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := a[i+15:i] - b[i+15:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
-
- Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] - b[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Arithmetic
-
-
-
-
- Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[i+15:i] - b[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 31
- i := j*8
- IF k1[j]
- k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 31
- i := j*8
- k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 63
- i := j*8
- IF k1[j]
- k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 63
- i := j*8
- k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 15
- i := j*8
- IF k1[j]
- k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing intermediate 8-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 15
- i := j*8
- k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 15
- i := j*16
- IF k1[j]
- k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 15
- i := j*16
- k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 31
- i := j*16
- IF k1[j]
- k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512BW
- Compare
-
-
-
- Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 31
- i := j*16
- k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
-
- Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 7
- i := j*16
- IF k1[j]
- k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512BW
- Compare
-
-
-
- Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing intermediate 16-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 7
- i := j*16
- k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 8-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[71:64]
- dst[15:8] := src2[71:64]
- dst[23:16] := src1[79:72]
- dst[31:24] := src2[79:72]
- dst[39:32] := src1[87:80]
- dst[47:40] := src2[87:80]
- dst[55:48] := src1[95:88]
- dst[63:56] := src2[95:88]
- dst[71:64] := src1[103:96]
- dst[79:72] := src2[103:96]
- dst[87:80] := src1[111:104]
- dst[95:88] := src2[111:104]
- dst[103:96] := src1[119:112]
- dst[111:104] := src2[119:112]
- dst[119:112] := src1[127:120]
- dst[127:120] := src2[127:120]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 8-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[71:64]
- dst[15:8] := src2[71:64]
- dst[23:16] := src1[79:72]
- dst[31:24] := src2[79:72]
- dst[39:32] := src1[87:80]
- dst[47:40] := src2[87:80]
- dst[55:48] := src1[95:88]
- dst[63:56] := src2[95:88]
- dst[71:64] := src1[103:96]
- dst[79:72] := src2[103:96]
- dst[87:80] := src1[111:104]
- dst[95:88] := src2[111:104]
- dst[103:96] := src1[119:112]
- dst[111:104] := src2[119:112]
- dst[119:112] := src1[127:120]
- dst[127:120] := src2[127:120]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 8-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[71:64]
- dst[15:8] := src2[71:64]
- dst[23:16] := src1[79:72]
- dst[31:24] := src2[79:72]
- dst[39:32] := src1[87:80]
- dst[47:40] := src2[87:80]
- dst[55:48] := src1[95:88]
- dst[63:56] := src2[95:88]
- dst[71:64] := src1[103:96]
- dst[79:72] := src2[103:96]
- dst[87:80] := src1[111:104]
- dst[95:88] := src2[111:104]
- dst[103:96] := src1[119:112]
- dst[111:104] := src2[119:112]
- dst[119:112] := src1[127:120]
- dst[127:120] := src2[127:120]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_BYTES(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_BYTES(a[511:384], b[511:384])
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 8-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[71:64]
- dst[15:8] := src2[71:64]
- dst[23:16] := src1[79:72]
- dst[31:24] := src2[79:72]
- dst[39:32] := src1[87:80]
- dst[47:40] := src2[87:80]
- dst[55:48] := src1[95:88]
- dst[63:56] := src2[95:88]
- dst[71:64] := src1[103:96]
- dst[79:72] := src2[103:96]
- dst[87:80] := src1[111:104]
- dst[95:88] := src2[111:104]
- dst[103:96] := src1[119:112]
- dst[111:104] := src2[119:112]
- dst[119:112] := src1[127:120]
- dst[127:120] := src2[127:120]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_BYTES(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_BYTES(a[511:384], b[511:384])
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
- Unpack and interleave 8-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[71:64]
- dst[15:8] := src2[71:64]
- dst[23:16] := src1[79:72]
- dst[31:24] := src2[79:72]
- dst[39:32] := src1[87:80]
- dst[47:40] := src2[87:80]
- dst[55:48] := src1[95:88]
- dst[63:56] := src2[95:88]
- dst[71:64] := src1[103:96]
- dst[79:72] := src2[103:96]
- dst[87:80] := src1[111:104]
- dst[95:88] := src2[111:104]
- dst[103:96] := src1[119:112]
- dst[111:104] := src2[119:112]
- dst[119:112] := src1[127:120]
- dst[127:120] := src2[127:120]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_HIGH_BYTES(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_HIGH_BYTES(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 8-bit integers from the high half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[71:64]
- dst[15:8] := src2[71:64]
- dst[23:16] := src1[79:72]
- dst[31:24] := src2[79:72]
- dst[39:32] := src1[87:80]
- dst[47:40] := src2[87:80]
- dst[55:48] := src1[95:88]
- dst[63:56] := src2[95:88]
- dst[71:64] := src1[103:96]
- dst[79:72] := src2[103:96]
- dst[87:80] := src1[111:104]
- dst[95:88] := src2[111:104]
- dst[103:96] := src1[119:112]
- dst[111:104] := src2[119:112]
- dst[119:112] := src1[127:120]
- dst[127:120] := src2[127:120]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 8-bit integers from the high half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[71:64]
- dst[15:8] := src2[71:64]
- dst[23:16] := src1[79:72]
- dst[31:24] := src2[79:72]
- dst[39:32] := src1[87:80]
- dst[47:40] := src2[87:80]
- dst[55:48] := src1[95:88]
- dst[63:56] := src2[95:88]
- dst[71:64] := src1[103:96]
- dst[79:72] := src2[103:96]
- dst[87:80] := src1[111:104]
- dst[95:88] := src2[111:104]
- dst[103:96] := src1[119:112]
- dst[111:104] := src2[119:112]
- dst[119:112] := src1[127:120]
- dst[127:120] := src2[127:120]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 16-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[79:64]
- dst[31:16] := src2[79:64]
- dst[47:32] := src1[95:80]
- dst[63:48] := src2[95:80]
- dst[79:64] := src1[111:96]
- dst[95:80] := src2[111:96]
- dst[111:96] := src1[127:112]
- dst[127:112] := src2[127:112]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 16-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[79:64]
- dst[31:16] := src2[79:64]
- dst[47:32] := src1[95:80]
- dst[63:48] := src2[95:80]
- dst[79:64] := src1[111:96]
- dst[95:80] := src2[111:96]
- dst[111:96] := src1[127:112]
- dst[127:112] := src2[127:112]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 16-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[79:64]
- dst[31:16] := src2[79:64]
- dst[47:32] := src1[95:80]
- dst[63:48] := src2[95:80]
- dst[79:64] := src1[111:96]
- dst[95:80] := src2[111:96]
- dst[111:96] := src1[127:112]
- dst[127:112] := src2[127:112]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_WORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_WORDS(a[511:384], b[511:384])
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 16-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[79:64]
- dst[31:16] := src2[79:64]
- dst[47:32] := src1[95:80]
- dst[63:48] := src2[95:80]
- dst[79:64] := src1[111:96]
- dst[95:80] := src2[111:96]
- dst[111:96] := src1[127:112]
- dst[127:112] := src2[127:112]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_WORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_WORDS(a[511:384], b[511:384])
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
- Unpack and interleave 16-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[79:64]
- dst[31:16] := src2[79:64]
- dst[47:32] := src1[95:80]
- dst[63:48] := src2[95:80]
- dst[79:64] := src1[111:96]
- dst[95:80] := src2[111:96]
- dst[111:96] := src1[127:112]
- dst[127:112] := src2[127:112]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_HIGH_WORDS(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_HIGH_WORDS(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 16-bit integers from the high half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[79:64]
- dst[31:16] := src2[79:64]
- dst[47:32] := src1[95:80]
- dst[63:48] := src2[95:80]
- dst[79:64] := src1[111:96]
- dst[95:80] := src2[111:96]
- dst[111:96] := src1[127:112]
- dst[127:112] := src2[127:112]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 16-bit integers from the high half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[79:64]
- dst[31:16] := src2[79:64]
- dst[47:32] := src1[95:80]
- dst[63:48] := src2[95:80]
- dst[79:64] := src1[111:96]
- dst[95:80] := src2[111:96]
- dst[111:96] := src1[127:112]
- dst[127:112] := src2[127:112]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 8-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[7:0]
- dst[15:8] := src2[7:0]
- dst[23:16] := src1[15:8]
- dst[31:24] := src2[15:8]
- dst[39:32] := src1[23:16]
- dst[47:40] := src2[23:16]
- dst[55:48] := src1[31:24]
- dst[63:56] := src2[31:24]
- dst[71:64] := src1[39:32]
- dst[79:72] := src2[39:32]
- dst[87:80] := src1[47:40]
- dst[95:88] := src2[47:40]
- dst[103:96] := src1[55:48]
- dst[111:104] := src2[55:48]
- dst[119:112] := src1[63:56]
- dst[127:120] := src2[63:56]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 8-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[7:0]
- dst[15:8] := src2[7:0]
- dst[23:16] := src1[15:8]
- dst[31:24] := src2[15:8]
- dst[39:32] := src1[23:16]
- dst[47:40] := src2[23:16]
- dst[55:48] := src1[31:24]
- dst[63:56] := src2[31:24]
- dst[71:64] := src1[39:32]
- dst[79:72] := src2[39:32]
- dst[87:80] := src1[47:40]
- dst[95:88] := src2[47:40]
- dst[103:96] := src1[55:48]
- dst[111:104] := src2[55:48]
- dst[119:112] := src1[63:56]
- dst[127:120] := src2[63:56]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 8-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[7:0]
- dst[15:8] := src2[7:0]
- dst[23:16] := src1[15:8]
- dst[31:24] := src2[15:8]
- dst[39:32] := src1[23:16]
- dst[47:40] := src2[23:16]
- dst[55:48] := src1[31:24]
- dst[63:56] := src2[31:24]
- dst[71:64] := src1[39:32]
- dst[79:72] := src2[39:32]
- dst[87:80] := src1[47:40]
- dst[95:88] := src2[47:40]
- dst[103:96] := src1[55:48]
- dst[111:104] := src2[55:48]
- dst[119:112] := src1[63:56]
- dst[127:120] := src2[63:56]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_BYTES(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_BYTES(a[511:384], b[511:384])
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 8-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[7:0]
- dst[15:8] := src2[7:0]
- dst[23:16] := src1[15:8]
- dst[31:24] := src2[15:8]
- dst[39:32] := src1[23:16]
- dst[47:40] := src2[23:16]
- dst[55:48] := src1[31:24]
- dst[63:56] := src2[31:24]
- dst[71:64] := src1[39:32]
- dst[79:72] := src2[39:32]
- dst[87:80] := src1[47:40]
- dst[95:88] := src2[47:40]
- dst[103:96] := src1[55:48]
- dst[111:104] := src2[55:48]
- dst[119:112] := src1[63:56]
- dst[127:120] := src2[63:56]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_BYTES(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_BYTES(a[511:384], b[511:384])
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
- Unpack and interleave 8-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[7:0]
- dst[15:8] := src2[7:0]
- dst[23:16] := src1[15:8]
- dst[31:24] := src2[15:8]
- dst[39:32] := src1[23:16]
- dst[47:40] := src2[23:16]
- dst[55:48] := src1[31:24]
- dst[63:56] := src2[31:24]
- dst[71:64] := src1[39:32]
- dst[79:72] := src2[39:32]
- dst[87:80] := src1[47:40]
- dst[95:88] := src2[47:40]
- dst[103:96] := src1[55:48]
- dst[111:104] := src2[55:48]
- dst[119:112] := src1[63:56]
- dst[127:120] := src2[63:56]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_BYTES(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_BYTES(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 8-bit integers from the low half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[7:0]
- dst[15:8] := src2[7:0]
- dst[23:16] := src1[15:8]
- dst[31:24] := src2[15:8]
- dst[39:32] := src1[23:16]
- dst[47:40] := src2[23:16]
- dst[55:48] := src1[31:24]
- dst[63:56] := src2[31:24]
- dst[71:64] := src1[39:32]
- dst[79:72] := src2[39:32]
- dst[87:80] := src1[47:40]
- dst[95:88] := src2[47:40]
- dst[103:96] := src1[55:48]
- dst[111:104] := src2[55:48]
- dst[119:112] := src1[63:56]
- dst[127:120] := src2[63:56]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 8-bit integers from the low half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[7:0]
- dst[15:8] := src2[7:0]
- dst[23:16] := src1[15:8]
- dst[31:24] := src2[15:8]
- dst[39:32] := src1[23:16]
- dst[47:40] := src2[23:16]
- dst[55:48] := src1[31:24]
- dst[63:56] := src2[31:24]
- dst[71:64] := src1[39:32]
- dst[79:72] := src2[39:32]
- dst[87:80] := src1[47:40]
- dst[95:88] := src2[47:40]
- dst[103:96] := src1[55:48]
- dst[111:104] := src2[55:48]
- dst[119:112] := src1[63:56]
- dst[127:120] := src2[63:56]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := tmp_dst[i+7:i]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 16-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[15:0]
- dst[31:16] := src2[15:0]
- dst[47:32] := src1[31:16]
- dst[63:48] := src2[31:16]
- dst[79:64] := src1[47:32]
- dst[95:80] := src2[47:32]
- dst[111:96] := src1[63:48]
- dst[127:112] := src2[63:48]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 16-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[15:0]
- dst[31:16] := src2[15:0]
- dst[47:32] := src1[31:16]
- dst[63:48] := src2[31:16]
- dst[79:64] := src1[47:32]
- dst[95:80] := src2[47:32]
- dst[111:96] := src1[63:48]
- dst[127:112] := src2[63:48]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 16-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[15:0]
- dst[31:16] := src2[15:0]
- dst[47:32] := src1[31:16]
- dst[63:48] := src2[31:16]
- dst[79:64] := src1[47:32]
- dst[95:80] := src2[47:32]
- dst[111:96] := src1[63:48]
- dst[127:112] := src2[63:48]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_WORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_WORDS(a[511:384], b[511:384])
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 16-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[15:0]
- dst[31:16] := src2[15:0]
- dst[47:32] := src1[31:16]
- dst[63:48] := src2[31:16]
- dst[79:64] := src1[47:32]
- dst[95:80] := src2[47:32]
- dst[111:96] := src1[63:48]
- dst[127:112] := src2[63:48]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_WORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_WORDS(a[511:384], b[511:384])
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Miscellaneous
-
-
-
- Unpack and interleave 16-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[15:0]
- dst[31:16] := src2[15:0]
- dst[47:32] := src1[31:16]
- dst[63:48] := src2[31:16]
- dst[79:64] := src1[47:32]
- dst[95:80] := src2[47:32]
- dst[111:96] := src1[63:48]
- dst[127:112] := src2[63:48]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_WORDS(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_WORDS(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 16-bit integers from the low half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[15:0]
- dst[31:16] := src2[15:0]
- dst[47:32] := src1[31:16]
- dst[63:48] := src2[31:16]
- dst[79:64] := src1[47:32]
- dst[95:80] := src2[47:32]
- dst[111:96] := src1[63:48]
- dst[127:112] := src2[63:48]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Miscellaneous
-
-
-
-
- Unpack and interleave 16-bit integers from the low half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[15:0]
- dst[31:16] := src2[15:0]
- dst[47:32] := src1[31:16]
- dst[63:48] := src2[31:16]
- dst[79:64] := src1[47:32]
- dst[95:80] := src2[47:32]
- dst[111:96] := src1[63:48]
- dst[127:112] := src2[63:48]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := tmp_dst[i+15:i]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Store
-
-
-
- Store 512-bits (composed of 32 packed 16-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Integer
- AVX512BW
- Store
-
-
-
- Store 512-bits (composed of 64 packed 8-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Store
-
-
-
- Store 256-bits (composed of 16 packed 16-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Store
-
-
-
- Store 256-bits (composed of 32 packed 8-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Store
-
-
-
- Store 128-bits (composed of 8 packed 16-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Store
-
-
-
- Store 128-bits (composed of 16 packed 8-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Integer
- AVX512BW
- Load
-
-
- Load 512-bits (composed of 32 packed 16-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512BW
- Load
-
-
- Load 512-bits (composed of 64 packed 8-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
- Load 256-bits (composed of 16 packed 16-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
- Load 256-bits (composed of 32 packed 8-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
- Load 128-bits (composed of 8 packed 16-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512BW
- Load
-
-
- Load 128-bits (composed of 16 packed 8-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-dst[MAX:128] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Add 32-bit masks in "a" and "b", and store the result in "k".
-
-k[31:0] := a[31:0] + b[31:0]
-k[MAX:32] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Add 64-bit masks in "a" and "b", and store the result in "k".
-
-k[63:0] := a[63:0] + b[63:0]
-k[MAX:64] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise AND of 32-bit masks "a" and "b", and store the result in "k".
-
-k[31:0] := a[31:0] AND b[31:0]
-k[MAX:32] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise AND of 64-bit masks "a" and "b", and store the result in "k".
-
-k[63:0] := a[63:0] AND b[63:0]
-k[MAX:64] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise NOT of 32-bit masks "a" and then AND with "b", and store the result in "k".
-
-k[31:0] := (NOT a[31:0]) AND b[31:0]
-k[MAX:32] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise NOT of 64-bit masks "a" and then AND with "b", and store the result in "k".
-
-k[63:0] := (NOT a[63:0]) AND b[63:0]
-k[MAX:64] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
- Compute the bitwise NOT of 32-bit mask "a", and store the result in "k".
-
-k[31:0] := NOT a[31:0]
-k[MAX:32] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
- Compute the bitwise NOT of 64-bit mask "a", and store the result in "k".
-
-k[63:0] := NOT a[63:0]
-k[MAX:64] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise OR of 32-bit masks "a" and "b", and store the result in "k".
-
-k[31:0] := a[31:0] OR b[31:0]
-k[MAX:32] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise OR of 64-bit masks "a" and "b", and store the result in "k".
-
-k[63:0] := a[63:0] OR b[63:0]
-k[MAX:64] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise XNOR of 32-bit masks "a" and "b", and store the result in "k".
-
-k[31:0] := NOT (a[31:0] XOR b[31:0])
-k[MAX:32] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise XNOR of 64-bit masks "a" and "b", and store the result in "k".
-
-k[63:0] := NOT (a[63:0] XOR b[63:0])
-k[MAX:64] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise XOR of 32-bit masks "a" and "b", and store the result in "k".
-
-k[31:0] := a[31:0] XOR b[31:0]
-k[MAX:32] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise XOR of 64-bit masks "a" and "b", and store the result in "k".
-
-k[63:0] := a[63:0] XOR b[63:0]
-k[MAX:64] := 0
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Shift the bits of 32-bit mask "a" left by "count" while shifting in zeros, and store the least significant 32 bits of the result in "k".
-
-k[MAX:0] := 0
-IF count[7:0] <= 31
- k[31:0] := a[31:0] << count[7:0]
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Shift the bits of 64-bit mask "a" left by "count" while shifting in zeros, and store the least significant 64 bits of the result in "k".
-
-k[MAX:0] := 0
-IF count[7:0] <= 63
- k[63:0] := a[63:0] << count[7:0]
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Shift the bits of 32-bit mask "a" right by "count" while shifting in zeros, and store the least significant 32 bits of the result in "k".
-
-k[MAX:0] := 0
-IF count[7:0] <= 31
- k[31:0] := a[31:0] >> count[7:0]
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Shift the bits of 64-bit mask "a" right by "count" while shifting in zeros, and store the least significant 64 bits of the result in "k".
-
-k[MAX:0] := 0
-IF count[7:0] <= 63
- k[63:0] := a[63:0] >> count[7:0]
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Load
-
-
- Load 32-bit mask from memory into "k".
-
-k[31:0] := MEM[mem_addr+31:mem_addr]
-
-
-
-
-
- Mask
- AVX512BW
- Load
-
-
- Load 64-bit mask from memory into "k".
-
-k[63:0] := MEM[mem_addr+63:mem_addr]
-
-
-
-
-
- Mask
- AVX512BW
- Store
-
-
-
- Store 32-bit mask from "a" into memory.
-
-MEM[mem_addr+31:mem_addr] := a[31:0]
-
-
-
-
-
- Mask
- AVX512BW
- Store
-
-
-
- Store 64-bit mask from "a" into memory.
-
-MEM[mem_addr+63:mem_addr] := a[63:0]
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
-
- Compute the bitwise OR of 32-bit masks "a" and "b". If the result is all zeros, store 1 in "dst", otherwise store 0 in "dst". If the result is all ones, store 1 in "all_ones", otherwise store 0 in "all_ones".
-
-tmp[31:0] := a[31:0] OR b[31:0]
-IF tmp[31:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-IF tmp[31:0] == 0xFFFFFFFF
- MEM[all_ones+7:all_ones] := 1
-ELSE
- MEM[all_ones+7:all_ones] := 0
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise OR of 32-bit masks "a" and "b". If the result is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[31:0] := a[31:0] OR b[31:0]
-IF tmp[31:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise OR of 32-bit masks "a" and "b". If the result is all ones, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[31:0] := a[31:0] OR b[31:0]
-IF tmp[31:0] == 0xFFFFFFFF
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
-
- Compute the bitwise OR of 64-bit masks "a" and "b". If the result is all zeros, store 1 in "dst", otherwise store 0 in "dst". If the result is all ones, store 1 in "all_ones", otherwise store 0 in "all_ones".
-
-tmp[63:0] := a[63:0] OR b[63:0]
-IF tmp[63:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-IF tmp[7:0] == 0xFFFFFFFFFFFFFFFF
- MEM[all_ones+7:all_ones] := 1
-ELSE
- MEM[all_ones+7:all_ones] := 0
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise OR of 64-bit masks "a" and "b". If the result is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[63:0] := a[63:0] OR b[63:0]
-IF tmp[63:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise OR of 64-bit masks "a" and "b". If the result is all ones, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[63:0] := a[63:0] OR b[63:0]
-IF tmp[63:0] == 0xFFFFFFFFFFFFFFFF
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
-
- Compute the bitwise AND of 32-bit masks "a" and "b", and if the result is all zeros, store 1 in "dst", otherwise store 0 in "dst". Compute the bitwise NOT of "a" and then AND with "b", if the result is all zeros, store 1 in "and_not", otherwise store 0 in "and_not".
-
-tmp1[31:0] := a[31:0] AND b[31:0]
-IF tmp1[31:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-tmp2[31:0] := (NOT a[31:0]) AND b[31:0]
-IF tmp2[31:0] == 0x0
- MEM[and_not+7:and_not] := 1
-ELSE
- MEM[and_not+7:and_not] := 0
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise AND of 32-bit masks "a" and "b", and if the result is all zeros, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[31:0] := a[31:0] AND b[31:0]
-IF tmp[31:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise NOT of 32-bit mask "a" and then AND with "b", if the result is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[31:0] := (NOT a[31:0]) AND b[31:0]
-IF tmp[31:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
-
- Compute the bitwise AND of 64-bit masks "a" and "b", and if the result is all zeros, store 1 in "dst", otherwise store 0 in "dst". Compute the bitwise NOT of "a" and then AND with "b", if the result is all zeros, store 1 in "and_not", otherwise store 0 in "and_not".
-
-tmp1[63:0] := a[63:0] AND b[63:0]
-IF tmp1[63:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-tmp2[63:0] := (NOT a[63:0]) AND b[63:0]
-IF tmp2[63:0] == 0x0
- MEM[and_not+7:and_not] := 1
-ELSE
- MEM[and_not+7:and_not] := 0
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise AND of 64-bit masks "a" and "b", and if the result is all zeros, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[63:0] := a[63:0] AND b[63:0]
-IF tmp[63:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512BW
- Mask
-
-
-
- Compute the bitwise NOT of 64-bit mask "a" and then AND with "b", if the result is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[63:0] := (NOT a[63:0]) AND b[63:0]
-IF tmp[63:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- AVX512BW
- Mask
-
-
- Convert 32-bit mask "a" into an integer value, and store the result in "dst".
-
-dst := ZeroExtend32(a[31:0])
-
-
-
-
-
- AVX512BW
- Mask
-
-
- Convert 64-bit mask "a" into an integer value, and store the result in "dst".
-
-dst := ZeroExtend64(a[63:0])
-
-
-
-
-
- AVX512BW
- Mask
-
-
- Convert integer value "a" into an 32-bit mask, and store the result in "k".
-
-k := ZeroExtend32(a[31:0])
-
-
-
-
-
- AVX512BW
- Mask
-
-
- Convert integer value "a" into an 64-bit mask, and store the result in "k".
-
-k := ZeroExtend64(a[63:0])
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Miscellaneous
-
-
- Broadcast the low 8-bits from input mask "k" to all 64-bit elements of "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ZeroExtend64(k[7:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Miscellaneous
-
-
- Broadcast the low 8-bits from input mask "k" to all 64-bit elements of "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ZeroExtend64(k[7:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Miscellaneous
-
-
- Broadcast the low 16-bits from input mask "k" to all 32-bit elements of "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ZeroExtend32(k[15:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Miscellaneous
-
-
- Broadcast the low 16-bits from input mask "k" to all 32-bit elements of "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ZeroExtend32(k[15:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
- Test each 32-bit element of "a" for equality with all other elements in "a" closer to the least significant bit. Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 7
- i := j*32
- FOR k := 0 to j-1
- m := k*32
- dst[i+k] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
- ENDFOR
- dst[i+31:i+j] := 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
-
-
- Test each 32-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- FOR l := 0 to j-1
- m := l*32
- dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
- ENDFOR
- dst[i+31:i+j] := 0
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
-
- Test each 32-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- FOR l := 0 to j-1
- m := l*32
- dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
- ENDFOR
- dst[i+31:i+j] := 0
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
- Test each 32-bit element of "a" for equality with all other elements in "a" closer to the least significant bit. Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 3
- i := j*32
- FOR k := 0 to j-1
- m := k*32
- dst[i+k] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
- ENDFOR
- dst[i+31:i+j] := 0
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
-
-
- Test each 32-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- FOR l := 0 to j-1
- m := l*32
- dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
- ENDFOR
- dst[i+31:i+j] := 0
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
-
- Test each 32-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- FOR l := 0 to j-1
- m := l*32
- dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
- ENDFOR
- dst[i+31:i+j] := 0
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
- Test each 64-bit element of "a" for equality with all other elements in "a" closer to the least significant bit. Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 3
- i := j*64
- FOR k := 0 to j-1
- m := k*64
- dst[i+k] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
- ENDFOR
- dst[i+63:i+j] := 0
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
-
-
- Test each 64-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- FOR l := 0 to j-1
- m := l*64
- dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
- ENDFOR
- dst[i+63:i+j] := 0
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
-
- Test each 64-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- FOR l := 0 to j-1
- m := l*64
- dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
- ENDFOR
- dst[i+63:i+j] := 0
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
- Test each 64-bit element of "a" for equality with all other elements in "a" closer to the least significant bit. Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 1
- i := j*64
- FOR k := 0 to j-1
- m := k*64
- dst[i+k] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
- ENDFOR
- dst[i+63:i+j] := 0
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
-
-
- Test each 64-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- FOR l := 0 to j-1
- m := l*64
- dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
- ENDFOR
- dst[i+63:i+j] := 0
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Compare
-
-
-
- Test each 64-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- FOR l := 0 to j-1
- m := l*64
- dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
- ENDFOR
- dst[i+63:i+j] := 0
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
- Counts the number of leading zero bits in each packed 32-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- tmp := 31
- dst[i+31:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+31:i] := dst[i+31:i] + 1
- OD
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
-
-
- Counts the number of leading zero bits in each packed 32-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- tmp := 31
- dst[i+31:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+31:i] := dst[i+31:i] + 1
- OD
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
-
- Counts the number of leading zero bits in each packed 32-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- tmp := 31
- dst[i+31:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+31:i] := dst[i+31:i] + 1
- OD
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
- Counts the number of leading zero bits in each packed 32-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- tmp := 31
- dst[i+31:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+31:i] := dst[i+31:i] + 1
- OD
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
-
-
- Counts the number of leading zero bits in each packed 32-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- tmp := 31
- dst[i+31:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+31:i] := dst[i+31:i] + 1
- OD
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
-
- Counts the number of leading zero bits in each packed 32-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- tmp := 31
- dst[i+31:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+31:i] := dst[i+31:i] + 1
- OD
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
- Counts the number of leading zero bits in each packed 64-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- tmp := 63
- dst[i+63:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+63:i] := dst[i+63:i] + 1
- OD
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
-
-
- Counts the number of leading zero bits in each packed 64-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp := 63
- dst[i+63:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+63:i] := dst[i+63:i] + 1
- OD
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
-
- Counts the number of leading zero bits in each packed 64-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp := 63
- dst[i+63:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+63:i] := dst[i+63:i] + 1
- OD
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
- Counts the number of leading zero bits in each packed 64-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- tmp := 63
- dst[i+63:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+63:i] := dst[i+63:i] + 1
- OD
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
-
-
- Counts the number of leading zero bits in each packed 64-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp := 63
- dst[i+63:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+63:i] := dst[i+63:i] + 1
- OD
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512CD
- Bit Manipulation
-
-
-
- Counts the number of leading zero bits in each packed 64-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp := 63
- dst[i+63:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+63:i] := dst[i+63:i] + 1
- OD
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Swizzle
-
-
- Broadcast the low 8-bits from input mask "k" to all 64-bit elements of "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ZeroExtend64(k[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Swizzle
-
-
- Broadcast the low 16-bits from input mask "k" to all 32-bit elements of "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ZeroExtend32(k[15:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Compare
-
-
- Test each 32-bit element of "a" for equality with all other elements in "a" closer to the least significant bit. Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 15
- i := j*32
- FOR k := 0 to j-1
- m := k*32
- dst[i+k] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
- ENDFOR
- dst[i+31:i+j] := 0
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Compare
-
-
-
-
- Test each 32-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- FOR l := 0 to j-1
- m := l*32
- dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
- ENDFOR
- dst[i+31:i+j] := 0
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Compare
-
-
-
- Test each 32-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- FOR l := 0 to j-1
- m := l*32
- dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
- ENDFOR
- dst[i+31:i+j] := 0
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Compare
-
-
- Test each 64-bit element of "a" for equality with all other elements in "a" closer to the least significant bit. Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 7
- i := j*64
- FOR k := 0 to j-1
- m := k*64
- dst[i+k] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
- ENDFOR
- dst[i+63:i+j] := 0
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Compare
-
-
-
-
- Test each 64-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- FOR l := 0 to j-1
- m := l*64
- dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
- ENDFOR
- dst[i+63:i+j] := 0
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Compare
-
-
-
- Test each 64-bit element of "a" for equality with all other elements in "a" closer to the least significant bit using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). Each element's comparison forms a zero extended bit vector in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- FOR l := 0 to j-1
- m := l*64
- dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
- ENDFOR
- dst[i+63:i+j] := 0
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Bit Manipulation
-
-
- Counts the number of leading zero bits in each packed 32-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- tmp := 31
- dst[i+31:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+31:i] := dst[i+31:i] + 1
- OD
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Bit Manipulation
-
-
-
-
- Counts the number of leading zero bits in each packed 32-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- tmp := 31
- dst[i+31:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+31:i] := dst[i+31:i] + 1
- OD
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Bit Manipulation
-
-
-
- Counts the number of leading zero bits in each packed 32-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- tmp := 31
- dst[i+31:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+31:i] := dst[i+31:i] + 1
- OD
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Bit Manipulation
-
-
- Counts the number of leading zero bits in each packed 64-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- tmp := 63
- dst[i+63:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+63:i] := dst[i+63:i] + 1
- OD
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Bit Manipulation
-
-
-
-
- Counts the number of leading zero bits in each packed 64-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp := 63
- dst[i+63:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+63:i] := dst[i+63:i] + 1
- OD
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512CD
- Bit Manipulation
-
-
-
- Counts the number of leading zero bits in each packed 64-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp := 63
- dst[i+63:i] := 0
- DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
- tmp := tmp - 1
- dst[i+63:i] := dst[i+63:i] + 1
- OD
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed double-precision (64-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise NOT of packed double-precision (64-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
- Compute the bitwise NOT of packed double-precision (64-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed double-precision (64-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise NOT of packed double-precision (64-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed double-precision (64-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise NOT of packed double-precision (64-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed single-precision (32-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise NOT of packed single-precision (32-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
- Compute the bitwise NOT of packed single-precision (32-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed single-precision (32-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise NOT of packed single-precision (32-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed single-precision (32-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise NOT of packed single-precision (32-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise AND of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise AND of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
- Compute the bitwise AND of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise AND of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise AND of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise AND of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise AND of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise AND of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise AND of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
- Compute the bitwise AND of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise AND of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise AND of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise AND of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise AND of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Broadcast the lower 2 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 2)*32
- dst[i+31:i] := a[n+31:n]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Broadcast the lower 2 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 2)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Broadcast the lower 2 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 2)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
- Broadcast the lower 2 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst".
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 2)*32
- dst[i+31:i] := a[n+31:n]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Broadcast the lower 2 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 2)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
- Broadcast the lower 2 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 2)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
- Broadcast the 8 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst".
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 8)*32
- dst[i+31:i] := a[n+31:n]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Broadcast the 8 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 8)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
- Broadcast the 8 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 8)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Broadcast the 2 packed double-precision (64-bit) floating-point elements from "a" to all elements of "dst".
-
-FOR j := 0 to 3
- i := j*64
- n := (j % 2)*64
- dst[i+63:i] := a[n+63:n]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Broadcast the 2 packed double-precision (64-bit) floating-point elements from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- n := (j % 2)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Broadcast the 2 packed double-precision (64-bit) floating-point elements from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- n := (j % 2)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
- Broadcast the 2 packed double-precision (64-bit) floating-point elements from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 2)*64
- dst[i+63:i] := a[n+63:n]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Broadcast the 2 packed double-precision (64-bit) floating-point elements from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 2)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
- Broadcast the 2 packed double-precision (64-bit) floating-point elements from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 2)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst.
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 2)*32
- dst[i+31:i] := a[n+31:n]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 2)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 2)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
- Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst.
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 2)*32
- dst[i+31:i] := a[n+31:n]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
-
- Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 2)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
- Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 2)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst.
-
-FOR j := 0 to 3
- i := j*32
- n := (j % 2)*32
- dst[i+31:i] := a[n+31:n]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- n := (j % 2)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- n := (j % 2)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
- Broadcast the 8 packed 32-bit integers from "a" to all elements of "dst".
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 8)*32
- dst[i+31:i] := a[n+31:n]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
-
- Broadcast the 8 packed 32-bit integers from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 8)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
- Broadcast the 8 packed 32-bit integers from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 8)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst".
-
-FOR j := 0 to 3
- i := j*64
- n := (j % 2)*64
- dst[i+63:i] := a[n+63:n]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- n := (j % 2)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- n := (j % 2)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
- Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 2)*64
- dst[i+63:i] := a[n+63:n]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
-
- Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 2)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
- Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 2)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512DQ
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512DQ
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
- Extract 256 bits (composed of 8 packed single-precision (32-bit) floating-point elements) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[255:0] := a[255:0]
-1: dst[255:0] := a[511:256]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract 256 bits (composed of 8 packed single-precision (32-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[255:0] := a[255:0]
-1: tmp[255:0] := a[511:256]
-ESAC
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract 256 bits (composed of 8 packed single-precision (32-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[255:0] := a[255:0]
-1: tmp[255:0] := a[511:256]
-ESAC
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-ESAC
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-ESAC
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
- Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[1:0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-2: dst[127:0] := a[383:256]
-3: dst[127:0] := a[511:384]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[1:0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-2: tmp[127:0] := a[383:256]
-3: tmp[127:0] := a[511:384]
-ESAC
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[1:0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-2: tmp[127:0] := a[383:256]
-3: tmp[127:0] := a[511:384]
-ESAC
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512DQ
- Miscellaneous
-
-
-
- Extract 256 bits (composed of 8 packed 32-bit integers) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[255:0] := a[255:0]
-1: dst[255:0] := a[511:256]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract 256 bits (composed of 8 packed 32-bit integers) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[255:0] := a[255:0]
-1: tmp[255:0] := a[511:256]
-ESAC
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract 256 bits (composed of 8 packed 32-bit integers) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[255:0] := a[255:0]
-1: tmp[255:0] := a[511:256]
-ESAC
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-ESAC
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-ESAC
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512DQ
- Miscellaneous
-
-
-
- Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[1:0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-2: dst[127:0] := a[383:256]
-3: dst[127:0] := a[511:384]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[1:0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-2: tmp[127:0] := a[383:256]
-3: tmp[127:0] := a[511:384]
-ESAC
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[1:0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-2: tmp[127:0] := a[383:256]
-3: tmp[127:0] := a[511:384]
-ESAC
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Test packed double-precision (64-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k".
- [fpclass_note]
- FOR j := 0 to 3
- i := j*64
- k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Test packed double-precision (64-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- [fpclass_note]
- FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512DQ
- Miscellaneous
-
-
-
- Test packed double-precision (64-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k".
- [fpclass_note]
- FOR j := 0 to 7
- i := j*64
- k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512DQ
- Miscellaneous
-
-
-
-
- Test packed double-precision (64-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- [fpclass_note]
- FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Test packed double-precision (64-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k".
- [fpclass_note]
- FOR j := 0 to 1
- i := j*64
- k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Test packed double-precision (64-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- [fpclass_note]
- FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Test packed single-precision (32-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k".
- [fpclass_note]
- FOR j := 0 to 7
- i := j*32
- k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Test packed single-precision (32-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- [fpclass_note]
- FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512DQ
- Miscellaneous
-
-
-
- Test packed single-precision (32-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k".
- [fpclass_note]
- FOR j := 0 to 15
- i := j*32
- k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512DQ
- Miscellaneous
-
-
-
-
- Test packed single-precision (32-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- [fpclass_note]
- FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Test packed single-precision (32-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k".
- [fpclass_note]
- FOR j := 0 to 3
- i := j*32
- k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Test packed single-precision (32-bit) floating-point elements in "a" for special categories specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- [fpclass_note]
- FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512DQ
- Miscellaneous
-
-
-
- Test the lower double-precision (64-bit) floating-point element in "a" for special categories specified by "imm8", and store the result in mask vector "k".
- [fpclass_note]
- k[0] := CheckFPClass_FP64(a[63:0], imm8[7:0])
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512DQ
- Miscellaneous
-
-
-
-
- Test the lower double-precision (64-bit) floating-point element in "a" for special categories specified by "imm8", and store the result in mask vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
- [fpclass_note]
- IF k1[0]
- k[0] := CheckFPClass_FP64(a[63:0], imm8[7:0])
-ELSE
- k[0] := 0
-FI
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512DQ
- Miscellaneous
-
-
-
- Test the lower single-precision (32-bit) floating-point element in "a" for special categories specified by "imm8", and store the result in mask vector "k.
- [fpclass_note]
- k[0] := CheckFPClass_FP32(a[31:0], imm8[7:0])
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512DQ
- Miscellaneous
-
-
-
-
- Test the lower single-precision (32-bit) floating-point element in "a" for special categories specified by "imm8", and store the result in mask vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
- [fpclass_note]
- IF k1[0]
- k[0] := CheckFPClass_FP32(a[31:0], imm8[7:0])
-ELSE
- k[0] := 0
-FI
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Copy "a" to "dst", then insert 256 bits (composed of 8 packed single-precision (32-bit) floating-point elements) from "b" into "dst" at the location specified by "imm8".
-
-dst[511:0] := a[511:0]
-CASE (imm8[0]) OF
-0: dst[255:0] := b[255:0]
-1: dst[511:256] := b[255:0]
-ESAC
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 256 bits (composed of 8 packed single-precision (32-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[0]) OF
-0: tmp[255:0] := b[255:0]
-1: tmp[511:256] := b[255:0]
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Copy "a" to "tmp", then insert 256 bits (composed of 8 packed single-precision (32-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[0]) OF
-0: tmp[255:0] := b[255:0]
-1: tmp[511:256] := b[255:0]
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Copy "a" to "dst", then insert 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "b" into "dst" at the location specified by "imm8".
-
-dst[255:0] := a[255:0]
-CASE imm8[0] OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-ESAC
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-ESAC
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Copy "a" to "dst", then insert 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "b" into "dst" at the location specified by "imm8".
-
-dst[511:0] := a[511:0]
-CASE imm8[1:0] OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-2: dst[383:256] := b[127:0]
-3: dst[511:384] := b[127:0]
-ESAC
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[1:0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-2: tmp[383:256] := b[127:0]
-3: tmp[511:384] := b[127:0]
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[1:0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-2: tmp[383:256] := b[127:0]
-3: tmp[511:384] := b[127:0]
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
-
- Copy "a" to "dst", then insert 256 bits (composed of 8 packed 32-bit integers) from "b" into "dst" at the location specified by "imm8".
-
-dst[511:0] := a[511:0]
-CASE imm8[0] OF
-0: dst[255:0] := b[255:0]
-1: dst[511:256] := b[255:0]
-ESAC
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 256 bits (composed of 8 packed 32-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[0]) OF
-0: tmp[255:0] := b[255:0]
-1: tmp[511:256] := b[255:0]
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Copy "a" to "tmp", then insert 256 bits (composed of 8 packed 32-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[0]) OF
-0: tmp[255:0] := b[255:0]
-1: tmp[511:256] := b[255:0]
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Copy "a" to "dst", then insert 128 bits (composed of 2 packed 64-bit integers) from "b" into "dst" at the location specified by "imm8".
-
-dst[255:0] := a[255:0]
-CASE imm8[0] OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 2 packed 64-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-ESAC
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 2 packed 64-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-ESAC
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
-
- Copy "a" to "dst", then insert 128 bits (composed of 2 packed 64-bit integers) from "b" into "dst" at the location specified by "imm8".
-
-dst[511:0] := a[511:0]
-CASE imm8[1:0] OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-2: dst[383:256] := b[127:0]
-3: dst[511:384] := b[127:0]
-ESAC
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 2 packed 64-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[1:0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-2: tmp[383:256] := b[127:0]
-3: tmp[511:384] := b[127:0]
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 2 packed 64-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[1:0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-2: tmp[383:256] := b[127:0]
-3: tmp[511:384] := b[127:0]
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise OR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise OR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
- Compute the bitwise OR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise OR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise OR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise OR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
- Compute the bitwise OR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise OR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 32-bit integer in "a".
-
-FOR j := 0 to 7
- i := j*32
- IF a[i+31]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512DQ
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 32-bit integer in "a".
-
-FOR j := 0 to 15
- i := j*32
- IF a[i+31]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 32-bit integer in "a".
-
-FOR j := 0 to 3
- i := j*32
- IF a[i+31]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Set each packed 32-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := 0xFFFFFFFF
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512DQ
- Miscellaneous
-
-
- Set each packed 32-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := 0xFFFFFFFF
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Set each packed 32-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := 0xFFFFFFFF
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Set each packed 64-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := 0xFFFFFFFFFFFFFFFF
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512DQ
- Miscellaneous
-
-
- Set each packed 64-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := 0xFFFFFFFFFFFFFFFF
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Set each packed 64-bit integer in "dst" to all ones or all zeros based on the value of the corresponding bit in "k".
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := 0xFFFFFFFFFFFFFFFF
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 64-bit integer in "a".
-
-FOR j := 0 to 3
- i := j*64
- IF a[i+63]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512DQ
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 64-bit integer in "a".
-
-FOR j := 0 to 7
- i := j*64
- IF a[i+63]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
- Set each bit of mask register "k" based on the most significant bit of the corresponding packed 64-bit integer in "a".
-
-FOR j := 0 to 1
- i := j*64
- IF a[i+63]
- k[j] := 1
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Arithmetic
-
-
-
-
-
- Multiply the packed 64-bit integers in "a" and "b", producing intermediate 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp[127:0] := a[i+63:i] * b[i+63:i]
- dst[i+63:i] := tmp[63:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Arithmetic
-
-
-
-
- Multiply the packed 64-bit integers in "a" and "b", producing intermediate 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp[127:0] := a[i+63:i] * b[i+63:i]
- dst[i+63:i] := tmp[63:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Arithmetic
-
-
-
- Multiply the packed 64-bit integers in "a" and "b", producing intermediate 128-bit integers, and store the low 64 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 3
- i := j*64
- tmp[127:0] := a[i+63:i] * b[i+63:i]
- dst[i+63:i] := tmp[63:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512DQ
- Arithmetic
-
-
-
-
-
- Multiply the packed 64-bit integers in "a" and "b", producing intermediate 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp[127:0] := a[i+63:i] * b[i+63:i]
- dst[i+63:i] := tmp[63:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512DQ
- Arithmetic
-
-
-
-
- Multiply the packed 64-bit integers in "a" and "b", producing intermediate 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp[127:0] := a[i+63:i] * b[i+63:i]
- dst[i+63:i] := tmp[63:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512DQ
- Arithmetic
-
-
-
- Multiply the packed 64-bit integers in "a" and "b", producing intermediate 128-bit integers, and store the low 64 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 7
- i := j*64
- tmp[127:0] := a[i+63:i] * b[i+63:i]
- dst[i+63:i] := tmp[63:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Arithmetic
-
-
-
-
-
- Multiply the packed 64-bit integers in "a" and "b", producing intermediate 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp[127:0] := a[i+63:i] * b[i+63:i]
- dst[i+63:i] := tmp[63:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Arithmetic
-
-
-
-
- Multiply the packed 64-bit integers in "a" and "b", producing intermediate 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp[127:0] := a[i+63:i] * b[i+63:i]
- dst[i+63:i] := tmp[63:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512DQ
- Arithmetic
-
-
-
- Multiply the packed 64-bit integers in "a" and "b", producing intermediate 128-bit integers, and store the low 64 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 1
- i := j*64
- tmp[127:0] := a[i+63:i] * b[i+63:i]
- dst[i+63:i] := tmp[63:0]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[63:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-IF k[0]
- dst[63:0] := RANGE(a[63:0], b[63:0], imm8[1:0], imm8[3:2])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-IF k[0]
- dst[63:0] := RANGE(a[63:0], b[63:0], imm8[1:0], imm8[3:2])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-IF k[0]
- dst[63:0] := RANGE(a[63:0], b[63:0], imm8[1:0], imm8[3:2])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-IF k[0]
- dst[63:0] := RANGE(a[63:0], b[63:0], imm8[1:0], imm8[3:2])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
- 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
- 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
- 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
- 1: dst[63:0] := tmp[63:0]
- 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
- 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
- ESAC
-
- RETURN dst
-}
-dst[63:0] := RANGE(a[63:0], b[63:0], imm8[1:0], imm8[3:2])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[31:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-IF k[0]
- dst[31:0] := RANGE(a[31:0], b[31:0], imm8[1:0], imm8[3:2])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[31:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-IF k[0]
- dst[31:0] := RANGE(a[31:0], b[31:0], imm8[1:0], imm8[3:2])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[31:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-IF k[0]
- dst[31:0] := RANGE(a[31:0], b[31:0], imm8[1:0], imm8[3:2])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit.
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[31:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-IF k[0]
- dst[31:0] := RANGE(a[31:0], b[31:0], imm8[1:0], imm8[3:2])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Calculate the max, min, absolute max, or absolute min (depending on control in "imm8") for the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute max, 11 = absolute min.
- imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result, 10 = clear sign bit, 11 = set sign bit. [sae_note]
-
-DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
- CASE opCtl[1:0] OF
- 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
- 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
- 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
- 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
- ESAC
-
- CASE signSelCtl[1:0] OF
- 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
- 1: dst[31:0] := tmp[31:0]
- 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
- 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
- ESAC
-
- RETURN dst
-}
-dst[31:0] := RANGE(a[31:0], b[31:0], imm8[1:0], imm8[3:2])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst". [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Extract the reduced argument of packed double-precision (64-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- RETURN tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
-}
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst". [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Miscellaneous
-
-
-
- Extract the reduced argument of packed single-precision (32-bit) floating-point elements in "a" by the number of bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Extract the reduced argument of the lower double-precision (64-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-IF k[0]
- dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
-
- Extract the reduced argument of the lower double-precision (64-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-IF k[0]
- dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of the lower double-precision (64-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-IF k[0]
- dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Extract the reduced argument of the lower double-precision (64-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-IF k[0]
- dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract the reduced argument of the lower double-precision (64-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of the lower double-precision (64-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- tmp[63:0] := src1[63:0] - tmp[63:0]
- IF IsInf(tmp[63:0])
- tmp[63:0] := FP64(0.0)
- FI
- RETURN tmp[63:0]
-}
-dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Extract the reduced argument of the lower single-precision (32-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-IF k[0]
- dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
-
- Extract the reduced argument of the lower single-precision (32-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-IF k[0]
- dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of the lower single-precision (32-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-IF k[0]
- dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
-
- Extract the reduced argument of the lower single-precision (32-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-IF k[0]
- dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
- Extract the reduced argument of the lower single-precision (32-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Miscellaneous
-
-
-
-
-
- Extract the reduced argument of the lower single-precision (32-bit) floating-point element in "b" by the number of bits specified by "imm8", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note][sae_note]
-
-DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- tmp[31:0] := src1[31:0] - tmp[31:0]
- IF IsInf(tmp[31:0])
- tmp[31:0] := FP32(0.0)
- FI
- RETURN tmp[31:0]
-}
-dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise XOR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise XOR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
- Compute the bitwise XOR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise XOR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise XOR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise XOR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512DQ
- Logical
-
-
-
- Compute the bitwise XOR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512DQ
- Logical
-
-
-
-
- Compute the bitwise XOR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Add 8-bit masks in "a" and "b", and store the result in "k".
-
-k[7:0] := a[7:0] + b[7:0]
-k[MAX:8] := 0
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Add 16-bit masks in "a" and "b", and store the result in "k".
-
-k[15:0] := a[15:0] + b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Compute the bitwise AND of 8-bit masks "a" and "b", and store the result in "k".
-
-k[7:0] := a[7:0] AND b[7:0]
-k[MAX:8] := 0
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Compute the bitwise NOT of 8-bit masks "a" and then AND with "b", and store the result in "k".
-
-k[7:0] := (NOT a[7:0]) AND b[7:0]
-k[MAX:8] := 0
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
- Compute the bitwise NOT of 8-bit mask "a", and store the result in "k".
-
-k[7:0] := NOT a[7:0]
-k[MAX:8] := 0
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Compute the bitwise OR of 8-bit masks "a" and "b", and store the result in "k".
-
-k[7:0] := a[7:0] OR b[7:0]
-k[MAX:8] := 0
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Compute the bitwise XNOR of 8-bit masks "a" and "b", and store the result in "k".
-
-k[7:0] := NOT (a[7:0] XOR b[7:0])
-k[MAX:8] := 0
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Compute the bitwise XOR of 8-bit masks "a" and "b", and store the result in "k".
-
-k[7:0] := a[7:0] XOR b[7:0]
-k[MAX:8] := 0
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Shift the bits of 8-bit mask "a" left by "count" while shifting in zeros, and store the least significant 8 bits of the result in "k".
-
-k[MAX:0] := 0
-IF count[7:0] <= 7
- k[7:0] := a[7:0] << count[7:0]
-FI
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Shift the bits of 8-bit mask "a" right by "count" while shifting in zeros, and store the least significant 8 bits of the result in "k".
-
-k[MAX:0] := 0
-IF count[7:0] <= 7
- k[7:0] := a[7:0] >> count[7:0]
-FI
-
-
-
-
-
- Mask
- AVX512DQ
- Load
-
-
- Load 8-bit mask from memory into "k".
-
-k[7:0] := MEM[mem_addr+7:mem_addr]
-
-
-
-
-
- Mask
- AVX512DQ
- Store
-
-
-
- Store 8-bit mask from "a" into memory.
-
-MEM[mem_addr+7:mem_addr] := a[7:0]
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
-
- Compute the bitwise OR of 8-bit masks "a" and "b". If the result is all zeros, store 1 in "dst", otherwise store 0 in "dst". If the result is all ones, store 1 in "all_ones", otherwise store 0 in "all_ones".
-
-tmp[7:0] := a[7:0] OR b[7:0]
-IF tmp[7:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-IF tmp[7:0] == 0xFF
- MEM[all_ones+7:all_ones] := 1
-ELSE
- MEM[all_ones+7:all_ones] := 0
-FI
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Compute the bitwise OR of 8-bit masks "a" and "b". If the result is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[7:0] := a[7:0] OR b[7:0]
-IF tmp[7:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Compute the bitwise OR of 8-bit masks "a" and "b". If the result is all ones, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[7:0] := a[7:0] OR b[7:0]
-IF tmp[7:0] == 0xFF
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
-
- Compute the bitwise AND of 8-bit masks "a" and "b", and if the result is all zeros, store 1 in "dst", otherwise store 0 in "dst". Compute the bitwise NOT of "a" and then AND with "b", if the result is all zeros, store 1 in "and_not", otherwise store 0 in "and_not".
-
-tmp1[7:0] := a[7:0] AND b[7:0]
-IF tmp1[7:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-tmp2[7:0] := (NOT a[7:0]) AND b[7:0]
-IF tmp2[7:0] == 0x0
- MEM[and_not+7:and_not] := 1
-ELSE
- MEM[and_not+7:and_not] := 0
-FI
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Compute the bitwise AND of 8-bit masks "a" and "b", and if the result is all zeros, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[7:0] := a[7:0] AND b[7:0]
-IF tmp[7:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Compute the bitwise NOT of 8-bit mask "a" and then AND with "b", if the result is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[7:0] := (NOT a[7:0]) AND b[7:0]
-IF tmp[7:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
-
- Compute the bitwise AND of 16-bit masks "a" and "b", and if the result is all zeros, store 1 in "dst", otherwise store 0 in "dst". Compute the bitwise NOT of "a" and then AND with "b", if the result is all zeros, store 1 in "and_not", otherwise store 0 in "and_not".
-
-tmp1[15:0] := a[15:0] AND b[15:0]
-IF tmp1[15:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-tmp2[15:0] := (NOT a[15:0]) AND b[15:0]
-IF tmp2[15:0] == 0x0
- MEM[and_not+7:and_not] := 1
-ELSE
- MEM[and_not+7:and_not] := 0
-FI
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Compute the bitwise AND of 16-bit masks "a" and "b", and if the result is all zeros, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[15:0] := a[15:0] AND b[15:0]
-IF tmp[15:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512DQ
- Mask
-
-
-
- Compute the bitwise NOT of 16-bit mask "a" and then AND with "b", if the result is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[15:0] := (NOT a[15:0]) AND b[15:0]
-IF tmp[15:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- AVX512DQ
- Mask
-
-
- Convert 8-bit mask "a" into an integer value, and store the result in "dst".
-
-dst := ZeroExtend32(a[7:0])
-
-
-
-
-
- AVX512DQ
- Mask
-
-
- Convert integer value "a" into an 8-bit mask, and store the result in "k".
-
-k := a[7:0]
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate exponential value of 2 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-23. [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
- Compute the approximate exponential value of 2 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-23.
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate exponential value of 2 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-23. [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate exponential value of 2 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-23.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate exponential value of 2 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-23. [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate exponential value of 2 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-23.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate exponential value of 2 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-23. [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := POW(2.0, a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
- Compute the approximate exponential value of 2 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-23.
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := POW(2.0, a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate exponential value of 2 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-23. [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := POW(2.0, a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate exponential value of 2 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-23.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := POW(2.0, a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate exponential value of 2 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-23. [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := POW(2.0, a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate exponential value of 2 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-23.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := POW(2.0, a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-dst[63:0] := (1.0 / b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-dst[63:0] := (1.0 / b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
-
- Compute the approximate reciprocal of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-IF k[0]
- dst[63:0] := (1.0 / b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-IF k[0]
- dst[63:0] := (1.0 / b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-IF k[0]
- dst[63:0] := (1.0 / b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-IF k[0]
- dst[63:0] := (1.0 / b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst". The maximum relative error for this approximation is less than 2^-28, and copy the upper 3 packed elements from "a" to the upper elements of "dst". [sae_note]
-
-dst[31:0] := (1.0 / b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-dst[31:0] := (1.0 / b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
-
- Compute the approximate reciprocal of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-IF k[0]
- dst[31:0] := (1.0 / b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-IF k[0]
- dst[31:0] := (1.0 / b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-IF k[0]
- dst[31:0] := (1.0 / b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-IF k[0]
- dst[31:0] := (1.0 / b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (1.0 / a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (1.0 / a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (1.0 / a[i+63:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (1.0 / a[i+63:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-dst[63:0] := (1.0 / SQRT(b[63:0]))
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-dst[63:0] := (1.0 / SQRT(b[63:0]))
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
-
- Compute the approximate reciprocal square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-IF k[0]
- dst[63:0] := (1.0 / SQRT(b[63:0]))
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-IF k[0]
- dst[63:0] := (1.0 / SQRT(b[63:0]))
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-IF k[0]
- dst[63:0] := (1.0 / SQRT(b[63:0]))
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-IF k[0]
- dst[63:0] := (1.0 / SQRT(b[63:0]))
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-dst[31:0] := (1.0 / SQRT(b[31:0]))
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-dst[31:0] := (1.0 / SQRT(b[31:0]))
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
-
- Compute the approximate reciprocal square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-IF k[0]
- dst[31:0] := (1.0 / SQRT(b[31:0]))
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-IF k[0]
- dst[31:0] := (1.0 / SQRT(b[31:0]))
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-IF k[0]
- dst[31:0] := (1.0 / SQRT(b[31:0]))
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-28.
-
-IF k[0]
- dst[31:0] := (1.0 / SQRT(b[31:0]))
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", store the results in "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", store the results in "dst". The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", store the results in "dst". The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", store the results in "dst". The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28. [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512ER
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-28.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F
- AVX512VL
- Arithmetic
-
-
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- AVX512VL
- Arithmetic
-
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- AVX512VL
- Arithmetic
-
-
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- AVX512VL
- Arithmetic
-
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- AVX512VL
- Arithmetic
-
-
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- AVX512VL
- Arithmetic
-
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- AVX512VL
- Arithmetic
-
-
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- AVX512VL
- Arithmetic
-
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
- Concatenate "a" and "b" into a 64-byte immediate result, shift the result right by "imm8" 32-bit elements, and store the low 32 bytes (8 elements) in "dst".
-
-temp[511:256] := a[255:0]
-temp[255:0] := b[255:0]
-temp[511:0] := temp[511:0] >> (32*imm8[2:0])
-dst[255:0] := temp[255:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
-
-
- Concatenate "a" and "b" into a 64-byte immediate result, shift the result right by "imm8" 32-bit elements, and store the low 32 bytes (8 elements) in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-temp[511:256] := a[255:0]
-temp[255:0] := b[255:0]
-temp[511:0] := temp[511:0] >> (32*imm8[2:0])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := temp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
-
- Concatenate "a" and "b" into a 64-byte immediate result, shift the result right by "imm8" 32-bit elements, and store the low 32 bytes (8 elements) in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-temp[511:256] := a[255:0]
-temp[255:0] := b[255:0]
-temp[511:0] := temp[511:0] >> (32*imm8[2:0])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := temp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
- Concatenate "a" and "b" into a 32-byte immediate result, shift the result right by "imm8" 32-bit elements, and store the low 16 bytes (4 elements) in "dst".
-
-temp[255:128] := a[127:0]
-temp[127:0] := b[127:0]
-temp[255:0] := temp[255:0] >> (32*imm8[1:0])
-dst[127:0] := temp[127:0]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
-
-
- Concatenate "a" and "b" into a 32-byte immediate result, shift the result right by "imm8" 32-bit elements, and store the low 16 bytes (4 elements) in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-temp[255:128] := a[127:0]
-temp[127:0] := b[127:0]
-temp[255:0] := temp[255:0] >> (32*imm8[1:0])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := temp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
-
- Concatenate "a" and "b" into a 32-byte immediate result, shift the result right by "imm8" 32-bit elements, and store the low 16 bytes (4 elements) in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-temp[255:128] := a[127:0]
-temp[127:0] := b[127:0]
-temp[255:0] := temp[255:0] >> (32*imm8[1:0])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := temp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
- Concatenate "a" and "b" into a 64-byte immediate result, shift the result right by "imm8" 64-bit elements, and store the low 32 bytes (4 elements) in "dst".
-
-temp[511:256] := a[255:0]
-temp[255:0] := b[255:0]
-temp[511:0] := temp[511:0] >> (64*imm8[1:0])
-dst[255:0] := temp[255:0]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
-
-
- Concatenate "a" and "b" into a 64-byte immediate result, shift the result right by "imm8" 64-bit elements, and store the low 32 bytes (4 elements) in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-temp[511:256] := a[255:0]
-temp[255:0] := b[255:0]
-temp[511:0] := temp[511:0] >> (64*imm8[1:0])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := temp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
-
- Concatenate "a" and "b" into a 64-byte immediate result, shift the result right by "imm8" 64-bit elements, and store the low 32 bytes (4 elements) in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-temp[511:256] := a[255:0]
-temp[255:0] := b[255:0]
-temp[511:0] := temp[511:0] >> (64*imm8[1:0])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := temp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
- Concatenate "a" and "b" into a 32-byte immediate result, shift the result right by "imm8" 64-bit elements, and store the low 16 bytes (2 elements) in "dst".
-
-temp[255:128] := a[127:0]
-temp[127:0] := b[127:0]
-temp[255:0] := temp[255:0] >> (64*imm8[0])
-dst[127:0] := temp[127:0]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
-
-
- Concatenate "a" and "b" into a 32-byte immediate result, shift the result right by "imm8" 64-bit elements, and store the low 16 bytes (2 elements) in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-temp[255:128] := a[127:0]
-temp[127:0] := b[127:0]
-temp[255:0] := temp[255:0] >> (64*imm8[0])
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := temp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- AVX512VL
- Miscellaneous
-
-
-
-
-
- Concatenate "a" and "b" into a 32-byte immediate result, shift the result right by "imm8" 64-bit elements, and store the low 16 bytes (2 elements) in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-temp[255:128] := a[127:0]
-temp[127:0] := b[127:0]
-temp[255:0] := temp[255:0] >> (64*imm8[0])
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := temp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Blend packed double-precision (64-bit) floating-point elements from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Blend packed double-precision (64-bit) floating-point elements from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Blend packed single-precision (32-bit) floating-point elements from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Blend packed single-precision (32-bit) floating-point elements from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
- Broadcast the 4 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 4)*32
- dst[i+31:i] := a[n+31:n]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Broadcast the 4 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 4)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Broadcast the 4 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 4)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
- Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 4)*32
- dst[i+31:i] := a[n+31:n]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 4)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- n := (j % 4)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Broadcast the low double-precision (64-bit) floating-point element from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Broadcast the low double-precision (64-bit) floating-point element from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Broadcast the low single-precision (32-bit) floating-point element from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Broadcast the low single-precision (32-bit) floating-point element from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Broadcast the low single-precision (32-bit) floating-point element from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Broadcast the low single-precision (32-bit) floating-point element from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 3
- i := j*64
- k[j] := (a[i+63:i] OP b[i+63:i]) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 7
- i := j*32
- k[j] := (a[i+31:i] OP b[i+31:i]) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Contiguously store the active double-precision (64-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 64
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := src[255:m]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Contiguously store the active double-precision (64-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 64
-m := base_addr
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- MEM[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Contiguously store the active double-precision (64-bit) floating-point elements in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 64
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Contiguously store the active double-precision (64-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 64
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := src[127:m]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Contiguously store the active double-precision (64-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 64
-m := base_addr
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- MEM[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Contiguously store the active double-precision (64-bit) floating-point elements in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 64
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Contiguously store the active single-precision (32-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 32
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := src[255:m]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Contiguously store the active single-precision (32-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 32
-m := base_addr
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- MEM[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Contiguously store the active single-precision (32-bit) floating-point elements in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 32
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Contiguously store the active single-precision (32-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 32
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := src[127:m]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Contiguously store the active single-precision (32-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 32
-m := base_addr
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- MEM[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Contiguously store the active single-precision (32-bit) floating-point elements in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 32
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- IF k[j]
- dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
- ELSE
- dst[m+63:m] := src[m+63:m]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- IF k[j]
- dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
- ELSE
- dst[m+63:m] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- IF k[j]
- dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
- ELSE
- dst[m+63:m] := src[m+63:m]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- IF k[j]
- dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
- ELSE
- dst[m+63:m] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_UInt32(a[k+63:k])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_UInt32(a[k+63:k])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- m := j*16
- IF k[j]
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- m := j*16
- IF k[j]
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- m := j*16
- IF k[j]
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- m := j*16
- IF k[j]
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-FOR j := 0 to 7
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-FOR j := 0 to 7
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-FOR j := 0 to 7
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-FOR j := 0 to 7
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-FOR j := 0 to 3
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-FOR j := 0 to 3
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-FOR j := 0 to 3
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-FOR j := 0 to 3
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[k+63:k])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[k+63:k])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_Int32_To_FP64(a[l+31:l])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_Int32_To_FP64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- IF k[j]
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- IF k[j]
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- IF k[j]
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- IF k[j]
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- IF k[j]
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- IF k[j]
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- IF k[j]
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- IF k[j]
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN: j := 0
- SNAN_TOKEN: j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Copy "a" to "dst", then insert 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "b" into "dst" at the location specified by "imm8".
-
-dst[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-ESAC
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-ESAC
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Copy "a" to "dst", then insert 128 bits (composed of 4 packed 32-bit integers) from "b" into "dst" at the location specified by "imm8".
-
-dst[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 4 packed 32-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-ESAC
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 4 packed 32-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[255:0] := a[255:0]
-CASE (imm8[0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-ESAC
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Move packed double-precision (64-bit) floating-point elements from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed double-precision (64-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
- Move packed double-precision (64-bit) floating-point elements from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Move packed double-precision (64-bit) floating-point elements from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed double-precision (64-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
- Move packed double-precision (64-bit) floating-point elements from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Move packed single-precision (32-bit) floating-point elements from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed single-precision (32-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
- Move packed single-precision (32-bit) floating-point elements from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Move packed single-precision (32-bit) floating-point elements from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed single-precision (32-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
- Move packed single-precision (32-bit) floating-point elements from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Duplicate even-indexed double-precision (64-bit) floating-point elements from "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[63:0] := a[63:0]
-tmp[127:64] := a[63:0]
-tmp[191:128] := a[191:128]
-tmp[255:192] := a[191:128]
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
- Duplicate even-indexed double-precision (64-bit) floating-point elements from "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[63:0] := a[63:0]
-tmp[127:64] := a[63:0]
-tmp[191:128] := a[191:128]
-tmp[255:192] := a[191:128]
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Duplicate even-indexed double-precision (64-bit) floating-point elements from "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[63:0] := a[63:0]
-tmp[127:64] := a[63:0]
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
- Duplicate even-indexed double-precision (64-bit) floating-point elements from "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[63:0] := a[63:0]
-tmp[127:64] := a[63:0]
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed 32-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Move packed 32-bit integers from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed 32-bit integers from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Move
-
-
-
- Move packed 32-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed 32-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Move packed 32-bit integers from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed 32-bit integers from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Move
-
-
-
- Move packed 32-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed 64-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Move packed 64-bit integers from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed 64-bit integers from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Move
-
-
-
- Move packed 64-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed 64-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Move packed 64-bit integers from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed 64-bit integers from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Move
-
-
-
- Move packed 64-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed 32-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed 32-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed 32-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed 32-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed 64-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed 64-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed 64-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed 64-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Duplicate odd-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[31:0] := a[63:32]
-tmp[63:32] := a[63:32]
-tmp[95:64] := a[127:96]
-tmp[127:96] := a[127:96]
-tmp[159:128] := a[191:160]
-tmp[191:160] := a[191:160]
-tmp[223:192] := a[255:224]
-tmp[255:224] := a[255:224]
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
- Duplicate odd-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[31:0] := a[63:32]
-tmp[63:32] := a[63:32]
-tmp[95:64] := a[127:96]
-tmp[127:96] := a[127:96]
-tmp[159:128] := a[191:160]
-tmp[191:160] := a[191:160]
-tmp[223:192] := a[255:224]
-tmp[255:224] := a[255:224]
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Duplicate odd-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[31:0] := a[63:32]
-tmp[63:32] := a[63:32]
-tmp[95:64] := a[127:96]
-tmp[127:96] := a[127:96]
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
- Duplicate odd-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[31:0] := a[63:32]
-tmp[63:32] := a[63:32]
-tmp[95:64] := a[127:96]
-tmp[127:96] := a[127:96]
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Duplicate even-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[31:0] := a[31:0]
-tmp[63:32] := a[31:0]
-tmp[95:64] := a[95:64]
-tmp[127:96] := a[95:64]
-tmp[159:128] := a[159:128]
-tmp[191:160] := a[159:128]
-tmp[223:192] := a[223:192]
-tmp[255:224] := a[223:192]
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
- Duplicate even-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[31:0] := a[31:0]
-tmp[63:32] := a[31:0]
-tmp[95:64] := a[95:64]
-tmp[127:96] := a[95:64]
-tmp[159:128] := a[159:128]
-tmp[191:160] := a[159:128]
-tmp[223:192] := a[223:192]
-tmp[255:224] := a[223:192]
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
-
- Duplicate even-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[31:0] := a[31:0]
-tmp[63:32] := a[31:0]
-tmp[95:64] := a[95:64]
-tmp[127:96] := a[95:64]
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Move
-
-
-
- Duplicate even-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[31:0] := a[31:0]
-tmp[63:32] := a[31:0]
-tmp[95:64] := a[95:64]
-tmp[127:96] := a[95:64]
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memoy into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed double-precision (64-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memoy into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memoy into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed double-precision (64-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memoy into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed single-precision (32-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Store packed single-precision (32-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Load
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). RM.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the absolute value of packed signed 32-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ABS(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the absolute value of packed signed 32-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ABS(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the absolute value of packed signed 32-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ABS(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the absolute value of packed signed 32-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ABS(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
- Compute the absolute value of packed signed 64-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ABS(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the absolute value of packed signed 64-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ABS(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the absolute value of packed signed 64-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ABS(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
- Compute the absolute value of packed signed 64-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ABS(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the absolute value of packed signed 64-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ABS(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the absolute value of packed signed 64-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ABS(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Add packed 32-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Add packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Add packed 32-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Add packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Add packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Add packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] :=0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Add packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Add packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] AND b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] AND b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] AND b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] AND b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (NOT a[i+31:i]) AND b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (NOT a[i+31:i]) AND b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (NOT a[i+63:i]) AND b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (NOT a[i+63:i]) AND b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] AND b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] AND b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] AND b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] AND b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Blend packed 32-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Blend packed 32-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Blend packed 64-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Blend packed 64-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Set
-
-
-
-
- Broadcast 32-bit integer "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Set
-
-
-
- Broadcast 32-bit integer "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Set
-
-
-
-
- Broadcast 32-bit integer "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Set
-
-
-
- Broadcast 32-bit integer "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Set
-
-
-
-
- Broadcast 64-bit integer "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Set
-
-
-
- Broadcast 64-bit integer "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Set
-
-
-
-
- Broadcast 64-bit integer "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Set
-
-
-
- Broadcast 64-bit integer "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Contiguously store the active 32-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 32
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := src[255:m]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Contiguously store the active 32-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 32
-m := base_addr
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- MEM[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Contiguously store the active 32-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 32
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Contiguously store the active 32-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 32
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := src[127:m]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Contiguously store the active 32-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 32
-m := base_addr
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- MEM[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Contiguously store the active 32-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 32
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Contiguously store the active 64-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 64
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := src[255:m]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Contiguously store the active 64-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 64
-m := base_addr
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- MEM[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Contiguously store the active 64-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 64
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Contiguously store the active 64-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 64
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := src[127:m]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
- Contiguously store the active 64-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 64
-m := base_addr
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- MEM[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Contiguously store the active 64-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 64
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 32-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- id := idx[i+2:i]*32
- IF k[j]
- dst[i+31:i] := a[id+31:id]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 32-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- id := idx[i+2:i]*32
- IF k[j]
- dst[i+31:i] := a[id+31:id]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Shuffle 32-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- id := idx[i+2:i]*32
- dst[i+31:i] := a[id+31:id]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- off := idx[i+2:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := idx[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- off := idx[i+2:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- off := idx[i+2:i]*32
- IF k[j]
- dst[i+31:i] := (idx[i+3]) ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- off := idx[i+2:i]*32
- dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- off := idx[i+1:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := idx[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- off := idx[i+1:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- off := idx[i+1:i]*32
- IF k[j]
- dst[i+31:i] := (idx[i+2]) ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- off := idx[i+1:i]*32
- dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- off := idx[i+1:i]*64
- IF k[j]
- dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := idx[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- off := idx[i+1:i]*64
- IF k[j]
- dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- off := idx[i+1:i]*64
- IF k[j]
- dst[i+63:i] := (idx[i+2]) ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- off := idx[i+1:i]*64
- dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set)
-
-FOR j := 0 to 1
- i := j*64
- off := idx[i]*64
- IF k[j]
- dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := idx[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- off := idx[i]*64
- IF k[j]
- dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- off := idx[i]*64
- IF k[j]
- dst[i+63:i] := (idx[i+1]) ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- off := idx[i]*64
- dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- off := idx[i+2:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := idx[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- off := idx[i+2:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- off := idx[i+2:i]*32
- IF k[j]
- dst[i+31:i] := (idx[i+3]) ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- off := idx[i+2:i]*32
- dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- off := idx[i+1:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := idx[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- off := idx[i+1:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- off := idx[i+1:i]*32
- IF k[j]
- dst[i+31:i] := (idx[i+2]) ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- off := idx[i+1:i]*32
- dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- off := idx[i+1:i]*64
- IF k[j]
- dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := idx[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- off := idx[i+1:i]*64
- IF k[j]
- dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- off := idx[i+1:i]*64
- IF k[j]
- dst[i+63:i] := (idx[i+2]) ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- off := idx[i+1:i]*64
- dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- off := idx[i]*64
- IF k[j]
- dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := idx[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- off := idx[i]*64
- IF k[j]
- dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- off := idx[i]*64
- IF k[j]
- dst[i+63:i] := (idx[i+1]) ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- off := idx[i]*64
- dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
-IF (imm8[2] == 0) tmp_dst[191:128] := a[191:128]; FI
-IF (imm8[2] == 1) tmp_dst[191:128] := a[255:192]; FI
-IF (imm8[3] == 0) tmp_dst[255:192] := a[191:128]; FI
-IF (imm8[3] == 1) tmp_dst[255:192] := a[255:192]; FI
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
-IF (b[129] == 0) tmp_dst[191:128] := a[191:128]; FI
-IF (b[129] == 1) tmp_dst[191:128] := a[255:192]; FI
-IF (b[193] == 0) tmp_dst[255:192] := a[191:128]; FI
-IF (b[193] == 1) tmp_dst[255:192] := a[255:192]; FI
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
-IF (imm8[2] == 0) tmp_dst[191:128] := a[191:128]; FI
-IF (imm8[2] == 1) tmp_dst[191:128] := a[255:192]; FI
-IF (imm8[3] == 0) tmp_dst[255:192] := a[191:128]; FI
-IF (imm8[3] == 1) tmp_dst[255:192] := a[255:192]; FI
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
-IF (b[129] == 0) tmp_dst[191:128] := a[191:128]; FI
-IF (b[129] == 1) tmp_dst[191:128] := a[255:192]; FI
-IF (b[193] == 0) tmp_dst[255:192] := a[191:128]; FI
-IF (b[193] == 1) tmp_dst[255:192] := a[255:192]; FI
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" using the control in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" using the control in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
-tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
-tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
-tmp_dst[159:128] := SELECT4(a[255:128], b[129:128])
-tmp_dst[191:160] := SELECT4(a[255:128], b[161:160])
-tmp_dst[223:192] := SELECT4(a[255:128], b[193:192])
-tmp_dst[255:224] := SELECT4(a[255:128], b[225:224])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
-tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
-tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
-tmp_dst[159:128] := SELECT4(a[255:128], b[129:128])
-tmp_dst[191:160] := SELECT4(a[255:128], b[161:160])
-tmp_dst[223:192] := SELECT4(a[255:128], b[193:192])
-tmp_dst[255:224] := SELECT4(a[255:128], b[225:224])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" using the control in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
-tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
-tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" using the control in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
-tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
-tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" across lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- id := idx[i+1:i]*64
- IF k[j]
- dst[i+63:i] := a[id+63:id]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" across lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- id := idx[i+1:i]*64
- IF k[j]
- dst[i+63:i] := a[id+63:id]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" across lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" across lanes using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- id := idx[i+1:i]*64
- dst[i+63:i] := a[id+63:id]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- id := idx[i+2:i]*32
- IF k[j]
- dst[i+31:i] := a[id+31:id]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- id := idx[i+2:i]*32
- IF k[j]
- dst[i+31:i] := a[id+31:id]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" across lanes using the corresponding index in "idx".
-
-FOR j := 0 to 7
- i := j*32
- id := idx[i+2:i]*32
- dst[i+31:i] := a[id+31:id]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 64-bit integers in "a" across lanes lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 64-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- id := idx[i+1:i]*64
- IF k[j]
- dst[i+63:i] := a[id+63:id]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 64-bit integers in "a" across lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 64-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- id := idx[i+1:i]*64
- IF k[j]
- dst[i+63:i] := a[id+63:id]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Shuffle 64-bit integers in "a" across lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Shuffle 64-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- id := idx[i+1:i]*64
- dst[i+63:i] := a[id+63:id]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Load contiguous active 32-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load contiguous active 32-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Load contiguous active 32-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load contiguous active 32-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Load contiguous active 32-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load contiguous active 32-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Load contiguous active 32-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load contiguous active 32-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Load contiguous active 64-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load contiguous active 64-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Load contiguous active 64-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load contiguous active 64-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Load contiguous active 64-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
- Load contiguous active 64-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Load contiguous active 64-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
- Load contiguous active 64-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
-
-
-
-
- Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 8*j
- dst[k+7:k] := Truncate8(a[i+31:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+31:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+31:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 8*j
- dst[k+7:k] := Truncate8(a[i+31:i])
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+31:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+31:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 16*j
- dst[k+15:k] := Truncate16(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+31:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+31:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 16*j
- dst[k+15:k] := Truncate16(a[i+31:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+31:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+31:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 8*j
- dst[k+7:k] := Truncate8(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+63:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+63:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 8*j
- dst[k+7:k] := Truncate8(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+63:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+63:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 32*j
- dst[k+31:k] := Truncate32(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Truncate32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- MEM[base_addr+l+31:base_addr+l] := Truncate32(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Truncate32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 32*j
- dst[k+31:k] := Truncate32(a[i+63:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Truncate32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- MEM[base_addr+l+31:base_addr+l] := Truncate32(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Truncate32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 16*j
- dst[k+15:k] := Truncate16(a[i+63:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+63:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+63:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 16*j
- dst[k+15:k] := Truncate16(a[i+63:i])
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+63:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+63:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 8*j
- dst[k+7:k] := Saturate8(a[i+31:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+31:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+31:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 8*j
- dst[k+7:k] := Saturate8(a[i+31:i])
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+31:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+31:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 16*j
- dst[k+15:k] := Saturate16(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+31:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+31:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 16*j
- dst[k+15:k] := Saturate16(a[i+31:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+31:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+31:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 8*j
- dst[k+7:k] := Saturate8(a[i+63:i])
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+63:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+63:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 8*j
- dst[k+7:k] := Saturate8(a[i+63:i])
-ENDFOR
-dst[MAX:16] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+63:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:16] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+63:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:16] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 32*j
- dst[k+31:k] := Saturate32(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Saturate32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- MEM[base_addr+l+31:base_addr+l] := Saturate32(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Saturate32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 32*j
- dst[k+31:k] := Saturate32(a[i+63:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Saturate32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- MEM[base_addr+l+31:base_addr+l] := Saturate32(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Saturate32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 16*j
- dst[k+15:k] := Saturate16(a[i+63:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+63:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+63:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 16*j
- dst[k+15:k] := Saturate16(a[i+63:i])
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+63:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+63:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 8-bit integers in the low 4 bytes of "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Sign extend packed 8-bit integers in the low 4 bytes of "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 8-bit integers in the low 4 bytes of "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Sign extend packed 8-bit integers in the low 4 bytes of "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 8-bit integers in the low 2 bytes of "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Sign extend packed 8-bit integers in the low 2 bytes of "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- l := j*16
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- l := j*16
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 16-bit integers in the low 8 bytes of "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Sign extend packed 16-bit integers in the low 8 bytes of "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 16-bit integers in the low 4 bytes of "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Sign extend packed 16-bit integers in the low 4 bytes of "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 8*j
- dst[k+7:k] := SaturateU8(a[i+31:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+31:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+31:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 8*j
- dst[k+7:k] := SaturateU8(a[i+31:i])
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+31:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+31:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 16*j
- dst[k+15:k] := SaturateU16(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+31:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+31:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 16*j
- dst[k+15:k] := SaturateU16(a[i+31:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+31:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+31:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 8*j
- dst[k+7:k] := SaturateU8(a[i+63:i])
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+63:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+63:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 8*j
- dst[k+7:k] := SaturateU8(a[i+63:i])
-ENDFOR
-dst[MAX:16] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+63:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:16] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+63:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:16] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 32*j
- dst[k+31:k] := SaturateU32(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := SaturateU32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- MEM[base_addr+l+31:base_addr+l] := SaturateU32(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := SaturateU32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 32*j
- dst[k+31:k] := SaturateU32(a[i+63:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := SaturateU32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- MEM[base_addr+l+31:base_addr+l] := SaturateU32(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := SaturateU32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 64*j
- k := 16*j
- dst[k+15:k] := SaturateU16(a[i+63:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+63:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+63:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 16*j
- dst[k+15:k] := SaturateU16(a[i+63:i])
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+63:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+63:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 8-bit integers in the low 8 bytes of "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 8-bit integers in the low 8 bytes of "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 8-bit integers in the low 4 bytes of "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 8-bit integers in th elow 4 bytes of "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 8-bit integers in the low 4 bytes of "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 8-bit integers in the low 4 bytes of "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 8-bit integers in the low 2 bytes of "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 8-bit integers in the low 2 bytes of "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 16*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 32*j
- l := 16*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 16-bit integers in the low 8 bytes of "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 16-bit integers in the low 8 bytes of "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 16-bit integers in the low 4 bytes of "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 16-bit integers in the low 4 bytes of "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the low signed 32-bit integers from each packed 64-bit element in "a" and "b", and store the signed 64-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the low signed 32-bit integers from each packed 64-bit element in "a" and "b", and store the signed 64-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the low signed 32-bit integers from each packed 64-bit element in "a" and "b", and store the signed 64-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the low signed 32-bit integers from each packed 64-bit element in "a" and "b", and store the signed 64-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the packed 32-bit integers in "a" and "b", producing intermediate 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- tmp[63:0] := a[i+31:i] * b[i+31:i]
- dst[i+31:i] := tmp[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the packed 32-bit integers in "a" and "b", producing intermediate 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- tmp[63:0] := a[i+31:i] * b[i+31:i]
- dst[i+31:i] := tmp[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the packed 32-bit integers in "a" and "b", producing intermediate 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- tmp[63:0] := a[i+31:i] * b[i+31:i]
- dst[i+31:i] := tmp[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the packed 32-bit integers in "a" and "b", producing intermediate 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- tmp[63:0] := a[i+31:i] * b[i+31:i]
- dst[i+31:i] := tmp[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the packed 32-bit integers in "a" and "b", producing intermediate 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- tmp[63:0] := a[i+31:i] * b[i+31:i]
- dst[i+31:i] := tmp[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the low unsigned 32-bit integers from each packed 64-bit element in "a" and "b", and store the unsigned 64-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the low unsigned 32-bit integers from each packed 64-bit element in "a" and "b", and store the unsigned 64-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the low unsigned 32-bit integers from each packed 64-bit element in "a" and "b", and store the unsigned 64-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the low unsigned 32-bit integers from each packed 64-bit element in "a" and "b", and store the unsigned 64-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 32-bit integers in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 32-bit integers in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 32-bit integers in "a" using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 32-bit integers in "a" using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[63:0] > 63
+ FI
+ ENDFOR
+ RETURN tmpdst[127:0]
+ }
+ dst[127:0] := DP(a[127:0], b[127:0], imm8[7:0])
+ dst[255:128] := DP(a[255:128], b[255:128], imm8[7:0])
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of double-precision (64-bit) floating-point
+ elements in "a" and "b", and pack the results in "dst".
+
+ dst[63:0] := a[127:64] + a[63:0]
+ dst[127:64] := b[127:64] + b[63:0]
+ dst[191:128] := a[255:192] + a[191:128]
+ dst[255:192] := b[255:192] + b[191:128]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of single-precision (32-bit) floating-point
+ elements in "a" and "b", and pack the results in "dst".
+
+ dst[31:0] := a[63:32] + a[31:0]
+ dst[63:32] := a[127:96] + a[95:64]
+ dst[95:64] := b[63:32] + b[31:0]
+ dst[127:96] := b[127:96] + b[95:64]
+ dst[159:128] := a[191:160] + a[159:128]
+ dst[191:160] := a[255:224] + a[223:192]
+ dst[223:192] := b[191:160] + b[159:128]
+ dst[255:224] := b[255:224] + b[223:192]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of double-precision (64-bit)
+ floating-point elements in "a" and "b", and pack the results in "dst".
+
+ dst[63:0] := a[63:0] - a[127:64]
+ dst[127:64] := b[63:0] - b[127:64]
+ dst[191:128] := a[191:128] - a[255:192]
+ dst[255:192] := b[191:128] - b[255:192]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of single-precision (32-bit)
+ floating-point elements in "a" and "b", and pack the results in "dst".
+
+ dst[31:0] := a[31:0] - a[63:32]
+ dst[63:32] := a[95:64] - a[127:96]
+ dst[95:64] := b[31:0] - b[63:32]
+ dst[127:96] := b[95:64] - b[127:96]
+ dst[159:128] := a[159:128] - a[191:160]
+ dst[191:160] := a[223:192] - a[255:224]
+ dst[223:192] := b[159:128] - b[191:160]
+ dst[255:224] := b[223:192] - b[255:224]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Arithmetic
+
+
+
+
+
+ Compute the bitwise AND of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of packed double-precision (64-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of packed single-precision (32-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 256 bits (representing integer data) in "a" and "b",
+ and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise
+ NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set
+ "CF" to 0. Return the "ZF" value.
+
+ IF ((a[255:0] AND b[255:0]) == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ IF (((NOT a[255:0]) AND b[255:0]) == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ RETURN ZF
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 256 bits (representing integer data) in "a" and "b",
+ and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise
+ NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set
+ "CF" to 0. Return the "CF" value.
+
+ IF ((a[255:0] AND b[255:0]) == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ IF (((NOT a[255:0]) AND b[255:0]) == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ RETURN CF
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 256 bits (representing integer data) in "a" and "b",
+ and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise
+ NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set
+ "CF" to 0. Return 1 if both the "ZF" and "CF" values are zero, otherwise return 0.
+
+ IF ((a[255:0] AND b[255:0]) == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ IF (((NOT a[255:0]) AND b[255:0]) == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ IF (ZF == 0 && CF == 0)
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 256 bits (representing double-precision (64-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and
+ set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return the "ZF" value.
+
+ tmp[255:0] := a[255:0] AND b[255:0]
+ IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255]
+ == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[255:0] := (NOT a[255:0]) AND b[255:0]
+ IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255]
+ == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ dst := ZF
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 256 bits (representing double-precision (64-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and
+ set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return the "CF" value.
+
+ tmp[255:0] := a[255:0] AND b[255:0]
+ IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255]
+ == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[255:0] := (NOT a[255:0]) AND b[255:0]
+ IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255]
+ == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ dst := CF
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 256 bits (representing double-precision (64-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and
+ set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF"
+ values are zero, otherwise return 0.
+
+ tmp[255:0] := a[255:0] AND b[255:0]
+ IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255]
+ == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[255:0] := (NOT a[255:0]) AND b[255:0]
+ IF (tmp[63] == 0 && tmp[127] == 0 && tmp[191] == 0 && tmp[255]
+ == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ IF (ZF == 0 && CF == 0)
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing double-precision (64-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and
+ set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return the "ZF" value.
+
+ tmp[127:0] := a[127:0] AND b[127:0]
+ IF (tmp[63] == 0 && tmp[127] == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[127:0] := (NOT a[127:0]) AND b[127:0]
+ IF (tmp[63] == 0 && tmp[127] == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ dst := ZF
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing double-precision (64-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and
+ set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return the "CF" value.
+
+ tmp[127:0] := a[127:0] AND b[127:0]
+ IF (tmp[63] == 0 && tmp[127] == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[127:0] := (NOT a[127:0]) AND b[127:0]
+ IF (tmp[63] == 0 && tmp[127] == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ dst := CF
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing double-precision (64-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and
+ set "ZF" to 1 if the sign bit of each 64-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 64-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF"
+ values are zero, otherwise return 0.
+
+ tmp[127:0] := a[127:0] AND b[127:0]
+ IF (tmp[63] == 0 && tmp[127] == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[127:0] := (NOT a[127:0]) AND b[127:0]
+ IF (tmp[63] == 0 && tmp[127] == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ IF (ZF == 0 && CF == 0)
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 256 bits (representing single-precision (32-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and
+ set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return the "ZF" value.
+
+ tmp[255:0] := a[255:0] AND b[255:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0 && \
+ tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] ==
+ 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[255:0] := (NOT a[255:0]) AND b[255:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0 && \
+ tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] ==
+ 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ dst := ZF
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 256 bits (representing single-precision (32-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and
+ set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return the "CF" value.
+
+ tmp[255:0] := a[255:0] AND b[255:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0 && \
+ tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] ==
+ 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[255:0] := (NOT a[255:0]) AND b[255:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0 && \
+ tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] ==
+ 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ dst := CF
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 256 bits (representing single-precision (32-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 256-bit value, and
+ set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF"
+ values are zero, otherwise return 0.
+
+ tmp[255:0] := a[255:0] AND b[255:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0 && \
+ tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] ==
+ 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[255:0] := (NOT a[255:0]) AND b[255:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0 && \
+ tmp[159] == 0 && tmp[191] == 0 && tmp[223] == 0 && tmp[255] ==
+ 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ IF (ZF == 0 && CF == 0)
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing single-precision (32-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and
+ set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return the "ZF" value.
+
+ tmp[127:0] := a[127:0] AND b[127:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[127:0] := (NOT a[127:0]) AND b[127:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ dst := ZF
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing single-precision (32-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and
+ set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return the "CF" value.
+
+ tmp[127:0] := a[127:0] AND b[127:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[127:0] := (NOT a[127:0]) AND b[127:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ dst := CF
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing single-precision (32-bit)
+ floating-point elements) in "a" and "b", producing an intermediate 128-bit value, and
+ set "ZF" to 1 if the sign bit of each 32-bit element in the intermediate value is zero,
+ otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", producing
+ an intermediate value, and set "CF" to 1 if the sign bit of each 32-bit element in the
+ intermediate value is zero, otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF"
+ values are zero, otherwise return 0.
+
+ tmp[127:0] := a[127:0] AND b[127:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ tmp[127:0] := (NOT a[127:0]) AND b[127:0]
+ IF (tmp[31] == 0 && tmp[63] == 0 && tmp[95] == 0 && tmp[127] ==
+ 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ IF (ZF == 0 && CF == 0)
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX
+
+ Logical
+
+
+
+
+
+
+ Blend packed double-precision (64-bit) floating-point elements from "a" and "b"
+ using control mask "imm8", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF imm8[j]
+ dst[i+63:i] := b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed single-precision (32-bit) floating-point elements from "a" and "b"
+ using control mask "imm8", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF imm8[j]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed double-precision (64-bit) floating-point elements from "a" and "b"
+ using "mask", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF mask[i+63]
+ dst[i+63:i] := b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed single-precision (32-bit) floating-point elements from "a" and "b"
+ using "mask", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF mask[i+31]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes
+ using the control in "imm8", and store the results in "dst".
+
+ dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
+ dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
+ dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
+ dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ dst[95:64] := SELECT4(b[127:0], imm8[5:4])
+ dst[127:96] := SELECT4(b[127:0], imm8[7:6])
+ dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ dst[223:192] := SELECT4(b[255:128], imm8[5:4])
+ dst[255:224] := SELECT4(b[255:128], imm8[7:6])
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from "a", selected with "imm8", and store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from "a", selected with "imm8", and store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Extract 128 bits (composed of integer data) from "a", selected with "imm8", and
+ store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Extract a 32-bit integer from "a", selected with "index", and store the result
+ in "dst".
+
+ dst[31:0] := (a[255:0] >> (index[2:0] * 32))[31:0]
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Extract a 64-bit integer from "a", selected with "index", and store the result
+ in "dst".
+
+ dst[63:0] := (a[255:0] >> (index[1:0] * 64))[63:0]
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], b[1:0])
+ dst[63:32] := SELECT4(a[127:0], b[33:32])
+ dst[95:64] := SELECT4(a[127:0], b[65:64])
+ dst[127:96] := SELECT4(a[127:0], b[97:96])
+ dst[159:128] := SELECT4(a[255:128], b[129:128])
+ dst[191:160] := SELECT4(a[255:128], b[161:160])
+ dst[223:192] := SELECT4(a[255:128], b[193:192])
+ dst[255:224] := SELECT4(a[255:128], b[225:224])
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" using the
+ control in "b", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], b[1:0])
+ dst[63:32] := SELECT4(a[127:0], b[33:32])
+ dst[95:64] := SELECT4(a[127:0], b[65:64])
+ dst[127:96] := SELECT4(a[127:0], b[97:96])
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" using the
+ control in "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst".
+
+ IF (b[1] == 0) dst[63:0] := a[63:0]; FI
+ IF (b[1] == 1) dst[63:0] := a[127:64]; FI
+ IF (b[65] == 0) dst[127:64] := a[63:0]; FI
+ IF (b[65] == 1) dst[127:64] := a[127:64]; FI
+ IF (b[129] == 0) dst[191:128] := a[191:128]; FI
+ IF (b[129] == 1) dst[191:128] := a[255:192]; FI
+ IF (b[193] == 0) dst[255:192] := a[191:128]; FI
+ IF (b[193] == 1) dst[255:192] := a[255:192]; FI
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" using the
+ control in "b", and store the results in "dst".
+
+ IF (b[1] == 0) dst[63:0] := a[63:0]; FI
+ IF (b[1] == 1) dst[63:0] := a[127:64]; FI
+ IF (b[65] == 0) dst[127:64] := a[63:0]; FI
+ IF (b[65] == 1) dst[127:64] := a[127:64]; FI
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst".
+
+ IF (imm8[0] == 0) dst[63:0] := a[63:0]; FI
+ IF (imm8[0] == 1) dst[63:0] := a[127:64]; FI
+ IF (imm8[1] == 0) dst[127:64] := a[63:0]; FI
+ IF (imm8[1] == 1) dst[127:64] := a[127:64]; FI
+ IF (imm8[2] == 0) dst[191:128] := a[191:128]; FI
+ IF (imm8[2] == 1) dst[191:128] := a[255:192]; FI
+ IF (imm8[3] == 0) dst[255:192] := a[191:128]; FI
+ IF (imm8[3] == 1) dst[255:192] := a[255:192]; FI
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" using the
+ control in "imm8", and store the results in "dst".
+
+ IF (imm8[0] == 0) dst[63:0] := a[63:0]; FI
+ IF (imm8[0] == 1) dst[63:0] := a[127:64]; FI
+ IF (imm8[1] == 0) dst[127:64] := a[63:0]; FI
+ IF (imm8[1] == 1) dst[127:64] := a[127:64]; FI
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst".
+
+ DEFINE SELECT4(src1, src2, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src1[127:0]
+ 1: tmp[127:0] := src1[255:128]
+ 2: tmp[127:0] := src2[127:0]
+ 3: tmp[127:0] := src2[255:128]
+ ESAC
+ IF control[3]
+ tmp[127:0] := 0
+ FI
+ RETURN tmp[127:0]
+ }
+ dst[127:0] := SELECT4(a[255:0], b[255:0], imm8[3:0])
+ dst[255:128] := SELECT4(a[255:0], b[255:0], imm8[7:4])
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst".
+
+ DEFINE SELECT4(src1, src2, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src1[127:0]
+ 1: tmp[127:0] := src1[255:128]
+ 2: tmp[127:0] := src2[127:0]
+ 3: tmp[127:0] := src2[255:128]
+ ESAC
+ IF control[3]
+ tmp[127:0] := 0
+ FI
+ RETURN tmp[127:0]
+ }
+ dst[127:0] := SELECT4(a[255:0], b[255:0], imm8[3:0])
+ dst[255:128] := SELECT4(a[255:0], b[255:0], imm8[7:4])
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 128-bits (composed of integer data) selected by "imm8" from "a" and
+ "b", and store the results in "dst".
+
+ DEFINE SELECT4(src1, src2, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src1[127:0]
+ 1: tmp[127:0] := src1[255:128]
+ 2: tmp[127:0] := src2[127:0]
+ 3: tmp[127:0] := src2[255:128]
+ ESAC
+ IF control[3]
+ tmp[127:0] := 0
+ FI
+ RETURN tmp[127:0]
+ }
+ dst[127:0] := SELECT4(a[255:0], b[255:0], imm8[3:0])
+ dst[255:128] := SELECT4(a[255:0], b[255:0], imm8[7:4])
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits (composed of 4 packed single-precision
+ (32-bit) floating-point elements) from "b" into "dst" at the location specified by
+ "imm8".
+
+ dst[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits (composed of 2 packed double-precision
+ (64-bit) floating-point elements) from "b" into "dst" at the location specified by
+ "imm8".
+
+ dst[255:0] := a[255:0]
+ CASE imm8[0] OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits from "b" into "dst" at the location
+ specified by "imm8".
+
+ dst[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", and insert the 8-bit integer "i" into "dst" at the location
+ specified by "index".
+
+ dst[255:0] := a[255:0]
+ sel := index[4:0]*8
+ dst[sel+7:sel] := i[7:0]
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", and insert the 16-bit integer "i" into "dst" at the location
+ specified by "index".
+
+ dst[255:0] := a[255:0]
+ sel := index[3:0]*16
+ dst[sel+15:sel] := i[15:0]
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", and insert the 32-bit integer "i" into "dst" at the location
+ specified by "index".
+
+ dst[255:0] := a[255:0]
+ sel := index[2:0]*32
+ dst[sel+31:sel] := i[31:0]
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", and insert the 64-bit integer "i" into "dst" at the location
+ specified by "index".
+
+ dst[255:0] := a[255:0]
+ sel := index[1:0]*64
+ dst[sel+63:sel] := i[63:0]
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Swizzle
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst". [max_float_note]
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst". [max_float_note]
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst". [min_float_note]
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst". [min_float_note]
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" using
+ the "rounding" parameter, and store the results as packed double-precision
+ floating-point elements in "dst".
+ [round_note]
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ROUND(a[i+63:i], rounding)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" using
+ the "rounding" parameter, and store the results as packed single-precision
+ floating-point elements in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ROUND(a[i+31:i], rounding)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed single-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := FLOOR(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed single-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := CEIL(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed double-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := FLOOR(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed double-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := CEIL(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in "dst".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ( a[i+63:i] OP b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Compare
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in "dst".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ( a[i+63:i] OP b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in "dst".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] OP b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in "dst".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] OP b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Compare
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", store the result in the lower
+ element of "dst", and copy the upper element from "a" to the upper element of "dst".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ dst[63:0] := ( a[63:0] OP b[63:0] ) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Compare
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", store the result in the lower
+ element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of
+ "dst".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ dst[31:0] := ( a[31:0] OP b[31:0] ) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Compare
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_FP32(a[k+63:k])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed double-precision (64-bit) floating-point elements, and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 32*j
+ dst[i+63:i] := Convert_FP32_To_FP64(a[k+31:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[k+63:k])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_Int32(a[k+63:k])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Convert
+
+
+
+
+ Copy the lower single-precision (32-bit) floating-point element of "a" to
+ "dst".
+
+ dst[31:0] := a[31:0]
+
+
+ AVX
+
+ Convert
+
+
+
+
+ Copy the lower double-precision (64-bit) floating-point element of "a" to
+ "dst".
+
+ dst[63:0] := a[63:0]
+
+
+ AVX
+
+ Convert
+
+
+
+
+ Copy the lower 32-bit integer in "a" to "dst".
+
+ dst[31:0] := a[31:0]
+
+
+ AVX
+
+ Convert
+
+
+
+
+ Zero the contents of all XMM or YMM registers.
+ YMM0[MAX:0] := 0
+ YMM1[MAX:0] := 0
+ YMM2[MAX:0] := 0
+ YMM3[MAX:0] := 0
+ YMM4[MAX:0] := 0
+ YMM5[MAX:0] := 0
+ YMM6[MAX:0] := 0
+ YMM7[MAX:0] := 0
+ IF _64_BIT_MODE
+ YMM8[MAX:0] := 0
+ YMM9[MAX:0] := 0
+ YMM10[MAX:0] := 0
+ YMM11[MAX:0] := 0
+ YMM12[MAX:0] := 0
+ YMM13[MAX:0] := 0
+ YMM14[MAX:0] := 0
+ YMM15[MAX:0] := 0
+ FI
+
+
+ AVX
+
+ General Support
+
+
+
+
+ Zero the upper 128 bits of all YMM registers; the lower 128-bits of the
+ registers are unmodified.
+ YMM0[MAX:128] := 0
+ YMM1[MAX:128] := 0
+ YMM2[MAX:128] := 0
+ YMM3[MAX:128] := 0
+ YMM4[MAX:128] := 0
+ YMM5[MAX:128] := 0
+ YMM6[MAX:128] := 0
+ YMM7[MAX:128] := 0
+ IF _64_BIT_MODE
+ YMM8[MAX:128] := 0
+ YMM9[MAX:128] := 0
+ YMM10[MAX:128] := 0
+ YMM11[MAX:128] := 0
+ YMM12[MAX:128] := 0
+ YMM13[MAX:128] := 0
+ YMM14[MAX:128] := 0
+ YMM15[MAX:128] := 0
+ FI
+
+
+ AVX
+
+ General Support
+
+
+
+
+ Return vector of type __m256 with undefined elements.
+ AVX
+
+ General Support
+
+
+
+
+ Return vector of type __m256d with undefined elements.
+ AVX
+
+ General Support
+
+
+
+
+ Return vector of type __m256i with undefined elements.
+ AVX
+
+ General Support
+
+
+
+
+ Broadcast a single-precision (32-bit) floating-point element from memory to all
+ elements of "dst".
+
+ tmp[31:0] := MEM[mem_addr+31:mem_addr]
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := tmp[31:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+ Swizzle
+
+
+ Broadcast a single-precision (32-bit) floating-point element from memory to all
+ elements of "dst".
+
+ tmp[31:0] := MEM[mem_addr+31:mem_addr]
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := tmp[31:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Load
+
+
+ Swizzle
+
+
+ Broadcast a double-precision (64-bit) floating-point element from memory to all
+ elements of "dst".
+
+ tmp[63:0] := MEM[mem_addr+63:mem_addr]
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := tmp[63:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+ Swizzle
+
+
+ Broadcast 128 bits from memory (composed of 4 packed single-precision (32-bit)
+ floating-point elements) to all elements of "dst".
+
+ tmp[127:0] := MEM[mem_addr+127:mem_addr]
+ dst[127:0] := tmp[127:0]
+ dst[255:128] := tmp[127:0]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+ Swizzle
+
+
+ Broadcast 128 bits from memory (composed of 2 packed double-precision (64-bit)
+ floating-point elements) to all elements of "dst".
+
+ tmp[127:0] := MEM[mem_addr+127:mem_addr]
+ dst[127:0] := tmp[127:0]
+ dst[255:128] := tmp[127:0]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+ Load 256-bits (composed of 4 packed double-precision (64-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+ Load 256-bits (composed of 8 packed single-precision (32-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+ Load 256-bits (composed of 4 packed double-precision (64-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+ Load 256-bits (composed of 8 packed single-precision (32-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+ Load 256-bits of integer data from memory into "dst".
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+ Load 256-bits of integer data from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memory into
+ "dst" using "mask" (elements are zeroed out when the high bit of the corresponding
+ element is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF mask[i+63]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memory into
+ "dst" using "mask" (elements are zeroed out when the high bit of the corresponding
+ element is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF mask[i+63]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[63:0] > 63
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using "mask" (elements are zeroed out when the high bit of the corresponding
+ element is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF mask[i+31]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using "mask" (elements are zeroed out when the high bit of the corresponding
+ element is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF mask[i+31]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+ Load 256-bits of integer data from unaligned memory into "dst". This intrinsic
+ may perform better than "_mm256_loadu_si256" when the data crosses a cache line
+ boundary.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Load
+
+
+
+
+
+ Load two 128-bit values (composed of 4 packed single-precision (32-bit)
+ floating-point elements) from memory, and combine them into a 256-bit value in "dst".
+ "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
+
+ dst[127:0] := MEM[loaddr+127:loaddr]
+ dst[255:128] := MEM[hiaddr+127:hiaddr]
+ dst[MAX:256] := 0
+
+ AVX
+
+ Load
+
+
+
+
+
+ Load two 128-bit values (composed of 2 packed double-precision (64-bit)
+ floating-point elements) from memory, and combine them into a 256-bit value in "dst".
+ "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
+
+ dst[127:0] := MEM[loaddr+127:loaddr]
+ dst[255:128] := MEM[hiaddr+127:hiaddr]
+ dst[MAX:256] := 0
+
+ AVX
+
+ Load
+
+
+
+
+
+ Load two 128-bit values (composed of integer data) from memory, and combine
+ them into a 256-bit value in "dst".
+ "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
+
+ dst[127:0] := MEM[loaddr+127:loaddr]
+ dst[255:128] := MEM[hiaddr+127:hiaddr]
+ dst[MAX:256] := 0
+
+ AVX
+
+ Load
+
+
+
+
+
+ Store 256-bits (composed of 4 packed double-precision (64-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 8 packed single-precision (32-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 4 packed double-precision (64-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 8 packed single-precision (32-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX
+
+ Store
+
+
+
+
+
+ Store 256-bits of integer data from "a" into memory.
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX
+
+ Store
+
+
+
+
+
+ Store 256-bits of integer data from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX
+
+ Store
+
+
+
+
+
+
+ Store packed double-precision (64-bit) floating-point elements from "a" into
+ memory using "mask".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF mask[i+63]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX
+
+ Store
+
+
+
+
+
+
+ Store packed double-precision (64-bit) floating-point elements from "a" into
+ memory using "mask".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF mask[i+63]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX
+
+ Store
+
+
+
+
+
+
+ Store packed single-precision (32-bit) floating-point elements from "a" into
+ memory using "mask".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF mask[i+31]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX
+
+ Store
+
+
+
+
+
+
+ Store packed single-precision (32-bit) floating-point elements from "a" into
+ memory using "mask".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF mask[i+31]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX
+
+ Store
+
+
+
+
+
+ Store 256-bits of integer data from "a" into memory using a non-temporal memory
+ hint.
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 4 packed double-precision (64-bit) floating-point
+ elements) from "a" into memory using a non-temporal memory hint.
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 8 packed single-precision (32-bit) floating-point
+ elements) from "a" into memory using a non-temporal memory hint.
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX
+
+ Store
+
+
+
+
+
+
+ Store the high and low 128-bit halves (each composed of 4 packed
+ single-precision (32-bit) floating-point elements) from "a" into memory two different
+ 128-bit locations.
+ "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
+
+ MEM[loaddr+127:loaddr] := a[127:0]
+ MEM[hiaddr+127:hiaddr] := a[255:128]
+
+ AVX
+
+ Store
+
+
+
+
+
+
+ Store the high and low 128-bit halves (each composed of 2 packed
+ double-precision (64-bit) floating-point elements) from "a" into memory two different
+ 128-bit locations.
+ "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
+
+ MEM[loaddr+127:loaddr] := a[127:0]
+ MEM[hiaddr+127:hiaddr] := a[255:128]
+
+ AVX
+
+ Store
+
+
+
+
+
+
+ Store the high and low 128-bit halves (each composed of integer data) from "a"
+ into memory two different 128-bit locations.
+ "hiaddr" and "loaddr" do not need to be aligned on any particular boundary.
+
+ MEM[loaddr+127:loaddr] := a[127:0]
+ MEM[hiaddr+127:hiaddr] := a[255:128]
+
+ AVX
+
+ Store
+
+
+
+
+ Duplicate odd-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst".
+
+ dst[31:0] := a[63:32]
+ dst[63:32] := a[63:32]
+ dst[95:64] := a[127:96]
+ dst[127:96] := a[127:96]
+ dst[159:128] := a[191:160]
+ dst[191:160] := a[191:160]
+ dst[223:192] := a[255:224]
+ dst[255:224] := a[255:224]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Move
+
+
+
+
+ Duplicate even-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst".
+
+ dst[31:0] := a[31:0]
+ dst[63:32] := a[31:0]
+ dst[95:64] := a[95:64]
+ dst[127:96] := a[95:64]
+ dst[159:128] := a[159:128]
+ dst[191:160] := a[159:128]
+ dst[223:192] := a[223:192]
+ dst[255:224] := a[223:192]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Move
+
+
+
+
+ Duplicate even-indexed double-precision (64-bit) floating-point elements from
+ "a", and store the results in "dst".
+
+ dst[63:0] := a[63:0]
+ dst[127:64] := a[63:0]
+ dst[191:128] := a[191:128]
+ dst[255:192] := a[191:128]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Move
+
+
+
+
+ Compute the approximate reciprocal of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst". The maximum relative
+ error for this approximation is less than 1.5*2^-12.
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := 1.0 / a[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal square root of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst". The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Elementary Math Functions
+
+
+
+
+ Set each bit of mask "dst" based on the most significant bit of the
+ corresponding packed double-precision (64-bit) floating-point element in "a".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF a[i+63]
+ dst[j] := 1
+ ELSE
+ dst[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:4] := 0
+
+
+ AVX
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask "dst" based on the most significant bit of the
+ corresponding packed single-precision (32-bit) floating-point element in "a".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF a[i+31]
+ dst[j] := 1
+ ELSE
+ dst[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:8] := 0
+
+
+ AVX
+
+ Miscellaneous
+
+
+
+
+ Return vector of type __m256d with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ AVX
+
+ Set
+
+
+
+
+ Return vector of type __m256 with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ AVX
+
+ Set
+
+
+
+
+ Return vector of type __m256i with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+ Set packed double-precision (64-bit) floating-point elements in "dst" with the
+ supplied values.
+
+ dst[63:0] := e0
+ dst[127:64] := e1
+ dst[191:128] := e2
+ dst[255:192] := e3
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed single-precision (32-bit) floating-point elements in "dst" with the
+ supplied values.
+
+ dst[31:0] := e0
+ dst[63:32] := e1
+ dst[95:64] := e2
+ dst[127:96] := e3
+ dst[159:128] := e4
+ dst[191:160] := e5
+ dst[223:192] := e6
+ dst[255:224] := e7
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 8-bit integers in "dst" with the supplied values.
+
+ dst[7:0] := e0
+ dst[15:8] := e1
+ dst[23:16] := e2
+ dst[31:24] := e3
+ dst[39:32] := e4
+ dst[47:40] := e5
+ dst[55:48] := e6
+ dst[63:56] := e7
+ dst[71:64] := e8
+ dst[79:72] := e9
+ dst[87:80] := e10
+ dst[95:88] := e11
+ dst[103:96] := e12
+ dst[111:104] := e13
+ dst[119:112] := e14
+ dst[127:120] := e15
+ dst[135:128] := e16
+ dst[143:136] := e17
+ dst[151:144] := e18
+ dst[159:152] := e19
+ dst[167:160] := e20
+ dst[175:168] := e21
+ dst[183:176] := e22
+ dst[191:184] := e23
+ dst[199:192] := e24
+ dst[207:200] := e25
+ dst[215:208] := e26
+ dst[223:216] := e27
+ dst[231:224] := e28
+ dst[239:232] := e29
+ dst[247:240] := e30
+ dst[255:248] := e31
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 16-bit integers in "dst" with the supplied values.
+
+ dst[15:0] := e0
+ dst[31:16] := e1
+ dst[47:32] := e2
+ dst[63:48] := e3
+ dst[79:64] := e4
+ dst[95:80] := e5
+ dst[111:96] := e6
+ dst[127:112] := e7
+ dst[143:128] := e8
+ dst[159:144] := e9
+ dst[175:160] := e10
+ dst[191:176] := e11
+ dst[207:192] := e12
+ dst[223:208] := e13
+ dst[239:224] := e14
+ dst[255:240] := e15
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 32-bit integers in "dst" with the supplied values.
+
+ dst[31:0] := e0
+ dst[63:32] := e1
+ dst[95:64] := e2
+ dst[127:96] := e3
+ dst[159:128] := e4
+ dst[191:160] := e5
+ dst[223:192] := e6
+ dst[255:224] := e7
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+ Set packed 64-bit integers in "dst" with the supplied values.
+
+ dst[63:0] := e0
+ dst[127:64] := e1
+ dst[191:128] := e2
+ dst[255:192] := e3
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+ Set packed double-precision (64-bit) floating-point elements in "dst" with the
+ supplied values in reverse order.
+
+ dst[63:0] := e3
+ dst[127:64] := e2
+ dst[191:128] := e1
+ dst[255:192] := e0
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed single-precision (32-bit) floating-point elements in "dst" with the
+ supplied values in reverse order.
+
+ dst[31:0] := e7
+ dst[63:32] := e6
+ dst[95:64] := e5
+ dst[127:96] := e4
+ dst[159:128] := e3
+ dst[191:160] := e2
+ dst[223:192] := e1
+ dst[255:224] := e0
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 8-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[7:0] := e31
+ dst[15:8] := e30
+ dst[23:16] := e29
+ dst[31:24] := e28
+ dst[39:32] := e27
+ dst[47:40] := e26
+ dst[55:48] := e25
+ dst[63:56] := e24
+ dst[71:64] := e23
+ dst[79:72] := e22
+ dst[87:80] := e21
+ dst[95:88] := e20
+ dst[103:96] := e19
+ dst[111:104] := e18
+ dst[119:112] := e17
+ dst[127:120] := e16
+ dst[135:128] := e15
+ dst[143:136] := e14
+ dst[151:144] := e13
+ dst[159:152] := e12
+ dst[167:160] := e11
+ dst[175:168] := e10
+ dst[183:176] := e9
+ dst[191:184] := e8
+ dst[199:192] := e7
+ dst[207:200] := e6
+ dst[215:208] := e5
+ dst[223:216] := e4
+ dst[231:224] := e3
+ dst[239:232] := e2
+ dst[247:240] := e1
+ dst[255:248] := e0
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 16-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[15:0] := e15
+ dst[31:16] := e14
+ dst[47:32] := e13
+ dst[63:48] := e12
+ dst[79:64] := e11
+ dst[95:80] := e10
+ dst[111:96] := e9
+ dst[127:112] := e8
+ dst[143:128] := e7
+ dst[159:144] := e6
+ dst[175:160] := e5
+ dst[191:176] := e4
+ dst[207:192] := e3
+ dst[223:208] := e2
+ dst[239:224] := e1
+ dst[255:240] := e0
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 32-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[31:0] := e7
+ dst[63:32] := e6
+ dst[95:64] := e5
+ dst[127:96] := e4
+ dst[159:128] := e3
+ dst[191:160] := e2
+ dst[223:192] := e1
+ dst[255:224] := e0
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+
+
+ Set packed 64-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[63:0] := e3
+ dst[127:64] := e2
+ dst[191:128] := e1
+ dst[255:192] := e0
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+ Broadcast double-precision (64-bit) floating-point value "a" to all elements of
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+ Broadcast single-precision (32-bit) floating-point value "a" to all elements of
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+ Broadcast 8-bit integer "a" to all elements of "dst". This intrinsic may
+ generate the "vpbroadcastb".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := a[7:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+ Broadcast 16-bit integer "a" to all all elements of "dst". This intrinsic may
+ generate the "vpbroadcastw".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := a[15:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+ Broadcast 32-bit integer "a" to all elements of "dst". This intrinsic may
+ generate the "vpbroadcastd".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+ Broadcast 64-bit integer "a" to all elements of "dst". This intrinsic may
+ generate the "vpbroadcastq".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX
+
+ Set
+
+
+
+
+
+ Set packed __m256 vector "dst" with the supplied values.
+
+ dst[127:0] := lo[127:0]
+ dst[255:128] := hi[127:0]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Set
+
+
+
+
+
+ Set packed __m256d vector "dst" with the supplied values.
+
+ dst[127:0] := lo[127:0]
+ dst[255:128] := hi[127:0]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Set
+
+
+
+
+
+ Set packed __m256i vector "dst" with the supplied values.
+
+ dst[127:0] := lo[127:0]
+ dst[255:128] := hi[127:0]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Set
+
+
+
+
+
+ Set packed __m256 vector "dst" with the supplied values.
+
+ dst[127:0] := lo[127:0]
+ dst[255:128] := hi[127:0]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Set
+
+
+
+
+
+ Set packed __m256d vector "dst" with the supplied values.
+
+ dst[127:0] := lo[127:0]
+ dst[255:128] := hi[127:0]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Set
+
+
+
+
+
+ Set packed __m256i vector "dst" with the supplied values.
+
+ dst[127:0] := lo[127:0]
+ dst[255:128] := hi[127:0]
+ dst[MAX:256] := 0
+
+
+ AVX
+
+ Set
+
+
+
+
+ Cast vector of type __m256d to type __m256.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m256 to type __m256d.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m256 to type __m256i. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m256d to type __m256i. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m256i to type __m256. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m256i to type __m256d. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m256 to type __m128. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m256d to type __m128d. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m256i to type __m128i. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m128 to type __m256; the upper 128 bits of the result are
+ undefined. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m128d to type __m256d; the upper 128 bits of the result
+ are undefined. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m128i to type __m256i; the upper 128 bits of the result
+ are undefined. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m128 to type __m256; the upper 128 bits of the result are
+ zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m128d to type __m256d; the upper 128 bits of the result
+ are zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+ Cast vector of type __m128i to type __m256i; the upper 128 bits of the result
+ are zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX
+
+ Cast
+
+
+
+
+
+
+
+ Extract an 8-bit integer from "a", selected with "index", and store the result
+ in "dst".
+
+ dst[7:0] := (a[255:0] >> (index[4:0] * 8))[7:0]
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Extract a 16-bit integer from "a", selected with "index", and store the result
+ in "dst".
+
+ dst[15:0] := (a[255:0] >> (index[3:0] * 16))[15:0]
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed 16-bit integers from "a" and "b" within 128-bit lanes using
+ control mask "imm8", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF imm8[j%8]
+ dst[i+15:i] := b[i+15:i]
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed 32-bit integers from "a" and "b" using control mask "imm8", and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF imm8[j]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed 32-bit integers from "a" and "b" using control mask "imm8", and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF imm8[j]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed 8-bit integers from "a" and "b" using "mask", and store the
+ results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ IF mask[i+7]
+ dst[i+7:i] := b[i+7:i]
+ ELSE
+ dst[i+7:i] := a[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low packed 8-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := a[7:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low packed 8-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := a[7:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low packed 32-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low packed 32-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low packed 64-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low packed 64-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low double-precision (64-bit) floating-point element from "a" to
+ all elements of "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low double-precision (64-bit) floating-point element from "a" to
+ all elements of "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast 128 bits of integer data from "a" to all 128-bit lanes in "dst".
+
+ dst[127:0] := a[127:0]
+ dst[255:128] := a[127:0]
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast 128 bits of integer data from "a" to all 128-bit lanes in "dst".
+
+ dst[127:0] := a[127:0]
+ dst[255:128] := a[127:0]
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low single-precision (32-bit) floating-point element from "a" to
+ all elements of "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low single-precision (32-bit) floating-point element from "a" to
+ all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := a[15:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := a[15:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Extract 128 bits (composed of integer data) from "a", selected with "imm8", and
+ store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits (composed of integer data) from "b"
+ into "dst" at the location specified by "imm8".
+
+ dst[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 128-bits (composed of integer data) selected by "imm8" from "a" and
+ "b", and store the results in "dst".
+
+ DEFINE SELECT4(src1, src2, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src1[127:0]
+ 1: tmp[127:0] := src1[255:128]
+ 2: tmp[127:0] := src2[127:0]
+ 3: tmp[127:0] := src2[255:128]
+ ESAC
+ IF control[3]
+ tmp[127:0] := 0
+ FI
+ RETURN tmp[127:0]
+ }
+ dst[127:0] := SELECT4(a[255:0], b[255:0], imm8[3:0])
+ dst[255:128] := SELECT4(a[255:0], b[255:0], imm8[7:4])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Shuffle 64-bit integers in "a" across lanes using the control in "imm8", and
+ store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" across lanes
+ using the control in "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Shuffle 32-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ id := idx[i+2:i]*32
+ dst[i+31:i] := a[id+31:id]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx".
+
+ FOR j := 0 to 7
+ i := j*32
+ id := idx[i+2:i]*32
+ dst[i+31:i] := a[id+31:id]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Shuffle 32-bit integers in "a" within 128-bit lanes using the control in
+ "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Shuffle 8-bit integers in "a" within 128-bit lanes according to shuffle control
+ mask in the corresponding 8-bit element of "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ IF b[i+7] == 1
+ dst[i+7:i] := 0
+ ELSE
+ index[3:0] := b[i+3:i]
+ dst[i+7:i] := a[index*8+7:index*8]
+ FI
+ IF b[128+i+7] == 1
+ dst[128+i+7:128+i] := 0
+ ELSE
+ index[3:0] := b[128+i+3:128+i]
+ dst[128+i+7:128+i] := a[128+index*8+7:128+index*8]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with
+ the low 64 bits of 128-bit lanes being copied from from "a" to "dst".
+
+ dst[63:0] := a[63:0]
+ dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
+ dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
+ dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
+ dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
+ dst[191:128] := a[191:128]
+ dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
+ dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
+ dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
+ dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with
+ the high 64 bits of 128-bit lanes being copied from from "a" to "dst".
+
+ dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
+ dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
+ dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
+ dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
+ dst[127:64] := a[127:64]
+ dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
+ dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
+ dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
+ dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
+ dst[255:192] := a[255:192]
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the high half of each 128-bit lane in
+ "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[71:64]
+ dst[15:8] := src2[71:64]
+ dst[23:16] := src1[79:72]
+ dst[31:24] := src2[79:72]
+ dst[39:32] := src1[87:80]
+ dst[47:40] := src2[87:80]
+ dst[55:48] := src1[95:88]
+ dst[63:56] := src2[95:88]
+ dst[71:64] := src1[103:96]
+ dst[79:72] := src2[103:96]
+ dst[87:80] := src1[111:104]
+ dst[95:88] := src2[111:104]
+ dst[103:96] := src1[119:112]
+ dst[111:104] := src2[119:112]
+ dst[119:112] := src1[127:120]
+ dst[127:120] := src2[127:120]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[79:64]
+ dst[31:16] := src2[79:64]
+ dst[47:32] := src1[95:80]
+ dst[63:48] := src2[95:80]
+ dst[79:64] := src1[111:96]
+ dst[95:80] := src2[111:96]
+ dst[111:96] := src1[127:112]
+ dst[127:112] := src2[127:112]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[7:0]
+ dst[15:8] := src2[7:0]
+ dst[23:16] := src1[15:8]
+ dst[31:24] := src2[15:8]
+ dst[39:32] := src1[23:16]
+ dst[47:40] := src2[23:16]
+ dst[55:48] := src1[31:24]
+ dst[63:56] := src2[31:24]
+ dst[71:64] := src1[39:32]
+ dst[79:72] := src2[39:32]
+ dst[87:80] := src1[47:40]
+ dst[95:88] := src2[47:40]
+ dst[103:96] := src1[55:48]
+ dst[111:104] := src2[55:48]
+ dst[119:112] := src1[63:56]
+ dst[127:120] := src2[63:56]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[15:0]
+ dst[31:16] := src2[15:0]
+ dst[47:32] := src1[31:16]
+ dst[63:48] := src2[31:16]
+ dst[79:64] := src1[47:32]
+ dst[95:80] := src2[47:32]
+ dst[111:96] := src1[63:48]
+ dst[127:112] := src2[63:48]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Swizzle
+
+
+
+
+ Compute the absolute value of packed signed 8-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := ABS(a[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+ Compute the absolute value of packed signed 16-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ABS(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+ Compute the absolute value of packed signed 32-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ABS(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ maximum values in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ maximum values in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ minimum values in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ minimum values in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Special Math Functions
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := a[i+7:i] + b[i+7:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := a[i+15:i] + b[i+15:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Add packed 32-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Add packed 64-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b" using saturation, and store the
+ results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b" using saturation, and store the
+ results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of 16-bit integers in "a" and "b", and pack the
+ signed 16-bit results in "dst".
+
+ dst[15:0] := a[31:16] + a[15:0]
+ dst[31:16] := a[63:48] + a[47:32]
+ dst[47:32] := a[95:80] + a[79:64]
+ dst[63:48] := a[127:112] + a[111:96]
+ dst[79:64] := b[31:16] + b[15:0]
+ dst[95:80] := b[63:48] + b[47:32]
+ dst[111:96] := b[95:80] + b[79:64]
+ dst[127:112] := b[127:112] + b[111:96]
+ dst[143:128] := a[159:144] + a[143:128]
+ dst[159:144] := a[191:176] + a[175:160]
+ dst[175:160] := a[223:208] + a[207:192]
+ dst[191:176] := a[255:240] + a[239:224]
+ dst[207:192] := b[159:144] + b[143:128]
+ dst[223:208] := b[191:176] + b[175:160]
+ dst[239:224] := b[223:208] + b[207:192]
+ dst[255:240] := b[255:240] + b[239:224]
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of 32-bit integers in "a" and "b", and pack the
+ signed 32-bit results in "dst".
+
+ dst[31:0] := a[63:32] + a[31:0]
+ dst[63:32] := a[127:96] + a[95:64]
+ dst[95:64] := b[63:32] + b[31:0]
+ dst[127:96] := b[127:96] + b[95:64]
+ dst[159:128] := a[191:160] + a[159:128]
+ dst[191:160] := a[255:224] + a[223:192]
+ dst[223:192] := b[191:160] + b[159:128]
+ dst[255:224] := b[255:224] + b[223:192]
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of signed 16-bit integers in "a" and "b" using
+ saturation, and pack the signed 16-bit results in "dst".
+
+ dst[15:0] := Saturate16(a[31:16] + a[15:0])
+ dst[31:16] := Saturate16(a[63:48] + a[47:32])
+ dst[47:32] := Saturate16(a[95:80] + a[79:64])
+ dst[63:48] := Saturate16(a[127:112] + a[111:96])
+ dst[79:64] := Saturate16(b[31:16] + b[15:0])
+ dst[95:80] := Saturate16(b[63:48] + b[47:32])
+ dst[111:96] := Saturate16(b[95:80] + b[79:64])
+ dst[127:112] := Saturate16(b[127:112] + b[111:96])
+ dst[143:128] := Saturate16(a[159:144] + a[143:128])
+ dst[159:144] := Saturate16(a[191:176] + a[175:160])
+ dst[175:160] := Saturate16(a[223:208] + a[207:192])
+ dst[191:176] := Saturate16(a[255:240] + a[239:224])
+ dst[207:192] := Saturate16(b[159:144] + b[143:128])
+ dst[223:208] := Saturate16(b[191:176] + b[175:160])
+ dst[239:224] := Saturate16(b[223:208] + b[207:192])
+ dst[255:240] := Saturate16(b[255:240] + b[239:224])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of 16-bit integers in "a" and "b", and
+ pack the signed 16-bit results in "dst".
+
+ dst[15:0] := a[15:0] - a[31:16]
+ dst[31:16] := a[47:32] - a[63:48]
+ dst[47:32] := a[79:64] - a[95:80]
+ dst[63:48] := a[111:96] - a[127:112]
+ dst[79:64] := b[15:0] - b[31:16]
+ dst[95:80] := b[47:32] - b[63:48]
+ dst[111:96] := b[79:64] - b[95:80]
+ dst[127:112] := b[111:96] - b[127:112]
+ dst[143:128] := a[143:128] - a[159:144]
+ dst[159:144] := a[175:160] - a[191:176]
+ dst[175:160] := a[207:192] - a[223:208]
+ dst[191:176] := a[239:224] - a[255:240]
+ dst[207:192] := b[143:128] - b[159:144]
+ dst[223:208] := b[175:160] - b[191:176]
+ dst[239:224] := b[207:192] - b[223:208]
+ dst[255:240] := b[239:224] - b[255:240]
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of 32-bit integers in "a" and "b", and
+ pack the signed 32-bit results in "dst".
+
+ dst[31:0] := a[31:0] - a[63:32]
+ dst[63:32] := a[95:64] - a[127:96]
+ dst[95:64] := b[31:0] - b[63:32]
+ dst[127:96] := b[95:64] - b[127:96]
+ dst[159:128] := a[159:128] - a[191:160]
+ dst[191:160] := a[223:192] - a[255:224]
+ dst[223:192] := b[159:128] - b[191:160]
+ dst[255:224] := b[223:192] - b[255:224]
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of signed 16-bit integers in "a" and "b"
+ using saturation, and pack the signed 16-bit results in "dst".
+
+ dst[15:0] := Saturate16(a[15:0] - a[31:16])
+ dst[31:16] := Saturate16(a[47:32] - a[63:48])
+ dst[47:32] := Saturate16(a[79:64] - a[95:80])
+ dst[63:48] := Saturate16(a[111:96] - a[127:112])
+ dst[79:64] := Saturate16(b[15:0] - b[31:16])
+ dst[95:80] := Saturate16(b[47:32] - b[63:48])
+ dst[111:96] := Saturate16(b[79:64] - b[95:80])
+ dst[127:112] := Saturate16(b[111:96] - b[127:112])
+ dst[143:128] := Saturate16(a[143:128] - a[159:144])
+ dst[159:144] := Saturate16(a[175:160] - a[191:176])
+ dst[175:160] := Saturate16(a[207:192] - a[223:208])
+ dst[191:176] := Saturate16(a[239:224] - a[255:240])
+ dst[207:192] := Saturate16(b[143:128] - b[159:144])
+ dst[223:208] := Saturate16(b[175:160] - b[191:176])
+ dst[239:224] := Saturate16(b[207:192] - b[223:208])
+ dst[255:240] := Saturate16(b[239:224] - b[255:240])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers,
+ and pack the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) +
+ SignExtend32(a[i+15:i]*b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Vertically multiply each unsigned 8-bit integer from "a" with the corresponding
+ signed 8-bit integer from "b", producing intermediate signed 16-bit integers.
+ Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the
+ saturated results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the low signed 32-bit integers from each packed 64-bit element in "a"
+ and "b", and store the signed 64-bit results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the low unsigned 32-bit integers from each packed 64-bit element in
+ "a" and "b", and store the unsigned 64-bit results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[i+31:i] * b[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed unsigned 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Truncate each intermediate integer to the 18 most significant
+ bits, round by adding 1, and store bits [16:1] to "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
+ dst[i+15:i] := tmp[16:1]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[15:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed signed 32-bit integers in "a" and "b", producing
+ intermediate 64-bit integers, and store the low 32 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ tmp[63:0] := a[i+31:i] * b[i+31:i]
+ dst[i+31:i] := tmp[31:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Compute the absolute differences of packed unsigned 8-bit integers in "a" and
+ "b", then horizontally sum each consecutive 8 differences to produce four unsigned
+ 16-bit integers, and pack these unsigned 16-bit integers in the low 16 bits of 64-bit
+ elements in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i])
+ ENDFOR
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+15:i] := tmp[i+7:i] + tmp[i+15:i+8] + tmp[i+23:i+16] + tmp[i+31:i+24] + \
+ tmp[i+39:i+32] + tmp[i+47:i+40] + tmp[i+55:i+48] + tmp[i+63:i+56]
+ dst[i+63:i+16] := 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Negate packed signed 8-bit integers in "a" when the corresponding signed 8-bit
+ integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed
+ out when the corresponding element in "b" is zero.
+
+ FOR j := 0 to 31
+ i := j*8
+ IF b[i+7:i] < 0
+ dst[i+7:i] := -(a[i+7:i])
+ ELSE IF b[i+7:i] == 0
+ dst[i+7:i] := 0
+ ELSE
+ dst[i+7:i] := a[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Negate packed signed 16-bit integers in "a" when the corresponding signed
+ 16-bit integer in "b" is negative, and store the results in "dst". Element in "dst" are
+ zeroed out when the corresponding element in "b" is zero.
+
+ FOR j := 0 to 15
+ i := j*16
+ IF b[i+15:i] < 0
+ dst[i+15:i] := -(a[i+15:i])
+ ELSE IF b[i+15:i] == 0
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Negate packed signed 32-bit integers in "a" when the corresponding signed
+ 32-bit integer in "b" is negative, and store the results in "dst". Element in "dst" are
+ zeroed out when the corresponding element in "b" is zero.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF b[i+31:i] < 0
+ dst[i+31:i] := -(a[i+31:i])
+ ELSE IF b[i+31:i] == 0
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := a[i+7:i] - b[i+7:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := a[i+15:i] - b[i+15:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a"
+ using saturation, and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in
+ "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit
+ integers in "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit
+ integers in "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Arithmetic
+
+
+
+
+
+
+ Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary
+ result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst".
+
+ FOR j := 0 to 1
+ i := j*128
+ tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
+ dst[i+127:i] := tmp[127:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Miscellaneous
+
+
+
+
+ Create mask from the most significant bit of each 8-bit element in "a", and
+ store the result in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[j] := a[i+7]
+ ENDFOR
+
+
+ AVX2
+
+ Miscellaneous
+
+
+
+
+
+
+ Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit
+ integers in "a" compared to those in "b", and store the 16-bit results in "dst".
+ Eight SADs are performed for each 128-bit lane using one quadruplet from "b" and eight
+ quadruplets from "a". One quadruplet is selected from "b" starting at on the offset
+ specified in "imm8". Eight quadruplets are formed from sequential 8-bit integers
+ selected from "a" starting at the offset specified in "imm8".
+
+ DEFINE MPSADBW(a[127:0], b[127:0], imm8[2:0]) {
+ a_offset := imm8[2]*32
+ b_offset := imm8[1:0]*32
+ FOR j := 0 to 7
+ i := j*8
+ k := a_offset+i
+ l := b_offset
+ tmp[i*2+15:i*2] := ABS(Signed(a[k+7:k] - b[l+7:l])) + ABS(Signed(a[k+15:k+8] -
+ b[l+15:l+8])) + \
+ ABS(Signed(a[k+23:k+16] - b[l+23:l+16])) + ABS(Signed(a[k+31:k+24] - b[l+31:l+24]))
+ ENDFOR
+ RETURN tmp[127:0]
+ }
+ dst[127:0] := MPSADBW(a[127:0], b[127:0], imm8[2:0])
+ dst[255:128] := MPSADBW(a[255:128], b[255:128], imm8[5:3])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using signed saturation, and store the results in "dst".
+
+ dst[7:0] := Saturate8(a[15:0])
+ dst[15:8] := Saturate8(a[31:16])
+ dst[23:16] := Saturate8(a[47:32])
+ dst[31:24] := Saturate8(a[63:48])
+ dst[39:32] := Saturate8(a[79:64])
+ dst[47:40] := Saturate8(a[95:80])
+ dst[55:48] := Saturate8(a[111:96])
+ dst[63:56] := Saturate8(a[127:112])
+ dst[71:64] := Saturate8(b[15:0])
+ dst[79:72] := Saturate8(b[31:16])
+ dst[87:80] := Saturate8(b[47:32])
+ dst[95:88] := Saturate8(b[63:48])
+ dst[103:96] := Saturate8(b[79:64])
+ dst[111:104] := Saturate8(b[95:80])
+ dst[119:112] := Saturate8(b[111:96])
+ dst[127:120] := Saturate8(b[127:112])
+ dst[135:128] := Saturate8(a[143:128])
+ dst[143:136] := Saturate8(a[159:144])
+ dst[151:144] := Saturate8(a[175:160])
+ dst[159:152] := Saturate8(a[191:176])
+ dst[167:160] := Saturate8(a[207:192])
+ dst[175:168] := Saturate8(a[223:208])
+ dst[183:176] := Saturate8(a[239:224])
+ dst[191:184] := Saturate8(a[255:240])
+ dst[199:192] := Saturate8(b[143:128])
+ dst[207:200] := Saturate8(b[159:144])
+ dst[215:208] := Saturate8(b[175:160])
+ dst[223:216] := Saturate8(b[191:176])
+ dst[231:224] := Saturate8(b[207:192])
+ dst[239:232] := Saturate8(b[223:208])
+ dst[247:240] := Saturate8(b[239:224])
+ dst[255:248] := Saturate8(b[255:240])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using signed saturation, and store the results in "dst".
+
+ dst[15:0] := Saturate16(a[31:0])
+ dst[31:16] := Saturate16(a[63:32])
+ dst[47:32] := Saturate16(a[95:64])
+ dst[63:48] := Saturate16(a[127:96])
+ dst[79:64] := Saturate16(b[31:0])
+ dst[95:80] := Saturate16(b[63:32])
+ dst[111:96] := Saturate16(b[95:64])
+ dst[127:112] := Saturate16(b[127:96])
+ dst[143:128] := Saturate16(a[159:128])
+ dst[159:144] := Saturate16(a[191:160])
+ dst[175:160] := Saturate16(a[223:192])
+ dst[191:176] := Saturate16(a[255:224])
+ dst[207:192] := Saturate16(b[159:128])
+ dst[223:208] := Saturate16(b[191:160])
+ dst[239:224] := Saturate16(b[223:192])
+ dst[255:240] := Saturate16(b[255:224])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using unsigned saturation, and store the results in "dst".
+
+ dst[7:0] := SaturateU8(a[15:0])
+ dst[15:8] := SaturateU8(a[31:16])
+ dst[23:16] := SaturateU8(a[47:32])
+ dst[31:24] := SaturateU8(a[63:48])
+ dst[39:32] := SaturateU8(a[79:64])
+ dst[47:40] := SaturateU8(a[95:80])
+ dst[55:48] := SaturateU8(a[111:96])
+ dst[63:56] := SaturateU8(a[127:112])
+ dst[71:64] := SaturateU8(b[15:0])
+ dst[79:72] := SaturateU8(b[31:16])
+ dst[87:80] := SaturateU8(b[47:32])
+ dst[95:88] := SaturateU8(b[63:48])
+ dst[103:96] := SaturateU8(b[79:64])
+ dst[111:104] := SaturateU8(b[95:80])
+ dst[119:112] := SaturateU8(b[111:96])
+ dst[127:120] := SaturateU8(b[127:112])
+ dst[135:128] := SaturateU8(a[143:128])
+ dst[143:136] := SaturateU8(a[159:144])
+ dst[151:144] := SaturateU8(a[175:160])
+ dst[159:152] := SaturateU8(a[191:176])
+ dst[167:160] := SaturateU8(a[207:192])
+ dst[175:168] := SaturateU8(a[223:208])
+ dst[183:176] := SaturateU8(a[239:224])
+ dst[191:184] := SaturateU8(a[255:240])
+ dst[199:192] := SaturateU8(b[143:128])
+ dst[207:200] := SaturateU8(b[159:144])
+ dst[215:208] := SaturateU8(b[175:160])
+ dst[223:216] := SaturateU8(b[191:176])
+ dst[231:224] := SaturateU8(b[207:192])
+ dst[239:232] := SaturateU8(b[223:208])
+ dst[247:240] := SaturateU8(b[239:224])
+ dst[255:248] := SaturateU8(b[255:240])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using unsigned saturation, and store the results in "dst".
+
+ dst[15:0] := SaturateU16(a[31:0])
+ dst[31:16] := SaturateU16(a[63:32])
+ dst[47:32] := SaturateU16(a[95:64])
+ dst[63:48] := SaturateU16(a[127:96])
+ dst[79:64] := SaturateU16(b[31:0])
+ dst[95:80] := SaturateU16(b[63:32])
+ dst[111:96] := SaturateU16(b[95:64])
+ dst[127:112] := SaturateU16(b[127:96])
+ dst[143:128] := SaturateU16(a[159:128])
+ dst[159:144] := SaturateU16(a[191:160])
+ dst[175:160] := SaturateU16(a[223:192])
+ dst[191:176] := SaturateU16(a[255:224])
+ dst[207:192] := SaturateU16(b[159:128])
+ dst[223:208] := SaturateU16(b[191:160])
+ dst[239:224] := SaturateU16(b[223:192])
+ dst[255:240] := SaturateU16(b[255:224])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Miscellaneous
+
+
+
+
+
+ Compute the bitwise AND of 256 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[255:0] := (a[255:0] AND b[255:0])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of 256 bits (representing integer data) in "a" and then
+ AND with "b", and store the result in "dst".
+
+ dst[255:0] := ((NOT a[255:0]) AND b[255:0])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of 256 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[255:0] := (a[255:0] OR b[255:0])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of 256 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[255:0] := (a[255:0] XOR b[255:0])
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Logical
+
+
+
+
+
+ Average packed unsigned 8-bit integers in "a" and "b", and store the results in
+ "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Probability/Statistics
+
+
+
+
+
+ Average packed unsigned 16-bit integers in "a" and "b", and store the results
+ in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Probability/Statistics
+
+
+
+
+
+ Compare packed 8-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := ( a[i+7:i] == b[i+7:i] ) ? 0xFF : 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Compare
+
+
+
+
+
+ Compare packed 16-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ( a[i+15:i] == b[i+15:i] ) ? 0xFFFF : 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Compare
+
+
+
+
+
+ Compare packed 32-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Compare
+
+
+
+
+
+ Compare packed 64-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ( a[i+63:i] == b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store
+ the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := ( a[i+7:i] > b[i+7:i] ) ? 0xFF : 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than, and
+ store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ( a[i+15:i] > b[i+15:i] ) ? 0xFFFF : 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than, and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] > b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than, and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ( a[i+63:i] > b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Compare
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst".
+
+ FOR j:= 0 to 7
+ i := 32*j
+ k := 16*j
+ dst[i+31:i] := SignExtend32(a[k+15:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst".
+
+ FOR j:= 0 to 3
+ i := 64*j
+ k := 16*j
+ dst[i+63:i] := SignExtend64(a[k+15:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+ Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst".
+
+ FOR j:= 0 to 3
+ i := 64*j
+ k := 32*j
+ dst[i+63:i] := SignExtend64(a[k+31:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ l := j*16
+ dst[l+15:l] := SignExtend16(a[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 8*j
+ dst[i+31:i] := SignExtend32(a[k+7:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+ Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 8*j
+ dst[i+63:i] := SignExtend64(a[k+7:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 16*j
+ dst[i+31:i] := ZeroExtend32(a[k+15:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst".
+
+ FOR j:= 0 to 3
+ i := 64*j
+ k := 16*j
+ dst[i+63:i] := ZeroExtend64(a[k+15:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst".
+
+ FOR j:= 0 to 3
+ i := 64*j
+ k := 32*j
+ dst[i+63:i] := ZeroExtend64(a[k+31:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ l := j*16
+ dst[l+15:l] := ZeroExtend16(a[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 8*j
+ dst[i+31:i] := ZeroExtend32(a[k+7:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 8 byte sof "a" to packed
+ 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 8*j
+ dst[i+63:i] := ZeroExtend64(a[k+7:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Convert
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from
+ "src" when the highest bit is not set in the corresponding element). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*32
+ IF mask[i+63]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ mask[MAX:128] := 0
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from
+ "src" when the highest bit is not set in the corresponding element). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*32
+ IF mask[i+63]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ mask[MAX:256] := 0
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from
+ "src" when the highest bit is not set in the corresponding element). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*32
+ IF mask[i+31]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ mask[MAX:128] := 0
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from
+ "src" when the highest bit is not set in the corresponding element). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*32
+ IF mask[i+31]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ mask[MAX:256] := 0
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using "mask" (elements are copied from "src" when the highest bit is not set
+ in the corresponding element). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*32
+ IF mask[i+31]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ mask[MAX:128] := 0
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using "mask" (elements are copied from "src" when the highest bit is not set
+ in the corresponding element). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*32
+ IF mask[i+31]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ mask[MAX:256] := 0
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using "mask" (elements are copied from "src" when the highest bit is not set
+ in the corresponding element). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*32
+ IF mask[i+63]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ mask[MAX:128] := 0
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using "mask" (elements are copied from "src" when the highest bit is not set
+ in the corresponding element). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*32
+ IF mask[i+63]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ mask[MAX:256] := 0
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from
+ "src" when the highest bit is not set in the corresponding element). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*64
+ IF mask[i+63]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ mask[MAX:128] := 0
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from
+ "src" when the highest bit is not set in the corresponding element). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*64
+ IF mask[i+63]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ mask[MAX:256] := 0
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from
+ "src" when the highest bit is not set in the corresponding element). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ IF mask[i+31]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ mask[MAX:64] := 0
+ dst[MAX:64] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using "mask" (elements are copied from
+ "src" when the highest bit is not set in the corresponding element). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ IF mask[i+31]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ mask[MAX:128] := 0
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using "mask" (elements are copied from "src" when the highest bit is not set
+ in the corresponding element). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ IF mask[i+31]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ mask[MAX:64] := 0
+ dst[MAX:64] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using "mask" (elements are copied from "src" when the highest bit is not set
+ in the corresponding element). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ IF mask[i+31]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ mask[MAX:128] := 0
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using "mask" (elements are copied from "src" when the highest bit is not set
+ in the corresponding element). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*64
+ IF mask[i+63]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ mask[MAX:128] := 0
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using "mask" (elements are copied from "src" when the highest bit is not set
+ in the corresponding element). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*64
+ IF mask[i+63]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ mask[MAX:256] := 0
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using "mask" (elements are
+ zeroed out when the highest bit is not set in the corresponding element).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF mask[i+31]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using "mask" (elements are
+ zeroed out when the highest bit is not set in the corresponding element).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF mask[i+31]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using "mask" (elements are
+ zeroed out when the highest bit is not set in the corresponding element).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF mask[i+63]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using "mask" (elements are
+ zeroed out when the highest bit is not set in the corresponding element).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF mask[i+63]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+ Load 256-bits of integer data from memory into "dst" using a non-temporal
+ memory hint.
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Load
+
+
+
+
+
+
+ Store packed 32-bit integers from "a" into memory using "mask" (elements are
+ not stored when the highest bit is not set in the corresponding element).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF mask[i+31]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX2
+
+ Store
+
+
+
+
+
+
+ Store packed 32-bit integers from "a" into memory using "mask" (elements are
+ not stored when the highest bit is not set in the corresponding element).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF mask[i+31]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX2
+
+ Store
+
+
+
+
+
+
+ Store packed 64-bit integers from "a" into memory using "mask" (elements are
+ not stored when the highest bit is not set in the corresponding element).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF mask[i+63]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX2
+
+ Store
+
+
+
+
+
+
+ Store packed 64-bit integers from "a" into memory using "mask" (elements are
+ not stored when the highest bit is not set in the corresponding element).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF mask[i+63]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX2
+
+ Store
+
+
+
+
+
+ Shift 128-bit lanes in "a" left by "imm8" bytes while shifting in zeros, and
+ store the results in "dst".
+
+ tmp := imm8[7:0]
+ IF tmp > 15
+ tmp := 16
+ FI
+ dst[127:0] := a[127:0] << (tmp*8)
+ dst[255:128] := a[255:128] << (tmp*8)
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift 128-bit lanes in "a" left by "imm8" bytes while shifting in zeros, and
+ store the results in "dst".
+
+ tmp := imm8[7:0]
+ IF tmp > 15
+ tmp := 16
+ FI
+ dst[127:0] := a[127:0] << (tmp*8)
+ dst[255:128] := a[255:128] << (tmp*8)
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF count[63:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF imm8[7:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF count[i+31:i] < 32
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF count[i+31:i] < 32
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift 128-bit lanes in "a" right by "imm8" bytes while shifting in zeros, and
+ store the results in "dst".
+
+ tmp := imm8[7:0]
+ IF tmp > 15
+ tmp := 16
+ FI
+ dst[127:0] := a[127:0] >> (tmp*8)
+ dst[255:128] := a[255:128] >> (tmp*8)
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift 128-bit lanes in "a" right by "imm8" bytes while shifting in zeros, and
+ store the results in "dst".
+
+ tmp := imm8[7:0]
+ IF tmp > 15
+ tmp := 16
+ FI
+ dst[127:0] := a[127:0] >> (tmp*8)
+ dst[255:128] := a[255:128] >> (tmp*8)
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX2
+
+ Shift
+
+
+
+
+
+
+
+
+ Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit
+ integers in "a" compared to those in "b", and store the 16-bit results in "dst".
+ Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two
+ SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the
+ uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from
+ within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit
+ lane uses the selected quadruplet at 8-bit offsets.
+
+ FOR i := 0 to 1
+ tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
+ tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
+ tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
+ tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
+ ENDFOR
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
+ ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
+
+ dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
+ ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
+
+ dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] -
+ tmp[i+31:i+24]) +\
+ ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
+
+ dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] -
+ tmp[i+39:i+32]) +\
+ ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit
+ integers in "a" compared to those in "b", and store the 16-bit results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+ Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two
+ SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the
+ uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from
+ within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit
+ lane uses the selected quadruplet at 8-bit offsets.
+
+ FOR i := 0 to 1
+ tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
+ tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
+ tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
+ tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
+ ENDFOR
+ FOR j := 0 to 3
+ i := j*64
+ tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
+ ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
+ tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16])
+ +\
+ ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
+ tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] -
+ tmp[i+31:i+24]) +\
+ ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
+ tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] -
+ tmp[i+39:i+32]) +\
+ ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
+ ENDFOR
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit
+ integers in "a" compared to those in "b", and store the 16-bit results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two
+ SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the
+ uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from
+ within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit
+ lane uses the selected quadruplet at 8-bit offsets.
+
+ FOR i := 0 to 1
+ tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
+ tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
+ tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
+ tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
+ ENDFOR
+ FOR j := 0 to 3
+ i := j*64
+ tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
+ ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
+ tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16])
+ +\
+ ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
+ tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] -
+ tmp[i+31:i+24]) +\
+ ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
+ tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] -
+ tmp[i+39:i+32]) +\
+ ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
+ ENDFOR
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit
+ integers in "a" compared to those in "b", and store the 16-bit results in "dst".
+ Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two
+ SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the
+ uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected
+ according to the control in "imm8", and each SAD in each 64-bit lane uses the selected
+ quadruplet at 8-bit offsets.
+
+ tmp.dword[0] := b.dword[ imm8[1:0] ]
+ tmp.dword[1] := b.dword[ imm8[3:2] ]
+ tmp.dword[2] := b.dword[ imm8[5:4] ]
+ tmp.dword[3] := b.dword[ imm8[7:6] ]
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
+ ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
+
+ dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
+ ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
+
+ dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] -
+ tmp[i+31:i+24]) +\
+ ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
+
+ dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] -
+ tmp[i+39:i+32]) +\
+ ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit
+ integers in "a" compared to those in "b", and store the 16-bit results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+ Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two
+ SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the
+ uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected
+ according to the control in "imm8", and each SAD in each 64-bit lane uses the selected
+ quadruplet at 8-bit offsets.
+
+ tmp.dword[0] := b.dword[ imm8[1:0] ]
+ tmp.dword[1] := b.dword[ imm8[3:2] ]
+ tmp.dword[2] := b.dword[ imm8[5:4] ]
+ tmp.dword[3] := b.dword[ imm8[7:6] ]
+ FOR j := 0 to 1
+ i := j*64
+ tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
+ ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
+ tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16])
+ +\
+ ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
+ tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] -
+ tmp[i+31:i+24]) +\
+ ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
+ tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] -
+ tmp[i+39:i+32]) +\
+ ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
+ ENDFOR
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit
+ integers in "a" compared to those in "b", and store the 16-bit results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two
+ SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the
+ uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected
+ according to the control in "imm8", and each SAD in each 64-bit lane uses the selected
+ quadruplet at 8-bit offsets.
+
+ tmp.dword[0] := b.dword[ imm8[1:0] ]
+ tmp.dword[1] := b.dword[ imm8[3:2] ]
+ tmp.dword[2] := b.dword[ imm8[5:4] ]
+ tmp.dword[3] := b.dword[ imm8[7:6] ]
+ FOR j := 0 to 1
+ i := j*64
+ tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
+ ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
+ tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16])
+ +\
+ ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
+ tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] -
+ tmp[i+31:i+24]) +\
+ ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
+ tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] -
+ tmp[i+39:i+32]) +\
+ ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
+ ENDFOR
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary
+ result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 1
+ i := j*128
+ tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
+ tmp_dst[i+127:i] := tmp[127:0]
+ ENDFOR
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary
+ result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*128
+ tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
+ tmp_dst[i+127:i] := tmp[127:0]
+ ENDFOR
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary
+ result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ tmp_dst[255:0] := ((a[127:0] << 128)[255:0] OR b[127:0]) >> (imm8*8)
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary
+ result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[255:0] := ((a[127:0] << 128)[255:0] OR b[127:0]) >> (imm8*8)
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed 8-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := b[i+7:i]
+ ELSE
+ dst[i+7:i] := a[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed 8-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := b[i+7:i]
+ ELSE
+ dst[i+7:i] := a[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed 16-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := b[i+15:i]
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed 16-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := b[i+15:i]
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "idx" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ off := 16*idx[i+3:i]
+ dst[i+15:i] := idx[i+4] ? b[off+15:off] : a[off+15:off]
+ ELSE
+ dst[i+15:i] := idx[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ off := 16*idx[i+3:i]
+ dst[i+15:i] := idx[i+4] ? b[off+15:off] : a[off+15:off]
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ off := 16*idx[i+3:i]
+ dst[i+15:i] := idx[i+4] ? b[off+15:off] : a[off+15:off]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ off := 16*idx[i+3:i]
+ dst[i+15:i] := idx[i+4] ? b[off+15:off] : a[off+15:off]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using writemask "k" (elements are copied
+ from "idx" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ off := 16*idx[i+2:i]
+ dst[i+15:i] := idx[i+3] ? b[off+15:off] : a[off+15:off]
+ ELSE
+ dst[i+15:i] := idx[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using writemask "k" (elements are copied
+ from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ off := 16*idx[i+2:i]
+ dst[i+15:i] := idx[i+3] ? b[off+15:off] : a[off+15:off]
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ off := 16*idx[i+2:i]
+ dst[i+15:i] := idx[i+3] ? b[off+15:off] : a[off+15:off]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ off := 16*idx[i+2:i]
+ dst[i+15:i] := idx[i+3] ? b[off+15:off] : a[off+15:off]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ id := idx[i+3:i]*16
+ IF k[j]
+ dst[i+15:i] := a[id+15:id]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ id := idx[i+3:i]*16
+ IF k[j]
+ dst[i+15:i] := a[id+15:id]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle 16-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ id := idx[i+3:i]*16
+ dst[i+15:i] := a[id+15:id]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" using the corresponding index in "idx", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ id := idx[i+2:i]*16
+ IF k[j]
+ dst[i+15:i] := a[id+15:id]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" using the corresponding index in "idx", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ id := idx[i+2:i]*16
+ IF k[j]
+ dst[i+15:i] := a[id+15:id]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle 16-bit integers in "a" using the corresponding index in "idx", and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ id := idx[i+2:i]*16
+ dst[i+15:i] := a[id+15:id]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 8-bit integer in "a".
+
+ FOR j := 0 to 31
+ i := j*8
+ IF a[i+7]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 8-bit integer in "a".
+
+ FOR j := 0 to 15
+ i := j*8
+ IF a[i+7]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each packed 8-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := 0xFF
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each packed 8-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := 0xFF
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each packed 16-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := 0xFFFF
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each packed 16-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := 0xFFFF
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 16-bit integer in "a".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF a[i+15]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 16-bit integer in "a".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF a[i+15]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle packed 8-bit integers in "a" according to shuffle control mask in the
+ corresponding 8-bit element of "b", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ IF b[i+7] == 1
+ dst[i+7:i] := 0
+ ELSE
+ index[4:0] := b[i+3:i] + (j & 0x10)
+ dst[i+7:i] := a[index*8+7:index*8]
+ FI
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle packed 8-bit integers in "a" according to shuffle control mask in the
+ corresponding 8-bit element of "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ IF b[i+7] == 1
+ dst[i+7:i] := 0
+ ELSE
+ index[4:0] := b[i+3:i] + (j & 0x10)
+ dst[i+7:i] := a[index*8+7:index*8]
+ FI
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle packed 8-bit integers in "a" according to shuffle control mask in the
+ corresponding 8-bit element of "b", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ IF b[i+7] == 1
+ dst[i+7:i] := 0
+ ELSE
+ index[3:0] := b[i+3:i]
+ dst[i+7:i] := a[index*8+7:index*8]
+ FI
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle packed 8-bit integers in "a" according to shuffle control mask in the
+ corresponding 8-bit element of "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ IF b[i+7] == 1
+ dst[i+7:i] := 0
+ ELSE
+ index[3:0] := b[i+3:i]
+ dst[i+7:i] := a[index*8+7:index*8]
+ FI
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with
+ the low 64 bits of 128-bit lanes being copied from from "a" to "dst", using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[63:0] := a[63:0]
+ tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
+ tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
+ tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
+ tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
+ tmp_dst[191:128] := a[191:128]
+ tmp_dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
+ tmp_dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
+ tmp_dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
+ tmp_dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with
+ the low 64 bits of 128-bit lanes being copied from from "a" to "dst", using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[63:0] := a[63:0]
+ tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
+ tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
+ tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
+ tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
+ tmp_dst[191:128] := a[191:128]
+ tmp_dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
+ tmp_dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
+ tmp_dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
+ tmp_dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in the high 64 bits of "a" using the control in "imm8".
+ Store the results in the high 64 bits of "dst", with the low 64 bits being copied from
+ from "a" to "dst", using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ tmp_dst[63:0] := a[63:0]
+ tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
+ tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
+ tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
+ tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in the high 64 bits of "a" using the control in "imm8".
+ Store the results in the high 64 bits of "dst", with the low 64 bits being copied from
+ from "a" to "dst", using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ tmp_dst[63:0] := a[63:0]
+ tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
+ tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
+ tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
+ tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with
+ the high 64 bits of 128-bit lanes being copied from from "a" to "dst", using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
+ tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
+ tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
+ tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
+ tmp_dst[127:64] := a[127:64]
+ tmp_dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
+ tmp_dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
+ tmp_dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
+ tmp_dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
+ tmp_dst[255:192] := a[255:192]
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with
+ the high 64 bits of 128-bit lanes being copied from from "a" to "dst", using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
+ tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
+ tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
+ tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
+ tmp_dst[127:64] := a[127:64]
+ tmp_dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
+ tmp_dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
+ tmp_dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
+ tmp_dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
+ tmp_dst[255:192] := a[255:192]
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in the low 64 bits of "a" using the control in "imm8".
+ Store the results in the low 64 bits of "dst", with the high 64 bits being copied from
+ from "a" to "dst", using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
+ tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
+ tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
+ tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
+ tmp_dst[127:64] := a[127:64]
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in the low 64 bits of "a" using the control in "imm8".
+ Store the results in the low 64 bits of "dst", with the high 64 bits being copied from
+ from "a" to "dst", using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
+ tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
+ tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
+ tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
+ tmp_dst[127:64] := a[127:64]
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the high half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[71:64]
+ dst[15:8] := src2[71:64]
+ dst[23:16] := src1[79:72]
+ dst[31:24] := src2[79:72]
+ dst[39:32] := src1[87:80]
+ dst[47:40] := src2[87:80]
+ dst[55:48] := src1[95:88]
+ dst[63:56] := src2[95:88]
+ dst[71:64] := src1[103:96]
+ dst[79:72] := src2[103:96]
+ dst[87:80] := src1[111:104]
+ dst[95:88] := src2[111:104]
+ dst[103:96] := src1[119:112]
+ dst[111:104] := src2[119:112]
+ dst[119:112] := src1[127:120]
+ dst[127:120] := src2[127:120]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the high half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[71:64]
+ dst[15:8] := src2[71:64]
+ dst[23:16] := src1[79:72]
+ dst[31:24] := src2[79:72]
+ dst[39:32] := src1[87:80]
+ dst[47:40] := src2[87:80]
+ dst[55:48] := src1[95:88]
+ dst[63:56] := src2[95:88]
+ dst[71:64] := src1[103:96]
+ dst[79:72] := src2[103:96]
+ dst[87:80] := src1[111:104]
+ dst[95:88] := src2[111:104]
+ dst[103:96] := src1[119:112]
+ dst[111:104] := src2[119:112]
+ dst[119:112] := src1[127:120]
+ dst[127:120] := src2[127:120]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the high half of "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[71:64]
+ dst[15:8] := src2[71:64]
+ dst[23:16] := src1[79:72]
+ dst[31:24] := src2[79:72]
+ dst[39:32] := src1[87:80]
+ dst[47:40] := src2[87:80]
+ dst[55:48] := src1[95:88]
+ dst[63:56] := src2[95:88]
+ dst[71:64] := src1[103:96]
+ dst[79:72] := src2[103:96]
+ dst[87:80] := src1[111:104]
+ dst[95:88] := src2[111:104]
+ dst[103:96] := src1[119:112]
+ dst[111:104] := src2[119:112]
+ dst[119:112] := src1[127:120]
+ dst[127:120] := src2[127:120]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the high half of "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[71:64]
+ dst[15:8] := src2[71:64]
+ dst[23:16] := src1[79:72]
+ dst[31:24] := src2[79:72]
+ dst[39:32] := src1[87:80]
+ dst[47:40] := src2[87:80]
+ dst[55:48] := src1[95:88]
+ dst[63:56] := src2[95:88]
+ dst[71:64] := src1[103:96]
+ dst[79:72] := src2[103:96]
+ dst[87:80] := src1[111:104]
+ dst[95:88] := src2[111:104]
+ dst[103:96] := src1[119:112]
+ dst[111:104] := src2[119:112]
+ dst[119:112] := src1[127:120]
+ dst[127:120] := src2[127:120]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[79:64]
+ dst[31:16] := src2[79:64]
+ dst[47:32] := src1[95:80]
+ dst[63:48] := src2[95:80]
+ dst[79:64] := src1[111:96]
+ dst[95:80] := src2[111:96]
+ dst[111:96] := src1[127:112]
+ dst[127:112] := src2[127:112]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[79:64]
+ dst[31:16] := src2[79:64]
+ dst[47:32] := src1[95:80]
+ dst[63:48] := src2[95:80]
+ dst[79:64] := src1[111:96]
+ dst[95:80] := src2[111:96]
+ dst[111:96] := src1[127:112]
+ dst[127:112] := src2[127:112]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the high half of "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[79:64]
+ dst[31:16] := src2[79:64]
+ dst[47:32] := src1[95:80]
+ dst[63:48] := src2[95:80]
+ dst[79:64] := src1[111:96]
+ dst[95:80] := src2[111:96]
+ dst[111:96] := src1[127:112]
+ dst[127:112] := src2[127:112]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the high half of "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[79:64]
+ dst[31:16] := src2[79:64]
+ dst[47:32] := src1[95:80]
+ dst[63:48] := src2[95:80]
+ dst[79:64] := src1[111:96]
+ dst[95:80] := src2[111:96]
+ dst[111:96] := src1[127:112]
+ dst[127:112] := src2[127:112]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[7:0]
+ dst[15:8] := src2[7:0]
+ dst[23:16] := src1[15:8]
+ dst[31:24] := src2[15:8]
+ dst[39:32] := src1[23:16]
+ dst[47:40] := src2[23:16]
+ dst[55:48] := src1[31:24]
+ dst[63:56] := src2[31:24]
+ dst[71:64] := src1[39:32]
+ dst[79:72] := src2[39:32]
+ dst[87:80] := src1[47:40]
+ dst[95:88] := src2[47:40]
+ dst[103:96] := src1[55:48]
+ dst[111:104] := src2[55:48]
+ dst[119:112] := src1[63:56]
+ dst[127:120] := src2[63:56]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[7:0]
+ dst[15:8] := src2[7:0]
+ dst[23:16] := src1[15:8]
+ dst[31:24] := src2[15:8]
+ dst[39:32] := src1[23:16]
+ dst[47:40] := src2[23:16]
+ dst[55:48] := src1[31:24]
+ dst[63:56] := src2[31:24]
+ dst[71:64] := src1[39:32]
+ dst[79:72] := src2[39:32]
+ dst[87:80] := src1[47:40]
+ dst[95:88] := src2[47:40]
+ dst[103:96] := src1[55:48]
+ dst[111:104] := src2[55:48]
+ dst[119:112] := src1[63:56]
+ dst[127:120] := src2[63:56]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the low half of "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[7:0]
+ dst[15:8] := src2[7:0]
+ dst[23:16] := src1[15:8]
+ dst[31:24] := src2[15:8]
+ dst[39:32] := src1[23:16]
+ dst[47:40] := src2[23:16]
+ dst[55:48] := src1[31:24]
+ dst[63:56] := src2[31:24]
+ dst[71:64] := src1[39:32]
+ dst[79:72] := src2[39:32]
+ dst[87:80] := src1[47:40]
+ dst[95:88] := src2[47:40]
+ dst[103:96] := src1[55:48]
+ dst[111:104] := src2[55:48]
+ dst[119:112] := src1[63:56]
+ dst[127:120] := src2[63:56]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the low half of "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[7:0]
+ dst[15:8] := src2[7:0]
+ dst[23:16] := src1[15:8]
+ dst[31:24] := src2[15:8]
+ dst[39:32] := src1[23:16]
+ dst[47:40] := src2[23:16]
+ dst[55:48] := src1[31:24]
+ dst[63:56] := src2[31:24]
+ dst[71:64] := src1[39:32]
+ dst[79:72] := src2[39:32]
+ dst[87:80] := src1[47:40]
+ dst[95:88] := src2[47:40]
+ dst[103:96] := src1[55:48]
+ dst[111:104] := src2[55:48]
+ dst[119:112] := src1[63:56]
+ dst[127:120] := src2[63:56]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[15:0]
+ dst[31:16] := src2[15:0]
+ dst[47:32] := src1[31:16]
+ dst[63:48] := src2[31:16]
+ dst[79:64] := src1[47:32]
+ dst[95:80] := src2[47:32]
+ dst[111:96] := src1[63:48]
+ dst[127:112] := src2[63:48]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[15:0]
+ dst[31:16] := src2[15:0]
+ dst[47:32] := src1[31:16]
+ dst[63:48] := src2[31:16]
+ dst[79:64] := src1[47:32]
+ dst[95:80] := src2[47:32]
+ dst[111:96] := src1[63:48]
+ dst[127:112] := src2[63:48]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the low half of "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[15:0]
+ dst[31:16] := src2[15:0]
+ dst[47:32] := src1[31:16]
+ dst[63:48] := src2[31:16]
+ dst[79:64] := src1[47:32]
+ dst[95:80] := src2[47:32]
+ dst[111:96] := src1[63:48]
+ dst[127:112] := src2[63:48]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the low half of "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[15:0]
+ dst[31:16] := src2[15:0]
+ dst[47:32] := src1[31:16]
+ dst[63:48] := src2[31:16]
+ dst[79:64] := src1[47:32]
+ dst[95:80] := src2[47:32]
+ dst[111:96] := src1[63:48]
+ dst[127:112] := src2[63:48]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Load packed 16-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 16-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed 16-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 16-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed 8-bit integers from memory into "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 8-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed 8-bit integers from memory into "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 8-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 256-bits (composed of 16 packed 16-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 256-bits (composed of 32 packed 8-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 8 packed 16-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 16 packed 8-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Move packed 16-bit integers from "a" into "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed 16-bit integers from "a" into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Move packed 16-bit integers from "a" into "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed 16-bit integers from "a" into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Move packed 8-bit integers from "a" into "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed 8-bit integers from "a" into "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Move packed 8-bit integers from "a" into "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed 8-bit integers from "a" into "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Store packed 16-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ MEM[mem_addr+i+15:mem_addr+i] := a[i+15:i]
+ FI
+ ENDFOR
+
+
+ AVX512BW
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed 16-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ MEM[mem_addr+i+15:mem_addr+i] := a[i+15:i]
+ FI
+ ENDFOR
+
+
+ AVX512BW
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed 8-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
+ FI
+ ENDFOR
+
+
+ AVX512BW
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed 8-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
+ FI
+ ENDFOR
+
+
+ AVX512BW
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 16 packed 16-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX512BW
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 32 packed 8-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX512BW
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 8 packed 16-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ AVX512BW
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 16 packed 8-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ AVX512BW
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Compute the absolute value of packed signed 8-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := ABS(a[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the absolute value of packed signed 8-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := ABS(a[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the absolute value of packed signed 8-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := ABS(a[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the absolute value of packed signed 8-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := ABS(a[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the absolute value of packed signed 16-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ABS(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the absolute value of packed signed 16-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ABS(a[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the absolute value of packed signed 16-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ABS(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the absolute value of packed signed 16-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ABS(a[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] + b[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] + b[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] + b[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] + b[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed signed 8-bit integers in "a" and "b" using saturation, and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed signed 8-bit integers in "a" and "b" using saturation, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed signed 8-bit integers in "a" and "b" using saturation, and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed signed 8-bit integers in "a" and "b" using saturation, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed signed 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed signed 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed signed 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed signed 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] + b[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] + b[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] + b[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] + b[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Average packed unsigned 8-bit integers in "a" and "b", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Average packed unsigned 8-bit integers in "a" and "b", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Average packed unsigned 8-bit integers in "a" and "b", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Average packed unsigned 8-bit integers in "a" and "b", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Average packed unsigned 16-bit integers in "a" and "b", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Average packed unsigned 16-bit integers in "a" and "b", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Average packed unsigned 16-bit integers in "a" and "b", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Average packed unsigned 16-bit integers in "a" and "b", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers
+ in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs
+ of intermediate signed 16-bit integers, and pack the saturated results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers
+ in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs
+ of intermediate signed 16-bit integers, and pack the saturated results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers
+ in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs
+ of intermediate signed 16-bit integers, and pack the saturated results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers
+ in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs
+ of intermediate signed 16-bit integers, and pack the saturated results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers,
+ and pack the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) +
+ SignExtend32(a[i+15:i]*b[i+15:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers,
+ and pack the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) +
+ SignExtend32(a[i+15:i]*b[i+15:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers,
+ and pack the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) +
+ SignExtend32(a[i+15:i]*b[i+15:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers,
+ and pack the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) +
+ SignExtend32(a[i+15:i]*b[i+15:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Truncate each intermediate integer to the 18 most significant
+ bits, round by adding 1, and store bits [16:1] to "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
+ dst[i+15:i] := tmp[16:1]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Truncate each intermediate integer to the 18 most significant
+ bits, round by adding 1, and store bits [16:1] to "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
+ dst[i+15:i] := tmp[16:1]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Truncate each intermediate integer to the 18 most significant
+ bits, round by adding 1, and store bits [16:1] to "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
+ dst[i+15:i] := tmp[16:1]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Truncate each intermediate integer to the 18 most significant
+ bits, round by adding 1, and store bits [16:1] to "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
+ dst[i+15:i] := tmp[16:1]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed unsigned 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed unsigned 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed unsigned 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed unsigned 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed 16-bit integers in "a" and "b", producing intermediate
+ 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[15:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed 16-bit integers in "a" and "b", producing intermediate
+ 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[15:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed 16-bit integers in "a" and "b", producing intermediate
+ 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[15:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed 16-bit integers in "a" and "b", producing intermediate
+ 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[15:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] - b[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] - b[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] - b[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] - b[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a"
+ using saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a"
+ using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a"
+ using saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a"
+ using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in
+ "a" using saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in
+ "a" using saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in
+ "a" using saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in
+ "a" using saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit
+ integers in "a" using saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit
+ integers in "a" using saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit
+ integers in "a" using saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit
+ integers in "a" using saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit
+ integers in "a" using saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit
+ integers in "a" using saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit
+ integers in "a" using saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit
+ integers in "a" using saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] - b[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] - b[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] - b[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] - b[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using signed saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := Saturate16(a[31:0])
+ tmp_dst[31:16] := Saturate16(a[63:32])
+ tmp_dst[47:32] := Saturate16(a[95:64])
+ tmp_dst[63:48] := Saturate16(a[127:96])
+ tmp_dst[79:64] := Saturate16(b[31:0])
+ tmp_dst[95:80] := Saturate16(b[63:32])
+ tmp_dst[111:96] := Saturate16(b[95:64])
+ tmp_dst[127:112] := Saturate16(b[127:96])
+ tmp_dst[143:128] := Saturate16(a[159:128])
+ tmp_dst[159:144] := Saturate16(a[191:160])
+ tmp_dst[175:160] := Saturate16(a[223:192])
+ tmp_dst[191:176] := Saturate16(a[255:224])
+ tmp_dst[207:192] := Saturate16(b[159:128])
+ tmp_dst[223:208] := Saturate16(b[191:160])
+ tmp_dst[239:224] := Saturate16(b[223:192])
+ tmp_dst[255:240] := Saturate16(b[255:224])
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using signed saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := Saturate16(a[31:0])
+ tmp_dst[31:16] := Saturate16(a[63:32])
+ tmp_dst[47:32] := Saturate16(a[95:64])
+ tmp_dst[63:48] := Saturate16(a[127:96])
+ tmp_dst[79:64] := Saturate16(b[31:0])
+ tmp_dst[95:80] := Saturate16(b[63:32])
+ tmp_dst[111:96] := Saturate16(b[95:64])
+ tmp_dst[127:112] := Saturate16(b[127:96])
+ tmp_dst[143:128] := Saturate16(a[159:128])
+ tmp_dst[159:144] := Saturate16(a[191:160])
+ tmp_dst[175:160] := Saturate16(a[223:192])
+ tmp_dst[191:176] := Saturate16(a[255:224])
+ tmp_dst[207:192] := Saturate16(b[159:128])
+ tmp_dst[223:208] := Saturate16(b[191:160])
+ tmp_dst[239:224] := Saturate16(b[223:192])
+ tmp_dst[255:240] := Saturate16(b[255:224])
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using signed saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := Saturate16(a[31:0])
+ tmp_dst[31:16] := Saturate16(a[63:32])
+ tmp_dst[47:32] := Saturate16(a[95:64])
+ tmp_dst[63:48] := Saturate16(a[127:96])
+ tmp_dst[79:64] := Saturate16(b[31:0])
+ tmp_dst[95:80] := Saturate16(b[63:32])
+ tmp_dst[111:96] := Saturate16(b[95:64])
+ tmp_dst[127:112] := Saturate16(b[127:96])
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using signed saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := Saturate16(a[31:0])
+ tmp_dst[31:16] := Saturate16(a[63:32])
+ tmp_dst[47:32] := Saturate16(a[95:64])
+ tmp_dst[63:48] := Saturate16(a[127:96])
+ tmp_dst[79:64] := Saturate16(b[31:0])
+ tmp_dst[95:80] := Saturate16(b[63:32])
+ tmp_dst[111:96] := Saturate16(b[95:64])
+ tmp_dst[127:112] := Saturate16(b[127:96])
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using signed saturation, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := Saturate8(a[15:0])
+ tmp_dst[15:8] := Saturate8(a[31:16])
+ tmp_dst[23:16] := Saturate8(a[47:32])
+ tmp_dst[31:24] := Saturate8(a[63:48])
+ tmp_dst[39:32] := Saturate8(a[79:64])
+ tmp_dst[47:40] := Saturate8(a[95:80])
+ tmp_dst[55:48] := Saturate8(a[111:96])
+ tmp_dst[63:56] := Saturate8(a[127:112])
+ tmp_dst[71:64] := Saturate8(b[15:0])
+ tmp_dst[79:72] := Saturate8(b[31:16])
+ tmp_dst[87:80] := Saturate8(b[47:32])
+ tmp_dst[95:88] := Saturate8(b[63:48])
+ tmp_dst[103:96] := Saturate8(b[79:64])
+ tmp_dst[111:104] := Saturate8(b[95:80])
+ tmp_dst[119:112] := Saturate8(b[111:96])
+ tmp_dst[127:120] := Saturate8(b[127:112])
+ tmp_dst[135:128] := Saturate8(a[143:128])
+ tmp_dst[143:136] := Saturate8(a[159:144])
+ tmp_dst[151:144] := Saturate8(a[175:160])
+ tmp_dst[159:152] := Saturate8(a[191:176])
+ tmp_dst[167:160] := Saturate8(a[207:192])
+ tmp_dst[175:168] := Saturate8(a[223:208])
+ tmp_dst[183:176] := Saturate8(a[239:224])
+ tmp_dst[191:184] := Saturate8(a[255:240])
+ tmp_dst[199:192] := Saturate8(b[143:128])
+ tmp_dst[207:200] := Saturate8(b[159:144])
+ tmp_dst[215:208] := Saturate8(b[175:160])
+ tmp_dst[223:216] := Saturate8(b[191:176])
+ tmp_dst[231:224] := Saturate8(b[207:192])
+ tmp_dst[239:232] := Saturate8(b[223:208])
+ tmp_dst[247:240] := Saturate8(b[239:224])
+ tmp_dst[255:248] := Saturate8(b[255:240])
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := Saturate8(a[15:0])
+ tmp_dst[15:8] := Saturate8(a[31:16])
+ tmp_dst[23:16] := Saturate8(a[47:32])
+ tmp_dst[31:24] := Saturate8(a[63:48])
+ tmp_dst[39:32] := Saturate8(a[79:64])
+ tmp_dst[47:40] := Saturate8(a[95:80])
+ tmp_dst[55:48] := Saturate8(a[111:96])
+ tmp_dst[63:56] := Saturate8(a[127:112])
+ tmp_dst[71:64] := Saturate8(b[15:0])
+ tmp_dst[79:72] := Saturate8(b[31:16])
+ tmp_dst[87:80] := Saturate8(b[47:32])
+ tmp_dst[95:88] := Saturate8(b[63:48])
+ tmp_dst[103:96] := Saturate8(b[79:64])
+ tmp_dst[111:104] := Saturate8(b[95:80])
+ tmp_dst[119:112] := Saturate8(b[111:96])
+ tmp_dst[127:120] := Saturate8(b[127:112])
+ tmp_dst[135:128] := Saturate8(a[143:128])
+ tmp_dst[143:136] := Saturate8(a[159:144])
+ tmp_dst[151:144] := Saturate8(a[175:160])
+ tmp_dst[159:152] := Saturate8(a[191:176])
+ tmp_dst[167:160] := Saturate8(a[207:192])
+ tmp_dst[175:168] := Saturate8(a[223:208])
+ tmp_dst[183:176] := Saturate8(a[239:224])
+ tmp_dst[191:184] := Saturate8(a[255:240])
+ tmp_dst[199:192] := Saturate8(b[143:128])
+ tmp_dst[207:200] := Saturate8(b[159:144])
+ tmp_dst[215:208] := Saturate8(b[175:160])
+ tmp_dst[223:216] := Saturate8(b[191:176])
+ tmp_dst[231:224] := Saturate8(b[207:192])
+ tmp_dst[239:232] := Saturate8(b[223:208])
+ tmp_dst[247:240] := Saturate8(b[239:224])
+ tmp_dst[255:248] := Saturate8(b[255:240])
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using signed saturation, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := Saturate8(a[15:0])
+ tmp_dst[15:8] := Saturate8(a[31:16])
+ tmp_dst[23:16] := Saturate8(a[47:32])
+ tmp_dst[31:24] := Saturate8(a[63:48])
+ tmp_dst[39:32] := Saturate8(a[79:64])
+ tmp_dst[47:40] := Saturate8(a[95:80])
+ tmp_dst[55:48] := Saturate8(a[111:96])
+ tmp_dst[63:56] := Saturate8(a[127:112])
+ tmp_dst[71:64] := Saturate8(b[15:0])
+ tmp_dst[79:72] := Saturate8(b[31:16])
+ tmp_dst[87:80] := Saturate8(b[47:32])
+ tmp_dst[95:88] := Saturate8(b[63:48])
+ tmp_dst[103:96] := Saturate8(b[79:64])
+ tmp_dst[111:104] := Saturate8(b[95:80])
+ tmp_dst[119:112] := Saturate8(b[111:96])
+ tmp_dst[127:120] := Saturate8(b[127:112])
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := Saturate8(a[15:0])
+ tmp_dst[15:8] := Saturate8(a[31:16])
+ tmp_dst[23:16] := Saturate8(a[47:32])
+ tmp_dst[31:24] := Saturate8(a[63:48])
+ tmp_dst[39:32] := Saturate8(a[79:64])
+ tmp_dst[47:40] := Saturate8(a[95:80])
+ tmp_dst[55:48] := Saturate8(a[111:96])
+ tmp_dst[63:56] := Saturate8(a[127:112])
+ tmp_dst[71:64] := Saturate8(b[15:0])
+ tmp_dst[79:72] := Saturate8(b[31:16])
+ tmp_dst[87:80] := Saturate8(b[47:32])
+ tmp_dst[95:88] := Saturate8(b[63:48])
+ tmp_dst[103:96] := Saturate8(b[79:64])
+ tmp_dst[111:104] := Saturate8(b[95:80])
+ tmp_dst[119:112] := Saturate8(b[111:96])
+ tmp_dst[127:120] := Saturate8(b[127:112])
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := SaturateU16(a[31:0])
+ tmp_dst[31:16] := SaturateU16(a[63:32])
+ tmp_dst[47:32] := SaturateU16(a[95:64])
+ tmp_dst[63:48] := SaturateU16(a[127:96])
+ tmp_dst[79:64] := SaturateU16(b[31:0])
+ tmp_dst[95:80] := SaturateU16(b[63:32])
+ tmp_dst[111:96] := SaturateU16(b[95:64])
+ tmp_dst[127:112] := SaturateU16(b[127:96])
+ tmp_dst[143:128] := SaturateU16(a[159:128])
+ tmp_dst[159:144] := SaturateU16(a[191:160])
+ tmp_dst[175:160] := SaturateU16(a[223:192])
+ tmp_dst[191:176] := SaturateU16(a[255:224])
+ tmp_dst[207:192] := SaturateU16(b[159:128])
+ tmp_dst[223:208] := SaturateU16(b[191:160])
+ tmp_dst[239:224] := SaturateU16(b[223:192])
+ tmp_dst[255:240] := SaturateU16(b[255:224])
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := SaturateU16(a[31:0])
+ tmp_dst[31:16] := SaturateU16(a[63:32])
+ tmp_dst[47:32] := SaturateU16(a[95:64])
+ tmp_dst[63:48] := SaturateU16(a[127:96])
+ tmp_dst[79:64] := SaturateU16(b[31:0])
+ tmp_dst[95:80] := SaturateU16(b[63:32])
+ tmp_dst[111:96] := SaturateU16(b[95:64])
+ tmp_dst[127:112] := SaturateU16(b[127:96])
+ tmp_dst[143:128] := SaturateU16(a[159:128])
+ tmp_dst[159:144] := SaturateU16(a[191:160])
+ tmp_dst[175:160] := SaturateU16(a[223:192])
+ tmp_dst[191:176] := SaturateU16(a[255:224])
+ tmp_dst[207:192] := SaturateU16(b[159:128])
+ tmp_dst[223:208] := SaturateU16(b[191:160])
+ tmp_dst[239:224] := SaturateU16(b[223:192])
+ tmp_dst[255:240] := SaturateU16(b[255:224])
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := SaturateU16(a[31:0])
+ tmp_dst[31:16] := SaturateU16(a[63:32])
+ tmp_dst[47:32] := SaturateU16(a[95:64])
+ tmp_dst[63:48] := SaturateU16(a[127:96])
+ tmp_dst[79:64] := SaturateU16(b[31:0])
+ tmp_dst[95:80] := SaturateU16(b[63:32])
+ tmp_dst[111:96] := SaturateU16(b[95:64])
+ tmp_dst[127:112] := SaturateU16(b[127:96])
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := SaturateU16(a[31:0])
+ tmp_dst[31:16] := SaturateU16(a[63:32])
+ tmp_dst[47:32] := SaturateU16(a[95:64])
+ tmp_dst[63:48] := SaturateU16(a[127:96])
+ tmp_dst[79:64] := SaturateU16(b[31:0])
+ tmp_dst[95:80] := SaturateU16(b[63:32])
+ tmp_dst[111:96] := SaturateU16(b[95:64])
+ tmp_dst[127:112] := SaturateU16(b[127:96])
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using unsigned saturation, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := SaturateU8(a[15:0])
+ tmp_dst[15:8] := SaturateU8(a[31:16])
+ tmp_dst[23:16] := SaturateU8(a[47:32])
+ tmp_dst[31:24] := SaturateU8(a[63:48])
+ tmp_dst[39:32] := SaturateU8(a[79:64])
+ tmp_dst[47:40] := SaturateU8(a[95:80])
+ tmp_dst[55:48] := SaturateU8(a[111:96])
+ tmp_dst[63:56] := SaturateU8(a[127:112])
+ tmp_dst[71:64] := SaturateU8(b[15:0])
+ tmp_dst[79:72] := SaturateU8(b[31:16])
+ tmp_dst[87:80] := SaturateU8(b[47:32])
+ tmp_dst[95:88] := SaturateU8(b[63:48])
+ tmp_dst[103:96] := SaturateU8(b[79:64])
+ tmp_dst[111:104] := SaturateU8(b[95:80])
+ tmp_dst[119:112] := SaturateU8(b[111:96])
+ tmp_dst[127:120] := SaturateU8(b[127:112])
+ tmp_dst[135:128] := SaturateU8(a[143:128])
+ tmp_dst[143:136] := SaturateU8(a[159:144])
+ tmp_dst[151:144] := SaturateU8(a[175:160])
+ tmp_dst[159:152] := SaturateU8(a[191:176])
+ tmp_dst[167:160] := SaturateU8(a[207:192])
+ tmp_dst[175:168] := SaturateU8(a[223:208])
+ tmp_dst[183:176] := SaturateU8(a[239:224])
+ tmp_dst[191:184] := SaturateU8(a[255:240])
+ tmp_dst[199:192] := SaturateU8(b[143:128])
+ tmp_dst[207:200] := SaturateU8(b[159:144])
+ tmp_dst[215:208] := SaturateU8(b[175:160])
+ tmp_dst[223:216] := SaturateU8(b[191:176])
+ tmp_dst[231:224] := SaturateU8(b[207:192])
+ tmp_dst[239:232] := SaturateU8(b[223:208])
+ tmp_dst[247:240] := SaturateU8(b[239:224])
+ tmp_dst[255:248] := SaturateU8(b[255:240])
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using unsigned saturation, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := SaturateU8(a[15:0])
+ tmp_dst[15:8] := SaturateU8(a[31:16])
+ tmp_dst[23:16] := SaturateU8(a[47:32])
+ tmp_dst[31:24] := SaturateU8(a[63:48])
+ tmp_dst[39:32] := SaturateU8(a[79:64])
+ tmp_dst[47:40] := SaturateU8(a[95:80])
+ tmp_dst[55:48] := SaturateU8(a[111:96])
+ tmp_dst[63:56] := SaturateU8(a[127:112])
+ tmp_dst[71:64] := SaturateU8(b[15:0])
+ tmp_dst[79:72] := SaturateU8(b[31:16])
+ tmp_dst[87:80] := SaturateU8(b[47:32])
+ tmp_dst[95:88] := SaturateU8(b[63:48])
+ tmp_dst[103:96] := SaturateU8(b[79:64])
+ tmp_dst[111:104] := SaturateU8(b[95:80])
+ tmp_dst[119:112] := SaturateU8(b[111:96])
+ tmp_dst[127:120] := SaturateU8(b[127:112])
+ tmp_dst[135:128] := SaturateU8(a[143:128])
+ tmp_dst[143:136] := SaturateU8(a[159:144])
+ tmp_dst[151:144] := SaturateU8(a[175:160])
+ tmp_dst[159:152] := SaturateU8(a[191:176])
+ tmp_dst[167:160] := SaturateU8(a[207:192])
+ tmp_dst[175:168] := SaturateU8(a[223:208])
+ tmp_dst[183:176] := SaturateU8(a[239:224])
+ tmp_dst[191:184] := SaturateU8(a[255:240])
+ tmp_dst[199:192] := SaturateU8(b[143:128])
+ tmp_dst[207:200] := SaturateU8(b[159:144])
+ tmp_dst[215:208] := SaturateU8(b[175:160])
+ tmp_dst[223:216] := SaturateU8(b[191:176])
+ tmp_dst[231:224] := SaturateU8(b[207:192])
+ tmp_dst[239:232] := SaturateU8(b[223:208])
+ tmp_dst[247:240] := SaturateU8(b[239:224])
+ tmp_dst[255:248] := SaturateU8(b[255:240])
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using unsigned saturation, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := SaturateU8(a[15:0])
+ tmp_dst[15:8] := SaturateU8(a[31:16])
+ tmp_dst[23:16] := SaturateU8(a[47:32])
+ tmp_dst[31:24] := SaturateU8(a[63:48])
+ tmp_dst[39:32] := SaturateU8(a[79:64])
+ tmp_dst[47:40] := SaturateU8(a[95:80])
+ tmp_dst[55:48] := SaturateU8(a[111:96])
+ tmp_dst[63:56] := SaturateU8(a[127:112])
+ tmp_dst[71:64] := SaturateU8(b[15:0])
+ tmp_dst[79:72] := SaturateU8(b[31:16])
+ tmp_dst[87:80] := SaturateU8(b[47:32])
+ tmp_dst[95:88] := SaturateU8(b[63:48])
+ tmp_dst[103:96] := SaturateU8(b[79:64])
+ tmp_dst[111:104] := SaturateU8(b[95:80])
+ tmp_dst[119:112] := SaturateU8(b[111:96])
+ tmp_dst[127:120] := SaturateU8(b[127:112])
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using unsigned saturation, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := SaturateU8(a[15:0])
+ tmp_dst[15:8] := SaturateU8(a[31:16])
+ tmp_dst[23:16] := SaturateU8(a[47:32])
+ tmp_dst[31:24] := SaturateU8(a[63:48])
+ tmp_dst[39:32] := SaturateU8(a[79:64])
+ tmp_dst[47:40] := SaturateU8(a[95:80])
+ tmp_dst[55:48] := SaturateU8(a[111:96])
+ tmp_dst[63:56] := SaturateU8(a[127:112])
+ tmp_dst[71:64] := SaturateU8(b[15:0])
+ tmp_dst[79:72] := SaturateU8(b[31:16])
+ tmp_dst[87:80] := SaturateU8(b[47:32])
+ tmp_dst[95:88] := SaturateU8(b[63:48])
+ tmp_dst[103:96] := SaturateU8(b[79:64])
+ tmp_dst[111:104] := SaturateU8(b[95:80])
+ tmp_dst[119:112] := SaturateU8(b[111:96])
+ tmp_dst[127:120] := SaturateU8(b[127:112])
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ dst[l+7:l] := Saturate8(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+15:i])
+ FI
+ ENDFOR
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ dst[l+7:l] := Saturate8(a[i+15:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+15:i])
+ FI
+ ENDFOR
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := SignExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := SignExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := SignExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := SignExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ dst[l+7:l] := SaturateU8(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+15:i])
+ FI
+ ENDFOR
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ dst[l+7:l] := SaturateU8(a[i+15:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+15:i])
+ FI
+ ENDFOR
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ dst[l+7:l] := Truncate8(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the active results (those with their respective bit set in writemask "k") to
+ unaligned memory at "base_addr".
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+15:i])
+ FI
+ ENDFOR
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ dst[l+7:l] := Truncate8(a[i+15:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the active results (those with their respective bit set in writemask "k") to
+ unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+15:i])
+ FI
+ ENDFOR
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := ZeroExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := ZeroExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := ZeroExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := ZeroExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Broadcast 8-bit integer "a" to all elements of "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Set
+
+
+
+
+
+ Broadcast 8-bit integer "a" to all elements of "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Set
+
+
+
+
+
+
+ Broadcast 8-bit integer "a" to all elements of "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Set
+
+
+
+
+
+ Broadcast 8-bit integer "a" to all elements of "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Set
+
+
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Set
+
+
+
+
+
+ Broadcast 16-bit integer "a" to all elements of "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Set
+
+
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Set
+
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Set
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for equality, and store the
+ results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for equality, and store the
+ results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for equality, and store the
+ results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for equality, and store the
+ results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k1[j]
+ k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 31
+ i := j*8
+ k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k1[j]
+ k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 15
+ i := j*8
+ k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k1[j]
+ k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 15
+ i := j*16
+ k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k1[j]
+ k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 7
+ i := j*16
+ k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF count[i+15:i] < 16
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF count[i+15:i] < 16
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512BW
+ AVX512VL
+
+ Shift
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by addition. Returns the sum of all
+ elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[15:0] + src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] + src[i+16*len+31:i+16*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_ADD(a, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by addition using mask "k". Returns
+ the sum of all active elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[15:0] + src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] + src[i+16*len+15:i+16*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_ADD(tmp, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by addition. Returns the sum of all
+ elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[15:0] + src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] + src[i+16*len+31:i+16*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_ADD(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by addition using mask "k". Returns
+ the sum of all active elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[15:0] + src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] + src[i+16*len+15:i+16*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_ADD(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by addition. Returns the sum of all
+ elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[7:0] + src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] + src[i+8*len+15:i+8*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_ADD(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by addition using mask "k". Returns the
+ sum of all active elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[7:0] + src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] + src[i+8*len+7:i+8*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_ADD(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by addition. Returns the sum of all
+ elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[7:0] + src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] + src[i+8*len+15:i+8*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_ADD(a, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by addition using mask "k". Returns the
+ sum of all active elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[7:0] + src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] + src[i+8*len+7:i+8*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_ADD(tmp, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[15:0] * src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] * src[i+16*len+31:i+16*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_MUL(a, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[15:0] * src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] * src[i+16*len+15:i+16*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 1
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_MUL(tmp, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[15:0] * src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] * src[i+16*len+31:i+16*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_MUL(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[15:0] * src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] * src[i+16*len+15:i+16*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 1
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_MUL(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[7:0] * src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] * src[i+8*len+15:i+8*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_MUL(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[7:0] * src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] * src[i+8*len+7:i+8*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 1
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_MUL(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[7:0] * src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] * src[i+8*len+15:i+8*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_MUL(a, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[7:0] * src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] * src[i+8*len+7:i+8*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 1
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_MUL(tmp, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[15:0] OR src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] OR src[i+16*len+31:i+16*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_OR(a, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[15:0] OR src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] OR src[i+16*len+15:i+16*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_OR(tmp, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[15:0] OR src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] OR src[i+16*len+31:i+16*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_OR(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[15:0] OR src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] OR src[i+16*len+15:i+16*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_OR(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[7:0] OR src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] OR src[i+8*len+15:i+8*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_OR(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[7:0] OR src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] OR src[i+8*len+7:i+8*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_OR(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[7:0] OR src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] OR src[i+8*len+15:i+8*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_OR(a, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[7:0] OR src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] OR src[i+8*len+7:i+8*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_OR(tmp, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[15:0] AND src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] AND src[i+16*len+31:i+16*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_AND(a, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[15:0] AND src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] AND src[i+16*len+15:i+16*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 0xFFFF
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_AND(tmp, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[15:0] AND src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] AND src[i+16*len+31:i+16*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_AND(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 16-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[15:0] AND src[31:16]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := src[i+15:i] AND src[i+16*len+15:i+16*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 0xFFFF
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_AND(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[7:0] AND src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] AND src[i+8*len+15:i+8*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_AND(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[7:0] AND src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] AND src[i+8*len+7:i+8*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 0xFF
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_AND(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication. Returns the sum of
+ all elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[7:0] AND src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] AND src[i+8*len+15:i+8*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_AND(a, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 8-bit integers in "a" by multiplication using mask "k".
+ Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[7:0] AND src[15:8]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := src[i+7:i] AND src[i+8*len+7:i+8*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 0xFF
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_AND(tmp, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed signed 16-bit integers in "a" by maximum. Returns the maximum
+ of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[15:0] > src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] > src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_MAX(a, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 16-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[15:0] > src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] > src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := Int16(-0x8000)
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_MAX(tmp, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed signed 16-bit integers in "a" by maximum. Returns the maximum
+ of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[15:0] > src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] > src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_MAX(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 16-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[15:0] > src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] > src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := Int16(-0x8000)
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_MAX(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed signed 8-bit integers in "a" by maximum. Returns the maximum
+ of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[7:0] > src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] > src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_MAX(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 8-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[7:0] > src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] > src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := Int8(-0x80)
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_MAX(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed signed 8-bit integers in "a" by maximum. Returns the maximum
+ of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[7:0] > src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] > src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_MAX(a, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 8-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[7:0] > src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] > src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := Int8(-0x80)
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_MAX(tmp, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 16-bit integers in "a" by maximum. Returns the
+ maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[15:0] > src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] > src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_MAX(a, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 16-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[15:0] > src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] > src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_MAX(tmp, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 16-bit integers in "a" by maximum. Returns the
+ maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[15:0] > src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] > src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_MAX(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 16-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[15:0] > src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] > src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_MAX(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 8-bit integers in "a" by maximum. Returns the
+ maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[7:0] > src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] > src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_MAX(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 8-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[7:0] > src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] > src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_MAX(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 8-bit integers in "a" by maximum. Returns the
+ maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[7:0] > src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] > src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_MAX(a, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 8-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[7:0] > src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] > src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_MAX(tmp, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed signed 16-bit integers in "a" by minimum. Returns the minimum
+ of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[15:0] < src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] < src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_MIN(a, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 16-bit integers in "a" by minimum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[15:0] < src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] < src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := Int16(0x7FFF)
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_MIN(tmp, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed signed 16-bit integers in "a" by minimum. Returns the minimum
+ of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[15:0] < src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] < src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_MIN(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 16-bit integers in "a" by minimum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[15:0] < src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] < src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := Int16(0x7FFF)
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_MIN(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed signed 8-bit integers in "a" by minimum. Returns the minimum
+ of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[7:0] < src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] < src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_MIN(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 8-bit integers in "a" by minimum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[7:0] < src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] < src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := Int8(0x7F)
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_MIN(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed signed 8-bit integers in "a" by minimum. Returns the minimum
+ of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[7:0] < src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] < src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_MIN(a, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 8-bit integers in "a" by minimum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[7:0] < src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] < src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := Int8(0x7F)
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_MIN(tmp, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 16-bit integers in "a" by minimum. Returns the
+ minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[15:0] < src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] < src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_MIN(a, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 16-bit integers in "a" by minimum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[15:0] < src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] < src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 0xFFFF
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_MIN(tmp, 8)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 16-bit integers in "a" by minimum. Returns the
+ minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[15:0] < src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] < src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[16*len-1:0], len)
+ }
+ dst[15:0] := REDUCE_MIN(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 16-bit integers in "a" by minimum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[15:0] < src[31:16] ? src[15:0] : src[31:16])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*16
+ src[i+15:i] := (src[i+15:i] < src[i+16*len+15:i+16*len] ? src[i+15:i] :
+ src[i+16*len+15:i+16*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[16*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[i+15:i] := a[i+15:i]
+ ELSE
+ tmp[i+15:i] := 0xFFFF
+ FI
+ ENDFOR
+ dst[15:0] := REDUCE_MIN(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 8-bit integers in "a" by minimum. Returns the
+ minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[7:0] < src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] < src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_MIN(a, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 8-bit integers in "a" by minimum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[7:0] < src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] < src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 0xFF
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_MIN(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 8-bit integers in "a" by minimum. Returns the
+ minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[7:0] < src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] < src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[8*len-1:0], len)
+ }
+ dst[7:0] := REDUCE_MIN(a, 32)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 8-bit integers in "a" by minimum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[7:0] < src[15:8] ? src[7:0] : src[15:8])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*8
+ src[i+7:i] := (src[i+7:i] < src[i+8*len+7:i+8*len] ? src[i+7:i] :
+ src[i+8*len+7:i+8*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[8*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ tmp[i+7:i] := a[i+7:i]
+ ELSE
+ tmp[i+7:i] := 0xFF
+ FI
+ ENDFOR
+ dst[7:0] := REDUCE_MIN(tmp, 16)
+
+ AVX512BW
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+ Unpack and interleave 32 bits from masks "a" and "b", and store the 64-bit
+ result in "dst".
+
+ dst[31:0] := b[31:0]
+ dst[63:32] := a[31:0]
+ dst[MAX:64] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+ Unpack and interleave 16 bits from masks "a" and "b", and store the 32-bit
+ result in "dst".
+
+ dst[15:0] := b[15:0]
+ dst[31:16] := a[15:0]
+ dst[MAX:32] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit
+ integers in "a" compared to those in "b", and store the 16-bit results in "dst".
+ Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two
+ SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the
+ uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from
+ within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit
+ lane uses the selected quadruplet at 8-bit offsets.
+
+ FOR i := 0 to 3
+ tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
+ tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
+ tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
+ tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
+ ENDFOR
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
+ ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
+
+ dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16]) +\
+ ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
+
+ dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] -
+ tmp[i+31:i+24]) +\
+ ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
+
+ dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] -
+ tmp[i+39:i+32]) +\
+ ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit
+ integers in "a" compared to those in "b", and store the 16-bit results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+ Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two
+ SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the
+ uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from
+ within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit
+ lane uses the selected quadruplet at 8-bit offsets.
+
+ FOR i := 0 to 3
+ tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
+ tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
+ tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
+ tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
+ ENDFOR
+ FOR j := 0 to 7
+ i := j*64
+ tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
+ ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
+ tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16])
+ +\
+ ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
+ tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] -
+ tmp[i+31:i+24]) +\
+ ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
+ tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] -
+ tmp[i+39:i+32]) +\
+ ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
+ ENDFOR
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit
+ integers in "a" compared to those in "b", and store the 16-bit results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ Four SADs are performed on four 8-bit quadruplets for each 64-bit lane. The first two
+ SADs use the lower 8-bit quadruplet of the lane from "a", and the last two SADs use the
+ uppper 8-bit quadruplet of the lane from "a". Quadruplets from "b" are selected from
+ within 128-bit lanes according to the control in "imm8", and each SAD in each 64-bit
+ lane uses the selected quadruplet at 8-bit offsets.
+
+ FOR i := 0 to 3
+ tmp.m128[i].dword[0] := b.m128[i].dword[ imm8[1:0] ]
+ tmp.m128[i].dword[1] := b.m128[i].dword[ imm8[3:2] ]
+ tmp.m128[i].dword[2] := b.m128[i].dword[ imm8[5:4] ]
+ tmp.m128[i].dword[3] := b.m128[i].dword[ imm8[7:6] ]
+ ENDFOR
+ FOR j := 0 to 7
+ i := j*64
+ tmp_dst[i+15:i] := ABS(a[i+7:i] - tmp[i+7:i]) + ABS(a[i+15:i+8] - tmp[i+15:i+8]) +\
+ ABS(a[i+23:i+16] - tmp[i+23:i+16]) + ABS(a[i+31:i+24] - tmp[i+31:i+24])
+ tmp_dst[i+31:i+16] := ABS(a[i+7:i] - tmp[i+15:i+8]) + ABS(a[i+15:i+8] - tmp[i+23:i+16])
+ +\
+ ABS(a[i+23:i+16] - tmp[i+31:i+24]) + ABS(a[i+31:i+24] - tmp[i+39:i+32])
+ tmp_dst[i+47:i+32] := ABS(a[i+39:i+32] - tmp[i+23:i+16]) + ABS(a[i+47:i+40] -
+ tmp[i+31:i+24]) +\
+ ABS(a[i+55:i+48] - tmp[i+39:i+32]) + ABS(a[i+63:i+56] - tmp[i+47:i+40])
+ tmp_dst[i+63:i+48] := ABS(a[i+39:i+32] - tmp[i+31:i+24]) + ABS(a[i+47:i+40] -
+ tmp[i+39:i+32]) +\
+ ABS(a[i+55:i+48] - tmp[i+47:i+40]) + ABS(a[i+63:i+56] - tmp[i+55:i+48])
+ ENDFOR
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary
+ result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst".
+
+ FOR j := 0 to 3
+ i := j*128
+ tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
+ dst[i+127:i] := tmp[127:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary
+ result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*128
+ tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
+ tmp_dst[i+127:i] := tmp[127:0]
+ ENDFOR
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Concatenate pairs of 16-byte blocks in "a" and "b" into a 32-byte temporary
+ result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*128
+ tmp[255:0] := ((a[i+127:i] << 128)[255:0] OR b[i+127:i]) >> (imm8*8)
+ tmp_dst[i+127:i] := tmp[127:0]
+ ENDFOR
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed 8-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := b[i+7:i]
+ ELSE
+ dst[i+7:i] := a[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed 16-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := b[i+15:i]
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+ Broadcast the low packed 8-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := a[7:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low packed 8-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := a[15:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "idx" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ off := 16*idx[i+4:i]
+ dst[i+15:i] := idx[i+5] ? b[off+15:off] : a[off+15:off]
+ ELSE
+ dst[i+15:i] := idx[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ off := 16*idx[i+4:i]
+ dst[i+15:i] := idx[i+5] ? b[off+15:off] : a[off+15:off]
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ off := 16*idx[i+4:i]
+ dst[i+15:i] := idx[i+5] ? b[off+15:off] : a[off+15:off]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ off := 16*idx[i+4:i]
+ dst[i+15:i] := idx[i+5] ? b[off+15:off] : a[off+15:off]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ id := idx[i+4:i]*16
+ IF k[j]
+ dst[i+15:i] := a[id+15:id]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ id := idx[i+4:i]*16
+ IF k[j]
+ dst[i+15:i] := a[id+15:id]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle 16-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ id := idx[i+4:i]*16
+ dst[i+15:i] := a[id+15:id]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 8-bit integer in "a".
+
+ FOR j := 0 to 63
+ i := j*8
+ IF a[i+7]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+ Set each packed 8-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := 0xFF
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+ Set each packed 16-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := 0xFFFF
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 16-bit integer in "a".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF a[i+15]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+ Compute the absolute differences of packed unsigned 8-bit integers in "a" and
+ "b", then horizontally sum each consecutive 8 differences to produce eight unsigned
+ 16-bit integers, and pack these unsigned 16-bit integers in the low 16 bits of 64-bit
+ elements in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i])
+ ENDFOR
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+15:i] := tmp[i+7:i] + tmp[i+15:i+8] + tmp[i+23:i+16] + tmp[i+31:i+24] + \
+ tmp[i+39:i+32] + tmp[i+47:i+40] + tmp[i+55:i+48] + tmp[i+63:i+56]
+ dst[i+63:i+16] := 0
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" within 128-bit lanes using the control in the
+ corresponding 8-bit element of "b", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ IF b[i+7] == 1
+ dst[i+7:i] := 0
+ ELSE
+ index[5:0] := b[i+3:i] + (j & 0x30)
+ dst[i+7:i] := a[index*8+7:index*8]
+ FI
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle packed 8-bit integers in "a" according to shuffle control mask in the
+ corresponding 8-bit element of "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ IF b[i+7] == 1
+ dst[i+7:i] := 0
+ ELSE
+ index[5:0] := b[i+3:i] + (j & 0x30)
+ dst[i+7:i] := a[index*8+7:index*8]
+ FI
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Swizzle
+
+
+
+
+
+ Shuffle packed 8-bit integers in "a" according to shuffle control mask in the
+ corresponding 8-bit element of "b", and store the results in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ IF b[i+7] == 1
+ dst[i+7:i] := 0
+ ELSE
+ index[5:0] := b[i+3:i] + (j & 0x30)
+ dst[i+7:i] := a[index*8+7:index*8]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with
+ the low 64 bits of 128-bit lanes being copied from from "a" to "dst", using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[63:0] := a[63:0]
+ tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
+ tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
+ tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
+ tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
+ tmp_dst[191:128] := a[191:128]
+ tmp_dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
+ tmp_dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
+ tmp_dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
+ tmp_dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
+ tmp_dst[319:256] := a[319:256]
+ tmp_dst[335:320] := (a >> (imm8[1:0] * 16))[335:320]
+ tmp_dst[351:336] := (a >> (imm8[3:2] * 16))[335:320]
+ tmp_dst[367:352] := (a >> (imm8[5:4] * 16))[335:320]
+ tmp_dst[383:368] := (a >> (imm8[7:6] * 16))[335:320]
+ tmp_dst[447:384] := a[447:384]
+ tmp_dst[463:448] := (a >> (imm8[1:0] * 16))[463:448]
+ tmp_dst[479:464] := (a >> (imm8[3:2] * 16))[463:448]
+ tmp_dst[495:480] := (a >> (imm8[5:4] * 16))[463:448]
+ tmp_dst[511:496] := (a >> (imm8[7:6] * 16))[463:448]
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with
+ the low 64 bits of 128-bit lanes being copied from from "a" to "dst", using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[63:0] := a[63:0]
+ tmp_dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
+ tmp_dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
+ tmp_dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
+ tmp_dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
+ tmp_dst[191:128] := a[191:128]
+ tmp_dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
+ tmp_dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
+ tmp_dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
+ tmp_dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
+ tmp_dst[319:256] := a[319:256]
+ tmp_dst[335:320] := (a >> (imm8[1:0] * 16))[335:320]
+ tmp_dst[351:336] := (a >> (imm8[3:2] * 16))[335:320]
+ tmp_dst[367:352] := (a >> (imm8[5:4] * 16))[335:320]
+ tmp_dst[383:368] := (a >> (imm8[7:6] * 16))[335:320]
+ tmp_dst[447:384] := a[447:384]
+ tmp_dst[463:448] := (a >> (imm8[1:0] * 16))[463:448]
+ tmp_dst[479:464] := (a >> (imm8[3:2] * 16))[463:448]
+ tmp_dst[495:480] := (a >> (imm8[5:4] * 16))[463:448]
+ tmp_dst[511:496] := (a >> (imm8[7:6] * 16))[463:448]
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle 16-bit integers in the high 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the high 64 bits of 128-bit lanes of "dst", with
+ the low 64 bits of 128-bit lanes being copied from from "a" to "dst".
+
+ dst[63:0] := a[63:0]
+ dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
+ dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
+ dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
+ dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
+ dst[191:128] := a[191:128]
+ dst[207:192] := (a >> (imm8[1:0] * 16))[207:192]
+ dst[223:208] := (a >> (imm8[3:2] * 16))[207:192]
+ dst[239:224] := (a >> (imm8[5:4] * 16))[207:192]
+ dst[255:240] := (a >> (imm8[7:6] * 16))[207:192]
+ dst[319:256] := a[319:256]
+ dst[335:320] := (a >> (imm8[1:0] * 16))[335:320]
+ dst[351:336] := (a >> (imm8[3:2] * 16))[335:320]
+ dst[367:352] := (a >> (imm8[5:4] * 16))[335:320]
+ dst[383:368] := (a >> (imm8[7:6] * 16))[335:320]
+ dst[447:384] := a[447:384]
+ dst[463:448] := (a >> (imm8[1:0] * 16))[463:448]
+ dst[479:464] := (a >> (imm8[3:2] * 16))[463:448]
+ dst[495:480] := (a >> (imm8[5:4] * 16))[463:448]
+ dst[511:496] := (a >> (imm8[7:6] * 16))[463:448]
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with
+ the high 64 bits of 128-bit lanes being copied from from "a" to "dst", using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
+ tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
+ tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
+ tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
+ tmp_dst[127:64] := a[127:64]
+ tmp_dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
+ tmp_dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
+ tmp_dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
+ tmp_dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
+ tmp_dst[255:192] := a[255:192]
+ tmp_dst[271:256] := (a >> (imm8[1:0] * 16))[271:256]
+ tmp_dst[287:272] := (a >> (imm8[3:2] * 16))[271:256]
+ tmp_dst[303:288] := (a >> (imm8[5:4] * 16))[271:256]
+ tmp_dst[319:304] := (a >> (imm8[7:6] * 16))[271:256]
+ tmp_dst[383:320] := a[383:320]
+ tmp_dst[399:384] := (a >> (imm8[1:0] * 16))[399:384]
+ tmp_dst[415:400] := (a >> (imm8[3:2] * 16))[399:384]
+ tmp_dst[431:416] := (a >> (imm8[5:4] * 16))[399:384]
+ tmp_dst[447:432] := (a >> (imm8[7:6] * 16))[399:384]
+ tmp_dst[511:448] := a[511:448]
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with
+ the high 64 bits of 128-bit lanes being copied from from "a" to "dst", using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
+ tmp_dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
+ tmp_dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
+ tmp_dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
+ tmp_dst[127:64] := a[127:64]
+ tmp_dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
+ tmp_dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
+ tmp_dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
+ tmp_dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
+ tmp_dst[255:192] := a[255:192]
+ tmp_dst[271:256] := (a >> (imm8[1:0] * 16))[271:256]
+ tmp_dst[287:272] := (a >> (imm8[3:2] * 16))[271:256]
+ tmp_dst[303:288] := (a >> (imm8[5:4] * 16))[271:256]
+ tmp_dst[319:304] := (a >> (imm8[7:6] * 16))[271:256]
+ tmp_dst[383:320] := a[383:320]
+ tmp_dst[399:384] := (a >> (imm8[1:0] * 16))[399:384]
+ tmp_dst[415:400] := (a >> (imm8[3:2] * 16))[399:384]
+ tmp_dst[431:416] := (a >> (imm8[5:4] * 16))[399:384]
+ tmp_dst[447:432] := (a >> (imm8[7:6] * 16))[399:384]
+ tmp_dst[511:448] := a[511:448]
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle 16-bit integers in the low 64 bits of 128-bit lanes of "a" using the
+ control in "imm8". Store the results in the low 64 bits of 128-bit lanes of "dst", with
+ the high 64 bits of 128-bit lanes being copied from from "a" to "dst".
+
+ dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
+ dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
+ dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
+ dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
+ dst[127:64] := a[127:64]
+ dst[143:128] := (a >> (imm8[1:0] * 16))[143:128]
+ dst[159:144] := (a >> (imm8[3:2] * 16))[143:128]
+ dst[175:160] := (a >> (imm8[5:4] * 16))[143:128]
+ dst[191:176] := (a >> (imm8[7:6] * 16))[143:128]
+ dst[255:192] := a[255:192]
+ dst[271:256] := (a >> (imm8[1:0] * 16))[271:256]
+ dst[287:272] := (a >> (imm8[3:2] * 16))[271:256]
+ dst[303:288] := (a >> (imm8[5:4] * 16))[271:256]
+ dst[319:304] := (a >> (imm8[7:6] * 16))[271:256]
+ dst[383:320] := a[383:320]
+ dst[399:384] := (a >> (imm8[1:0] * 16))[399:384]
+ dst[415:400] := (a >> (imm8[3:2] * 16))[399:384]
+ dst[431:416] := (a >> (imm8[5:4] * 16))[399:384]
+ dst[447:432] := (a >> (imm8[7:6] * 16))[399:384]
+ dst[511:448] := a[511:448]
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the high half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[71:64]
+ dst[15:8] := src2[71:64]
+ dst[23:16] := src1[79:72]
+ dst[31:24] := src2[79:72]
+ dst[39:32] := src1[87:80]
+ dst[47:40] := src2[87:80]
+ dst[55:48] := src1[95:88]
+ dst[63:56] := src2[95:88]
+ dst[71:64] := src1[103:96]
+ dst[79:72] := src2[103:96]
+ dst[87:80] := src1[111:104]
+ dst[95:88] := src2[111:104]
+ dst[103:96] := src1[119:112]
+ dst[111:104] := src2[119:112]
+ dst[119:112] := src1[127:120]
+ dst[127:120] := src2[127:120]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_BYTES(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_BYTES(a[511:384], b[511:384])
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the high half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[71:64]
+ dst[15:8] := src2[71:64]
+ dst[23:16] := src1[79:72]
+ dst[31:24] := src2[79:72]
+ dst[39:32] := src1[87:80]
+ dst[47:40] := src2[87:80]
+ dst[55:48] := src1[95:88]
+ dst[63:56] := src2[95:88]
+ dst[71:64] := src1[103:96]
+ dst[79:72] := src2[103:96]
+ dst[87:80] := src1[111:104]
+ dst[95:88] := src2[111:104]
+ dst[103:96] := src1[119:112]
+ dst[111:104] := src2[119:112]
+ dst[119:112] := src1[127:120]
+ dst[127:120] := src2[127:120]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_BYTES(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_BYTES(a[511:384], b[511:384])
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the high half of each 128-bit lane in
+ "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[71:64]
+ dst[15:8] := src2[71:64]
+ dst[23:16] := src1[79:72]
+ dst[31:24] := src2[79:72]
+ dst[39:32] := src1[87:80]
+ dst[47:40] := src2[87:80]
+ dst[55:48] := src1[95:88]
+ dst[63:56] := src2[95:88]
+ dst[71:64] := src1[103:96]
+ dst[79:72] := src2[103:96]
+ dst[87:80] := src1[111:104]
+ dst[95:88] := src2[111:104]
+ dst[103:96] := src1[119:112]
+ dst[111:104] := src2[119:112]
+ dst[119:112] := src1[127:120]
+ dst[127:120] := src2[127:120]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_BYTES(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_HIGH_BYTES(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_HIGH_BYTES(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[79:64]
+ dst[31:16] := src2[79:64]
+ dst[47:32] := src1[95:80]
+ dst[63:48] := src2[95:80]
+ dst[79:64] := src1[111:96]
+ dst[95:80] := src2[111:96]
+ dst[111:96] := src1[127:112]
+ dst[127:112] := src2[127:112]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_WORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_WORDS(a[511:384], b[511:384])
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[79:64]
+ dst[31:16] := src2[79:64]
+ dst[47:32] := src1[95:80]
+ dst[63:48] := src2[95:80]
+ dst[79:64] := src1[111:96]
+ dst[95:80] := src2[111:96]
+ dst[111:96] := src1[127:112]
+ dst[127:112] := src2[127:112]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_WORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_WORDS(a[511:384], b[511:384])
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[79:64]
+ dst[31:16] := src2[79:64]
+ dst[47:32] := src1[95:80]
+ dst[63:48] := src2[95:80]
+ dst[79:64] := src1[111:96]
+ dst[95:80] := src2[111:96]
+ dst[111:96] := src1[127:112]
+ dst[127:112] := src2[127:112]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_WORDS(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_HIGH_WORDS(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_HIGH_WORDS(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[7:0]
+ dst[15:8] := src2[7:0]
+ dst[23:16] := src1[15:8]
+ dst[31:24] := src2[15:8]
+ dst[39:32] := src1[23:16]
+ dst[47:40] := src2[23:16]
+ dst[55:48] := src1[31:24]
+ dst[63:56] := src2[31:24]
+ dst[71:64] := src1[39:32]
+ dst[79:72] := src2[39:32]
+ dst[87:80] := src1[47:40]
+ dst[95:88] := src2[47:40]
+ dst[103:96] := src1[55:48]
+ dst[111:104] := src2[55:48]
+ dst[119:112] := src1[63:56]
+ dst[127:120] := src2[63:56]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_BYTES(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_BYTES(a[511:384], b[511:384])
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[7:0]
+ dst[15:8] := src2[7:0]
+ dst[23:16] := src1[15:8]
+ dst[31:24] := src2[15:8]
+ dst[39:32] := src1[23:16]
+ dst[47:40] := src2[23:16]
+ dst[55:48] := src1[31:24]
+ dst[63:56] := src2[31:24]
+ dst[71:64] := src1[39:32]
+ dst[79:72] := src2[39:32]
+ dst[87:80] := src1[47:40]
+ dst[95:88] := src2[47:40]
+ dst[103:96] := src1[55:48]
+ dst[111:104] := src2[55:48]
+ dst[119:112] := src1[63:56]
+ dst[127:120] := src2[63:56]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_BYTES(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_BYTES(a[511:384], b[511:384])
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[7:0]
+ dst[15:8] := src2[7:0]
+ dst[23:16] := src1[15:8]
+ dst[31:24] := src2[15:8]
+ dst[39:32] := src1[23:16]
+ dst[47:40] := src2[23:16]
+ dst[55:48] := src1[31:24]
+ dst[63:56] := src2[31:24]
+ dst[71:64] := src1[39:32]
+ dst[79:72] := src2[39:32]
+ dst[87:80] := src1[47:40]
+ dst[95:88] := src2[47:40]
+ dst[103:96] := src1[55:48]
+ dst[111:104] := src2[55:48]
+ dst[119:112] := src1[63:56]
+ dst[127:120] := src2[63:56]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_BYTES(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_BYTES(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_BYTES(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[15:0]
+ dst[31:16] := src2[15:0]
+ dst[47:32] := src1[31:16]
+ dst[63:48] := src2[31:16]
+ dst[79:64] := src1[47:32]
+ dst[95:80] := src2[47:32]
+ dst[111:96] := src1[63:48]
+ dst[127:112] := src2[63:48]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_WORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_WORDS(a[511:384], b[511:384])
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[15:0]
+ dst[31:16] := src2[15:0]
+ dst[47:32] := src1[31:16]
+ dst[63:48] := src2[31:16]
+ dst[79:64] := src1[47:32]
+ dst[95:80] := src2[47:32]
+ dst[111:96] := src1[63:48]
+ dst[127:112] := src2[63:48]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_WORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_WORDS(a[511:384], b[511:384])
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[15:0]
+ dst[31:16] := src2[15:0]
+ dst[47:32] := src1[31:16]
+ dst[63:48] := src2[31:16]
+ dst[79:64] := src1[47:32]
+ dst[95:80] := src2[47:32]
+ dst[111:96] := src1[63:48]
+ dst[127:112] := src2[63:48]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_WORDS(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_WORDS(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_WORDS(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Miscellaneous
+
+
+
+
+
+
+ Load packed 16-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Load
+
+
+
+
+
+ Load packed 16-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+i+15:mem_addr+i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Load
+
+
+
+
+
+
+ Load packed 8-bit integers from memory into "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Load
+
+
+
+
+
+ Load packed 8-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+i+7:mem_addr+i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Load
+
+
+
+
+ Load 512-bits (composed of 32 packed 16-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Load
+
+
+
+
+ Load 512-bits (composed of 64 packed 8-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Load
+
+
+
+
+ Load 32-bit mask from memory into "k".
+
+ k[31:0] := MEM[mem_addr+31:mem_addr]
+
+
+ AVX512BW
+
+ Load
+
+
+
+
+ Load 64-bit mask from memory into "k".
+
+ k[63:0] := MEM[mem_addr+63:mem_addr]
+
+
+ AVX512BW
+
+ Load
+
+
+
+
+
+
+ Move packed 16-bit integers from "a" into "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Move
+
+
+
+
+
+ Move packed 16-bit integers from "a" into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Move
+
+
+
+
+
+
+ Move packed 8-bit integers from "a" into "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Move
+
+
+
+
+
+ Move packed 8-bit integers from "a" into "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Move
+
+
+
+
+
+
+ Store packed 16-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ MEM[mem_addr+i+15:mem_addr+i] := a[i+15:i]
+ FI
+ ENDFOR
+
+
+ AVX512BW
+
+ Store
+
+
+
+
+
+
+ Store packed 8-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
+ FI
+ ENDFOR
+
+
+ AVX512BW
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 32 packed 16-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512BW
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 64 packed 8-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512BW
+
+ Store
+
+
+
+
+
+ Store 32-bit mask from "a" into memory.
+
+ MEM[mem_addr+31:mem_addr] := a[31:0]
+
+
+ AVX512BW
+
+ Store
+
+
+
+
+
+ Store 64-bit mask from "a" into memory.
+
+ MEM[mem_addr+63:mem_addr] := a[63:0]
+
+
+ AVX512BW
+
+ Store
+
+
+
+
+ Compute the absolute value of packed signed 8-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := ABS(a[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the absolute value of packed signed 8-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := ABS(a[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Compute the absolute value of packed signed 8-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := ABS(a[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+ Compute the absolute value of packed signed 16-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ABS(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the absolute value of packed signed 16-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ABS(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Compute the absolute value of packed signed 16-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ABS(a[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := a[i+7:i] + b[i+7:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] + b[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] + b[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Add packed signed 8-bit integers in "a" and "b" using saturation, and store the
+ results in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed signed 8-bit integers in "a" and "b" using saturation, and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed signed 8-bit integers in "a" and "b" using saturation, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Add packed signed 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed signed 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed signed 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := a[i+15:i] + b[i+15:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] + b[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] + b[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Average packed unsigned 8-bit integers in "a" and "b", and store the results in
+ "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Average packed unsigned 8-bit integers in "a" and "b", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Average packed unsigned 8-bit integers in "a" and "b", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Average packed unsigned 16-bit integers in "a" and "b", and store the results
+ in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Average packed unsigned 16-bit integers in "a" and "b", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Average packed unsigned 16-bit integers in "a" and "b", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Vertically multiply each unsigned 8-bit integer from "a" with the corresponding
+ signed 8-bit integer from "b", producing intermediate signed 16-bit integers.
+ Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the
+ saturated results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers
+ in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs
+ of intermediate signed 16-bit integers, and pack the saturated results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed unsigned 8-bit integers in "a" by packed signed 8-bit integers
+ in "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs
+ of intermediate signed 16-bit integers, and pack the saturated results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers,
+ and pack the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) +
+ SignExtend32(a[i+15:i]*b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers,
+ and pack the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) +
+ SignExtend32(a[i+15:i]*b[i+15:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers,
+ and pack the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) +
+ SignExtend32(a[i+15:i]*b[i+15:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ maximum values in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ minimum values in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Truncate each intermediate integer to the 18 most significant
+ bits, round by adding 1, and store bits [16:1] to "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
+ dst[i+15:i] := tmp[16:1]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Truncate each intermediate integer to the 18 most significant
+ bits, round by adding 1, and store bits [16:1] to "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
+ dst[i+15:i] := tmp[16:1]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Truncate each intermediate integer to the 18 most significant
+ bits, round by adding 1, and store bits [16:1] to "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
+ dst[i+15:i] := tmp[16:1]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed unsigned 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed unsigned 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed unsigned 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed 16-bit integers in "a" and "b", producing intermediate
+ 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[15:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed 16-bit integers in "a" and "b", producing intermediate
+ 32-bit integers, and store the low 16 bits of the intermediate integers in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[15:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 16-bit integers in "a" and "b", producing intermediate
+ 32-bit integers, and store the low 16 bits of the intermediate integers in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[15:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] - b[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[i+7:i] - b[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := a[i+7:i] - b[i+7:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a"
+ using saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a"
+ using saturation, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a"
+ using saturation, and store the results in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in
+ "a" using saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in
+ "a" using saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in
+ "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit
+ integers in "a" using saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit
+ integers in "a" using saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit
+ integers in "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit
+ integers in "a" using saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit
+ integers in "a" using saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit
+ integers in "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] - b[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[i+15:i] - b[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := a[i+15:i] - b[i+15:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Arithmetic
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using signed saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := Saturate16(a[31:0])
+ tmp_dst[31:16] := Saturate16(a[63:32])
+ tmp_dst[47:32] := Saturate16(a[95:64])
+ tmp_dst[63:48] := Saturate16(a[127:96])
+ tmp_dst[79:64] := Saturate16(b[31:0])
+ tmp_dst[95:80] := Saturate16(b[63:32])
+ tmp_dst[111:96] := Saturate16(b[95:64])
+ tmp_dst[127:112] := Saturate16(b[127:96])
+ tmp_dst[143:128] := Saturate16(a[159:128])
+ tmp_dst[159:144] := Saturate16(a[191:160])
+ tmp_dst[175:160] := Saturate16(a[223:192])
+ tmp_dst[191:176] := Saturate16(a[255:224])
+ tmp_dst[207:192] := Saturate16(b[159:128])
+ tmp_dst[223:208] := Saturate16(b[191:160])
+ tmp_dst[239:224] := Saturate16(b[223:192])
+ tmp_dst[255:240] := Saturate16(b[255:224])
+ tmp_dst[271:256] := Saturate16(a[287:256])
+ tmp_dst[287:272] := Saturate16(a[319:288])
+ tmp_dst[303:288] := Saturate16(a[351:320])
+ tmp_dst[319:304] := Saturate16(a[383:352])
+ tmp_dst[335:320] := Saturate16(b[287:256])
+ tmp_dst[351:336] := Saturate16(b[319:288])
+ tmp_dst[367:352] := Saturate16(b[351:320])
+ tmp_dst[383:368] := Saturate16(b[383:352])
+ tmp_dst[399:384] := Saturate16(a[415:384])
+ tmp_dst[415:400] := Saturate16(a[447:416])
+ tmp_dst[431:416] := Saturate16(a[479:448])
+ tmp_dst[447:432] := Saturate16(a[511:480])
+ tmp_dst[463:448] := Saturate16(b[415:384])
+ tmp_dst[479:464] := Saturate16(b[447:416])
+ tmp_dst[495:480] := Saturate16(b[479:448])
+ tmp_dst[511:496] := Saturate16(b[511:480])
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using signed saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := Saturate16(a[31:0])
+ tmp_dst[31:16] := Saturate16(a[63:32])
+ tmp_dst[47:32] := Saturate16(a[95:64])
+ tmp_dst[63:48] := Saturate16(a[127:96])
+ tmp_dst[79:64] := Saturate16(b[31:0])
+ tmp_dst[95:80] := Saturate16(b[63:32])
+ tmp_dst[111:96] := Saturate16(b[95:64])
+ tmp_dst[127:112] := Saturate16(b[127:96])
+ tmp_dst[143:128] := Saturate16(a[159:128])
+ tmp_dst[159:144] := Saturate16(a[191:160])
+ tmp_dst[175:160] := Saturate16(a[223:192])
+ tmp_dst[191:176] := Saturate16(a[255:224])
+ tmp_dst[207:192] := Saturate16(b[159:128])
+ tmp_dst[223:208] := Saturate16(b[191:160])
+ tmp_dst[239:224] := Saturate16(b[223:192])
+ tmp_dst[255:240] := Saturate16(b[255:224])
+ tmp_dst[271:256] := Saturate16(a[287:256])
+ tmp_dst[287:272] := Saturate16(a[319:288])
+ tmp_dst[303:288] := Saturate16(a[351:320])
+ tmp_dst[319:304] := Saturate16(a[383:352])
+ tmp_dst[335:320] := Saturate16(b[287:256])
+ tmp_dst[351:336] := Saturate16(b[319:288])
+ tmp_dst[367:352] := Saturate16(b[351:320])
+ tmp_dst[383:368] := Saturate16(b[383:352])
+ tmp_dst[399:384] := Saturate16(a[415:384])
+ tmp_dst[415:400] := Saturate16(a[447:416])
+ tmp_dst[431:416] := Saturate16(a[479:448])
+ tmp_dst[447:432] := Saturate16(a[511:480])
+ tmp_dst[463:448] := Saturate16(b[415:384])
+ tmp_dst[479:464] := Saturate16(b[447:416])
+ tmp_dst[495:480] := Saturate16(b[479:448])
+ tmp_dst[511:496] := Saturate16(b[511:480])
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using signed saturation, and store the results in "dst".
+
+ dst[15:0] := Saturate16(a[31:0])
+ dst[31:16] := Saturate16(a[63:32])
+ dst[47:32] := Saturate16(a[95:64])
+ dst[63:48] := Saturate16(a[127:96])
+ dst[79:64] := Saturate16(b[31:0])
+ dst[95:80] := Saturate16(b[63:32])
+ dst[111:96] := Saturate16(b[95:64])
+ dst[127:112] := Saturate16(b[127:96])
+ dst[143:128] := Saturate16(a[159:128])
+ dst[159:144] := Saturate16(a[191:160])
+ dst[175:160] := Saturate16(a[223:192])
+ dst[191:176] := Saturate16(a[255:224])
+ dst[207:192] := Saturate16(b[159:128])
+ dst[223:208] := Saturate16(b[191:160])
+ dst[239:224] := Saturate16(b[223:192])
+ dst[255:240] := Saturate16(b[255:224])
+ dst[271:256] := Saturate16(a[287:256])
+ dst[287:272] := Saturate16(a[319:288])
+ dst[303:288] := Saturate16(a[351:320])
+ dst[319:304] := Saturate16(a[383:352])
+ dst[335:320] := Saturate16(b[287:256])
+ dst[351:336] := Saturate16(b[319:288])
+ dst[367:352] := Saturate16(b[351:320])
+ dst[383:368] := Saturate16(b[383:352])
+ dst[399:384] := Saturate16(a[415:384])
+ dst[415:400] := Saturate16(a[447:416])
+ dst[431:416] := Saturate16(a[479:448])
+ dst[447:432] := Saturate16(a[511:480])
+ dst[463:448] := Saturate16(b[415:384])
+ dst[479:464] := Saturate16(b[447:416])
+ dst[495:480] := Saturate16(b[479:448])
+ dst[511:496] := Saturate16(b[511:480])
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using signed saturation, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := Saturate8(a[15:0])
+ tmp_dst[15:8] := Saturate8(a[31:16])
+ tmp_dst[23:16] := Saturate8(a[47:32])
+ tmp_dst[31:24] := Saturate8(a[63:48])
+ tmp_dst[39:32] := Saturate8(a[79:64])
+ tmp_dst[47:40] := Saturate8(a[95:80])
+ tmp_dst[55:48] := Saturate8(a[111:96])
+ tmp_dst[63:56] := Saturate8(a[127:112])
+ tmp_dst[71:64] := Saturate8(b[15:0])
+ tmp_dst[79:72] := Saturate8(b[31:16])
+ tmp_dst[87:80] := Saturate8(b[47:32])
+ tmp_dst[95:88] := Saturate8(b[63:48])
+ tmp_dst[103:96] := Saturate8(b[79:64])
+ tmp_dst[111:104] := Saturate8(b[95:80])
+ tmp_dst[119:112] := Saturate8(b[111:96])
+ tmp_dst[127:120] := Saturate8(b[127:112])
+ tmp_dst[135:128] := Saturate8(a[143:128])
+ tmp_dst[143:136] := Saturate8(a[159:144])
+ tmp_dst[151:144] := Saturate8(a[175:160])
+ tmp_dst[159:152] := Saturate8(a[191:176])
+ tmp_dst[167:160] := Saturate8(a[207:192])
+ tmp_dst[175:168] := Saturate8(a[223:208])
+ tmp_dst[183:176] := Saturate8(a[239:224])
+ tmp_dst[191:184] := Saturate8(a[255:240])
+ tmp_dst[199:192] := Saturate8(b[143:128])
+ tmp_dst[207:200] := Saturate8(b[159:144])
+ tmp_dst[215:208] := Saturate8(b[175:160])
+ tmp_dst[223:216] := Saturate8(b[191:176])
+ tmp_dst[231:224] := Saturate8(b[207:192])
+ tmp_dst[239:232] := Saturate8(b[223:208])
+ tmp_dst[247:240] := Saturate8(b[239:224])
+ tmp_dst[255:248] := Saturate8(b[255:240])
+ tmp_dst[263:256] := Saturate8(a[271:256])
+ tmp_dst[271:264] := Saturate8(a[287:272])
+ tmp_dst[279:272] := Saturate8(a[303:288])
+ tmp_dst[287:280] := Saturate8(a[319:304])
+ tmp_dst[295:288] := Saturate8(a[335:320])
+ tmp_dst[303:296] := Saturate8(a[351:336])
+ tmp_dst[311:304] := Saturate8(a[367:352])
+ tmp_dst[319:312] := Saturate8(a[383:368])
+ tmp_dst[327:320] := Saturate8(b[271:256])
+ tmp_dst[335:328] := Saturate8(b[287:272])
+ tmp_dst[343:336] := Saturate8(b[303:288])
+ tmp_dst[351:344] := Saturate8(b[319:304])
+ tmp_dst[359:352] := Saturate8(b[335:320])
+ tmp_dst[367:360] := Saturate8(b[351:336])
+ tmp_dst[375:368] := Saturate8(b[367:352])
+ tmp_dst[383:376] := Saturate8(b[383:368])
+ tmp_dst[391:384] := Saturate8(a[399:384])
+ tmp_dst[399:392] := Saturate8(a[415:400])
+ tmp_dst[407:400] := Saturate8(a[431:416])
+ tmp_dst[415:408] := Saturate8(a[447:432])
+ tmp_dst[423:416] := Saturate8(a[463:448])
+ tmp_dst[431:424] := Saturate8(a[479:464])
+ tmp_dst[439:432] := Saturate8(a[495:480])
+ tmp_dst[447:440] := Saturate8(a[511:496])
+ tmp_dst[455:448] := Saturate8(b[399:384])
+ tmp_dst[463:456] := Saturate8(b[415:400])
+ tmp_dst[471:464] := Saturate8(b[431:416])
+ tmp_dst[479:472] := Saturate8(b[447:432])
+ tmp_dst[487:480] := Saturate8(b[463:448])
+ tmp_dst[495:488] := Saturate8(b[479:464])
+ tmp_dst[503:496] := Saturate8(b[495:480])
+ tmp_dst[511:504] := Saturate8(b[511:496])
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := Saturate8(a[15:0])
+ tmp_dst[15:8] := Saturate8(a[31:16])
+ tmp_dst[23:16] := Saturate8(a[47:32])
+ tmp_dst[31:24] := Saturate8(a[63:48])
+ tmp_dst[39:32] := Saturate8(a[79:64])
+ tmp_dst[47:40] := Saturate8(a[95:80])
+ tmp_dst[55:48] := Saturate8(a[111:96])
+ tmp_dst[63:56] := Saturate8(a[127:112])
+ tmp_dst[71:64] := Saturate8(b[15:0])
+ tmp_dst[79:72] := Saturate8(b[31:16])
+ tmp_dst[87:80] := Saturate8(b[47:32])
+ tmp_dst[95:88] := Saturate8(b[63:48])
+ tmp_dst[103:96] := Saturate8(b[79:64])
+ tmp_dst[111:104] := Saturate8(b[95:80])
+ tmp_dst[119:112] := Saturate8(b[111:96])
+ tmp_dst[127:120] := Saturate8(b[127:112])
+ tmp_dst[135:128] := Saturate8(a[143:128])
+ tmp_dst[143:136] := Saturate8(a[159:144])
+ tmp_dst[151:144] := Saturate8(a[175:160])
+ tmp_dst[159:152] := Saturate8(a[191:176])
+ tmp_dst[167:160] := Saturate8(a[207:192])
+ tmp_dst[175:168] := Saturate8(a[223:208])
+ tmp_dst[183:176] := Saturate8(a[239:224])
+ tmp_dst[191:184] := Saturate8(a[255:240])
+ tmp_dst[199:192] := Saturate8(b[143:128])
+ tmp_dst[207:200] := Saturate8(b[159:144])
+ tmp_dst[215:208] := Saturate8(b[175:160])
+ tmp_dst[223:216] := Saturate8(b[191:176])
+ tmp_dst[231:224] := Saturate8(b[207:192])
+ tmp_dst[239:232] := Saturate8(b[223:208])
+ tmp_dst[247:240] := Saturate8(b[239:224])
+ tmp_dst[255:248] := Saturate8(b[255:240])
+ tmp_dst[263:256] := Saturate8(a[271:256])
+ tmp_dst[271:264] := Saturate8(a[287:272])
+ tmp_dst[279:272] := Saturate8(a[303:288])
+ tmp_dst[287:280] := Saturate8(a[319:304])
+ tmp_dst[295:288] := Saturate8(a[335:320])
+ tmp_dst[303:296] := Saturate8(a[351:336])
+ tmp_dst[311:304] := Saturate8(a[367:352])
+ tmp_dst[319:312] := Saturate8(a[383:368])
+ tmp_dst[327:320] := Saturate8(b[271:256])
+ tmp_dst[335:328] := Saturate8(b[287:272])
+ tmp_dst[343:336] := Saturate8(b[303:288])
+ tmp_dst[351:344] := Saturate8(b[319:304])
+ tmp_dst[359:352] := Saturate8(b[335:320])
+ tmp_dst[367:360] := Saturate8(b[351:336])
+ tmp_dst[375:368] := Saturate8(b[367:352])
+ tmp_dst[383:376] := Saturate8(b[383:368])
+ tmp_dst[391:384] := Saturate8(a[399:384])
+ tmp_dst[399:392] := Saturate8(a[415:400])
+ tmp_dst[407:400] := Saturate8(a[431:416])
+ tmp_dst[415:408] := Saturate8(a[447:432])
+ tmp_dst[423:416] := Saturate8(a[463:448])
+ tmp_dst[431:424] := Saturate8(a[479:464])
+ tmp_dst[439:432] := Saturate8(a[495:480])
+ tmp_dst[447:440] := Saturate8(a[511:496])
+ tmp_dst[455:448] := Saturate8(b[399:384])
+ tmp_dst[463:456] := Saturate8(b[415:400])
+ tmp_dst[471:464] := Saturate8(b[431:416])
+ tmp_dst[479:472] := Saturate8(b[447:432])
+ tmp_dst[487:480] := Saturate8(b[463:448])
+ tmp_dst[495:488] := Saturate8(b[479:464])
+ tmp_dst[503:496] := Saturate8(b[495:480])
+ tmp_dst[511:504] := Saturate8(b[511:496])
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using signed saturation, and store the results in "dst".
+
+ dst[7:0] := Saturate8(a[15:0])
+ dst[15:8] := Saturate8(a[31:16])
+ dst[23:16] := Saturate8(a[47:32])
+ dst[31:24] := Saturate8(a[63:48])
+ dst[39:32] := Saturate8(a[79:64])
+ dst[47:40] := Saturate8(a[95:80])
+ dst[55:48] := Saturate8(a[111:96])
+ dst[63:56] := Saturate8(a[127:112])
+ dst[71:64] := Saturate8(b[15:0])
+ dst[79:72] := Saturate8(b[31:16])
+ dst[87:80] := Saturate8(b[47:32])
+ dst[95:88] := Saturate8(b[63:48])
+ dst[103:96] := Saturate8(b[79:64])
+ dst[111:104] := Saturate8(b[95:80])
+ dst[119:112] := Saturate8(b[111:96])
+ dst[127:120] := Saturate8(b[127:112])
+ dst[135:128] := Saturate8(a[143:128])
+ dst[143:136] := Saturate8(a[159:144])
+ dst[151:144] := Saturate8(a[175:160])
+ dst[159:152] := Saturate8(a[191:176])
+ dst[167:160] := Saturate8(a[207:192])
+ dst[175:168] := Saturate8(a[223:208])
+ dst[183:176] := Saturate8(a[239:224])
+ dst[191:184] := Saturate8(a[255:240])
+ dst[199:192] := Saturate8(b[143:128])
+ dst[207:200] := Saturate8(b[159:144])
+ dst[215:208] := Saturate8(b[175:160])
+ dst[223:216] := Saturate8(b[191:176])
+ dst[231:224] := Saturate8(b[207:192])
+ dst[239:232] := Saturate8(b[223:208])
+ dst[247:240] := Saturate8(b[239:224])
+ dst[255:248] := Saturate8(b[255:240])
+ dst[263:256] := Saturate8(a[271:256])
+ dst[271:264] := Saturate8(a[287:272])
+ dst[279:272] := Saturate8(a[303:288])
+ dst[287:280] := Saturate8(a[319:304])
+ dst[295:288] := Saturate8(a[335:320])
+ dst[303:296] := Saturate8(a[351:336])
+ dst[311:304] := Saturate8(a[367:352])
+ dst[319:312] := Saturate8(a[383:368])
+ dst[327:320] := Saturate8(b[271:256])
+ dst[335:328] := Saturate8(b[287:272])
+ dst[343:336] := Saturate8(b[303:288])
+ dst[351:344] := Saturate8(b[319:304])
+ dst[359:352] := Saturate8(b[335:320])
+ dst[367:360] := Saturate8(b[351:336])
+ dst[375:368] := Saturate8(b[367:352])
+ dst[383:376] := Saturate8(b[383:368])
+ dst[391:384] := Saturate8(a[399:384])
+ dst[399:392] := Saturate8(a[415:400])
+ dst[407:400] := Saturate8(a[431:416])
+ dst[415:408] := Saturate8(a[447:432])
+ dst[423:416] := Saturate8(a[463:448])
+ dst[431:424] := Saturate8(a[479:464])
+ dst[439:432] := Saturate8(a[495:480])
+ dst[447:440] := Saturate8(a[511:496])
+ dst[455:448] := Saturate8(b[399:384])
+ dst[463:456] := Saturate8(b[415:400])
+ dst[471:464] := Saturate8(b[431:416])
+ dst[479:472] := Saturate8(b[447:432])
+ dst[487:480] := Saturate8(b[463:448])
+ dst[495:488] := Saturate8(b[479:464])
+ dst[503:496] := Saturate8(b[495:480])
+ dst[511:504] := Saturate8(b[511:496])
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := SaturateU16(a[31:0])
+ tmp_dst[31:16] := SaturateU16(a[63:32])
+ tmp_dst[47:32] := SaturateU16(a[95:64])
+ tmp_dst[63:48] := SaturateU16(a[127:96])
+ tmp_dst[79:64] := SaturateU16(b[31:0])
+ tmp_dst[95:80] := SaturateU16(b[63:32])
+ tmp_dst[111:96] := SaturateU16(b[95:64])
+ tmp_dst[127:112] := SaturateU16(b[127:96])
+ tmp_dst[143:128] := SaturateU16(a[159:128])
+ tmp_dst[159:144] := SaturateU16(a[191:160])
+ tmp_dst[175:160] := SaturateU16(a[223:192])
+ tmp_dst[191:176] := SaturateU16(a[255:224])
+ tmp_dst[207:192] := SaturateU16(b[159:128])
+ tmp_dst[223:208] := SaturateU16(b[191:160])
+ tmp_dst[239:224] := SaturateU16(b[223:192])
+ tmp_dst[255:240] := SaturateU16(b[255:224])
+ tmp_dst[271:256] := SaturateU16(a[287:256])
+ tmp_dst[287:272] := SaturateU16(a[319:288])
+ tmp_dst[303:288] := SaturateU16(a[351:320])
+ tmp_dst[319:304] := SaturateU16(a[383:352])
+ tmp_dst[335:320] := SaturateU16(b[287:256])
+ tmp_dst[351:336] := SaturateU16(b[319:288])
+ tmp_dst[367:352] := SaturateU16(b[351:320])
+ tmp_dst[383:368] := SaturateU16(b[383:352])
+ tmp_dst[399:384] := SaturateU16(a[415:384])
+ tmp_dst[415:400] := SaturateU16(a[447:416])
+ tmp_dst[431:416] := SaturateU16(a[479:448])
+ tmp_dst[447:432] := SaturateU16(a[511:480])
+ tmp_dst[463:448] := SaturateU16(b[415:384])
+ tmp_dst[479:464] := SaturateU16(b[447:416])
+ tmp_dst[495:480] := SaturateU16(b[479:448])
+ tmp_dst[511:496] := SaturateU16(b[511:480])
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[15:0] := SaturateU16(a[31:0])
+ tmp_dst[31:16] := SaturateU16(a[63:32])
+ tmp_dst[47:32] := SaturateU16(a[95:64])
+ tmp_dst[63:48] := SaturateU16(a[127:96])
+ tmp_dst[79:64] := SaturateU16(b[31:0])
+ tmp_dst[95:80] := SaturateU16(b[63:32])
+ tmp_dst[111:96] := SaturateU16(b[95:64])
+ tmp_dst[127:112] := SaturateU16(b[127:96])
+ tmp_dst[143:128] := SaturateU16(a[159:128])
+ tmp_dst[159:144] := SaturateU16(a[191:160])
+ tmp_dst[175:160] := SaturateU16(a[223:192])
+ tmp_dst[191:176] := SaturateU16(a[255:224])
+ tmp_dst[207:192] := SaturateU16(b[159:128])
+ tmp_dst[223:208] := SaturateU16(b[191:160])
+ tmp_dst[239:224] := SaturateU16(b[223:192])
+ tmp_dst[255:240] := SaturateU16(b[255:224])
+ tmp_dst[271:256] := SaturateU16(a[287:256])
+ tmp_dst[287:272] := SaturateU16(a[319:288])
+ tmp_dst[303:288] := SaturateU16(a[351:320])
+ tmp_dst[319:304] := SaturateU16(a[383:352])
+ tmp_dst[335:320] := SaturateU16(b[287:256])
+ tmp_dst[351:336] := SaturateU16(b[319:288])
+ tmp_dst[367:352] := SaturateU16(b[351:320])
+ tmp_dst[383:368] := SaturateU16(b[383:352])
+ tmp_dst[399:384] := SaturateU16(a[415:384])
+ tmp_dst[415:400] := SaturateU16(a[447:416])
+ tmp_dst[431:416] := SaturateU16(a[479:448])
+ tmp_dst[447:432] := SaturateU16(a[511:480])
+ tmp_dst[463:448] := SaturateU16(b[415:384])
+ tmp_dst[479:464] := SaturateU16(b[447:416])
+ tmp_dst[495:480] := SaturateU16(b[479:448])
+ tmp_dst[511:496] := SaturateU16(b[511:480])
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := tmp_dst[i+15:i]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using unsigned saturation, and store the results in "dst".
+
+ dst[15:0] := SaturateU16(a[31:0])
+ dst[31:16] := SaturateU16(a[63:32])
+ dst[47:32] := SaturateU16(a[95:64])
+ dst[63:48] := SaturateU16(a[127:96])
+ dst[79:64] := SaturateU16(b[31:0])
+ dst[95:80] := SaturateU16(b[63:32])
+ dst[111:96] := SaturateU16(b[95:64])
+ dst[127:112] := SaturateU16(b[127:96])
+ dst[143:128] := SaturateU16(a[159:128])
+ dst[159:144] := SaturateU16(a[191:160])
+ dst[175:160] := SaturateU16(a[223:192])
+ dst[191:176] := SaturateU16(a[255:224])
+ dst[207:192] := SaturateU16(b[159:128])
+ dst[223:208] := SaturateU16(b[191:160])
+ dst[239:224] := SaturateU16(b[223:192])
+ dst[255:240] := SaturateU16(b[255:224])
+ dst[271:256] := SaturateU16(a[287:256])
+ dst[287:272] := SaturateU16(a[319:288])
+ dst[303:288] := SaturateU16(a[351:320])
+ dst[319:304] := SaturateU16(a[383:352])
+ dst[335:320] := SaturateU16(b[287:256])
+ dst[351:336] := SaturateU16(b[319:288])
+ dst[367:352] := SaturateU16(b[351:320])
+ dst[383:368] := SaturateU16(b[383:352])
+ dst[399:384] := SaturateU16(a[415:384])
+ dst[415:400] := SaturateU16(a[447:416])
+ dst[431:416] := SaturateU16(a[479:448])
+ dst[447:432] := SaturateU16(a[511:480])
+ dst[463:448] := SaturateU16(b[415:384])
+ dst[479:464] := SaturateU16(b[447:416])
+ dst[495:480] := SaturateU16(b[479:448])
+ dst[511:496] := SaturateU16(b[511:480])
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using unsigned saturation, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := SaturateU8(a[15:0])
+ tmp_dst[15:8] := SaturateU8(a[31:16])
+ tmp_dst[23:16] := SaturateU8(a[47:32])
+ tmp_dst[31:24] := SaturateU8(a[63:48])
+ tmp_dst[39:32] := SaturateU8(a[79:64])
+ tmp_dst[47:40] := SaturateU8(a[95:80])
+ tmp_dst[55:48] := SaturateU8(a[111:96])
+ tmp_dst[63:56] := SaturateU8(a[127:112])
+ tmp_dst[71:64] := SaturateU8(b[15:0])
+ tmp_dst[79:72] := SaturateU8(b[31:16])
+ tmp_dst[87:80] := SaturateU8(b[47:32])
+ tmp_dst[95:88] := SaturateU8(b[63:48])
+ tmp_dst[103:96] := SaturateU8(b[79:64])
+ tmp_dst[111:104] := SaturateU8(b[95:80])
+ tmp_dst[119:112] := SaturateU8(b[111:96])
+ tmp_dst[127:120] := SaturateU8(b[127:112])
+ tmp_dst[135:128] := SaturateU8(a[143:128])
+ tmp_dst[143:136] := SaturateU8(a[159:144])
+ tmp_dst[151:144] := SaturateU8(a[175:160])
+ tmp_dst[159:152] := SaturateU8(a[191:176])
+ tmp_dst[167:160] := SaturateU8(a[207:192])
+ tmp_dst[175:168] := SaturateU8(a[223:208])
+ tmp_dst[183:176] := SaturateU8(a[239:224])
+ tmp_dst[191:184] := SaturateU8(a[255:240])
+ tmp_dst[199:192] := SaturateU8(b[143:128])
+ tmp_dst[207:200] := SaturateU8(b[159:144])
+ tmp_dst[215:208] := SaturateU8(b[175:160])
+ tmp_dst[223:216] := SaturateU8(b[191:176])
+ tmp_dst[231:224] := SaturateU8(b[207:192])
+ tmp_dst[239:232] := SaturateU8(b[223:208])
+ tmp_dst[247:240] := SaturateU8(b[239:224])
+ tmp_dst[255:248] := SaturateU8(b[255:240])
+ tmp_dst[263:256] := SaturateU8(a[271:256])
+ tmp_dst[271:264] := SaturateU8(a[287:272])
+ tmp_dst[279:272] := SaturateU8(a[303:288])
+ tmp_dst[287:280] := SaturateU8(a[319:304])
+ tmp_dst[295:288] := SaturateU8(a[335:320])
+ tmp_dst[303:296] := SaturateU8(a[351:336])
+ tmp_dst[311:304] := SaturateU8(a[367:352])
+ tmp_dst[319:312] := SaturateU8(a[383:368])
+ tmp_dst[327:320] := SaturateU8(b[271:256])
+ tmp_dst[335:328] := SaturateU8(b[287:272])
+ tmp_dst[343:336] := SaturateU8(b[303:288])
+ tmp_dst[351:344] := SaturateU8(b[319:304])
+ tmp_dst[359:352] := SaturateU8(b[335:320])
+ tmp_dst[367:360] := SaturateU8(b[351:336])
+ tmp_dst[375:368] := SaturateU8(b[367:352])
+ tmp_dst[383:376] := SaturateU8(b[383:368])
+ tmp_dst[391:384] := SaturateU8(a[399:384])
+ tmp_dst[399:392] := SaturateU8(a[415:400])
+ tmp_dst[407:400] := SaturateU8(a[431:416])
+ tmp_dst[415:408] := SaturateU8(a[447:432])
+ tmp_dst[423:416] := SaturateU8(a[463:448])
+ tmp_dst[431:424] := SaturateU8(a[479:464])
+ tmp_dst[439:432] := SaturateU8(a[495:480])
+ tmp_dst[447:440] := SaturateU8(a[511:496])
+ tmp_dst[455:448] := SaturateU8(b[399:384])
+ tmp_dst[463:456] := SaturateU8(b[415:400])
+ tmp_dst[471:464] := SaturateU8(b[431:416])
+ tmp_dst[479:472] := SaturateU8(b[447:432])
+ tmp_dst[487:480] := SaturateU8(b[463:448])
+ tmp_dst[495:488] := SaturateU8(b[479:464])
+ tmp_dst[503:496] := SaturateU8(b[495:480])
+ tmp_dst[511:504] := SaturateU8(b[511:496])
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using unsigned saturation, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[7:0] := SaturateU8(a[15:0])
+ tmp_dst[15:8] := SaturateU8(a[31:16])
+ tmp_dst[23:16] := SaturateU8(a[47:32])
+ tmp_dst[31:24] := SaturateU8(a[63:48])
+ tmp_dst[39:32] := SaturateU8(a[79:64])
+ tmp_dst[47:40] := SaturateU8(a[95:80])
+ tmp_dst[55:48] := SaturateU8(a[111:96])
+ tmp_dst[63:56] := SaturateU8(a[127:112])
+ tmp_dst[71:64] := SaturateU8(b[15:0])
+ tmp_dst[79:72] := SaturateU8(b[31:16])
+ tmp_dst[87:80] := SaturateU8(b[47:32])
+ tmp_dst[95:88] := SaturateU8(b[63:48])
+ tmp_dst[103:96] := SaturateU8(b[79:64])
+ tmp_dst[111:104] := SaturateU8(b[95:80])
+ tmp_dst[119:112] := SaturateU8(b[111:96])
+ tmp_dst[127:120] := SaturateU8(b[127:112])
+ tmp_dst[135:128] := SaturateU8(a[143:128])
+ tmp_dst[143:136] := SaturateU8(a[159:144])
+ tmp_dst[151:144] := SaturateU8(a[175:160])
+ tmp_dst[159:152] := SaturateU8(a[191:176])
+ tmp_dst[167:160] := SaturateU8(a[207:192])
+ tmp_dst[175:168] := SaturateU8(a[223:208])
+ tmp_dst[183:176] := SaturateU8(a[239:224])
+ tmp_dst[191:184] := SaturateU8(a[255:240])
+ tmp_dst[199:192] := SaturateU8(b[143:128])
+ tmp_dst[207:200] := SaturateU8(b[159:144])
+ tmp_dst[215:208] := SaturateU8(b[175:160])
+ tmp_dst[223:216] := SaturateU8(b[191:176])
+ tmp_dst[231:224] := SaturateU8(b[207:192])
+ tmp_dst[239:232] := SaturateU8(b[223:208])
+ tmp_dst[247:240] := SaturateU8(b[239:224])
+ tmp_dst[255:248] := SaturateU8(b[255:240])
+ tmp_dst[263:256] := SaturateU8(a[271:256])
+ tmp_dst[271:264] := SaturateU8(a[287:272])
+ tmp_dst[279:272] := SaturateU8(a[303:288])
+ tmp_dst[287:280] := SaturateU8(a[319:304])
+ tmp_dst[295:288] := SaturateU8(a[335:320])
+ tmp_dst[303:296] := SaturateU8(a[351:336])
+ tmp_dst[311:304] := SaturateU8(a[367:352])
+ tmp_dst[319:312] := SaturateU8(a[383:368])
+ tmp_dst[327:320] := SaturateU8(b[271:256])
+ tmp_dst[335:328] := SaturateU8(b[287:272])
+ tmp_dst[343:336] := SaturateU8(b[303:288])
+ tmp_dst[351:344] := SaturateU8(b[319:304])
+ tmp_dst[359:352] := SaturateU8(b[335:320])
+ tmp_dst[367:360] := SaturateU8(b[351:336])
+ tmp_dst[375:368] := SaturateU8(b[367:352])
+ tmp_dst[383:376] := SaturateU8(b[383:368])
+ tmp_dst[391:384] := SaturateU8(a[399:384])
+ tmp_dst[399:392] := SaturateU8(a[415:400])
+ tmp_dst[407:400] := SaturateU8(a[431:416])
+ tmp_dst[415:408] := SaturateU8(a[447:432])
+ tmp_dst[423:416] := SaturateU8(a[463:448])
+ tmp_dst[431:424] := SaturateU8(a[479:464])
+ tmp_dst[439:432] := SaturateU8(a[495:480])
+ tmp_dst[447:440] := SaturateU8(a[511:496])
+ tmp_dst[455:448] := SaturateU8(b[399:384])
+ tmp_dst[463:456] := SaturateU8(b[415:400])
+ tmp_dst[471:464] := SaturateU8(b[431:416])
+ tmp_dst[479:472] := SaturateU8(b[447:432])
+ tmp_dst[487:480] := SaturateU8(b[463:448])
+ tmp_dst[495:488] := SaturateU8(b[479:464])
+ tmp_dst[503:496] := SaturateU8(b[495:480])
+ tmp_dst[511:504] := SaturateU8(b[511:496])
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := tmp_dst[i+7:i]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Miscellaneous
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using unsigned saturation, and store the results in "dst".
+
+ dst[7:0] := SaturateU8(a[15:0])
+ dst[15:8] := SaturateU8(a[31:16])
+ dst[23:16] := SaturateU8(a[47:32])
+ dst[31:24] := SaturateU8(a[63:48])
+ dst[39:32] := SaturateU8(a[79:64])
+ dst[47:40] := SaturateU8(a[95:80])
+ dst[55:48] := SaturateU8(a[111:96])
+ dst[63:56] := SaturateU8(a[127:112])
+ dst[71:64] := SaturateU8(b[15:0])
+ dst[79:72] := SaturateU8(b[31:16])
+ dst[87:80] := SaturateU8(b[47:32])
+ dst[95:88] := SaturateU8(b[63:48])
+ dst[103:96] := SaturateU8(b[79:64])
+ dst[111:104] := SaturateU8(b[95:80])
+ dst[119:112] := SaturateU8(b[111:96])
+ dst[127:120] := SaturateU8(b[127:112])
+ dst[135:128] := SaturateU8(a[143:128])
+ dst[143:136] := SaturateU8(a[159:144])
+ dst[151:144] := SaturateU8(a[175:160])
+ dst[159:152] := SaturateU8(a[191:176])
+ dst[167:160] := SaturateU8(a[207:192])
+ dst[175:168] := SaturateU8(a[223:208])
+ dst[183:176] := SaturateU8(a[239:224])
+ dst[191:184] := SaturateU8(a[255:240])
+ dst[199:192] := SaturateU8(b[143:128])
+ dst[207:200] := SaturateU8(b[159:144])
+ dst[215:208] := SaturateU8(b[175:160])
+ dst[223:216] := SaturateU8(b[191:176])
+ dst[231:224] := SaturateU8(b[207:192])
+ dst[239:232] := SaturateU8(b[223:208])
+ dst[247:240] := SaturateU8(b[239:224])
+ dst[255:248] := SaturateU8(b[255:240])
+ dst[263:256] := SaturateU8(a[271:256])
+ dst[271:264] := SaturateU8(a[287:272])
+ dst[279:272] := SaturateU8(a[303:288])
+ dst[287:280] := SaturateU8(a[319:304])
+ dst[295:288] := SaturateU8(a[335:320])
+ dst[303:296] := SaturateU8(a[351:336])
+ dst[311:304] := SaturateU8(a[367:352])
+ dst[319:312] := SaturateU8(a[383:368])
+ dst[327:320] := SaturateU8(b[271:256])
+ dst[335:328] := SaturateU8(b[287:272])
+ dst[343:336] := SaturateU8(b[303:288])
+ dst[351:344] := SaturateU8(b[319:304])
+ dst[359:352] := SaturateU8(b[335:320])
+ dst[367:360] := SaturateU8(b[351:336])
+ dst[375:368] := SaturateU8(b[367:352])
+ dst[383:376] := SaturateU8(b[383:368])
+ dst[391:384] := SaturateU8(a[399:384])
+ dst[399:392] := SaturateU8(a[415:400])
+ dst[407:400] := SaturateU8(a[431:416])
+ dst[415:408] := SaturateU8(a[447:432])
+ dst[423:416] := SaturateU8(a[463:448])
+ dst[431:424] := SaturateU8(a[479:464])
+ dst[439:432] := SaturateU8(a[495:480])
+ dst[447:440] := SaturateU8(a[511:496])
+ dst[455:448] := SaturateU8(b[399:384])
+ dst[463:456] := SaturateU8(b[415:400])
+ dst[471:464] := SaturateU8(b[431:416])
+ dst[479:472] := SaturateU8(b[447:432])
+ dst[487:480] := SaturateU8(b[463:448])
+ dst[495:488] := SaturateU8(b[479:464])
+ dst[503:496] := SaturateU8(b[495:480])
+ dst[511:504] := SaturateU8(b[511:496])
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ dst[l+7:l] := Saturate8(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+15:i])
+ FI
+ ENDFOR
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ l := j*16
+ dst[l+15:l] := SignExtend16(a[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := SignExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := SignExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ dst[l+7:l] := SaturateU8(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+15:i])
+ FI
+ ENDFOR
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ dst[l+7:l] := Truncate8(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the active results (those with their respective bit set in writemask "k") to
+ unaligned memory at "base_addr".
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+15:i])
+ FI
+ ENDFOR
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := 16*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+15:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ l := j*16
+ dst[l+15:l] := ZeroExtend16(a[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := ZeroExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ l := j*16
+ IF k[j]
+ dst[l+15:l] := ZeroExtend16(a[i+7:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Convert
+
+
+
+
+
+
+ Broadcast 8-bit integer "a" to all elements of "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Set
+
+
+
+
+
+ Broadcast 8-bit integer "a" to all elements of "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[7:0]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Set
+
+
+
+
+
+
+ Broadcast 16-bit integer "a" to all elements of "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Set
+
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[15:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Set
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for equality, and store the
+ results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for equality, and store the
+ results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than-or-equal, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] OP b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] == b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] >= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] > b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] <= b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] < b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ( a[i+7:i] != b[i+7:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] OP b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] == b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] >= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] > b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] <= b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] < b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ( a[i+15:i] != b[i+15:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compute the bitwise AND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ((a[i+7:i] AND b[i+7:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compute the bitwise AND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ((a[i+15:i] AND b[i+15:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k1[j]
+ k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compute the bitwise NAND of packed 8-bit integers in "a" and "b", producing
+ intermediate 8-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 63
+ i := j*8
+ k[j] := ((a[i+7:i] AND b[i+7:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k1[j]
+ k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Compute the bitwise NAND of packed 16-bit integers in "a" and "b", producing
+ intermediate 16-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 31
+ i := j*16
+ k[j] := ((a[i+15:i] AND b[i+15:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Compare
+
+
+
+
+
+ Shift 128-bit lanes in "a" left by "imm8" bytes while shifting in zeros, and
+ store the results in "dst".
+
+ tmp := imm8[7:0]
+ IF tmp > 15
+ tmp := 16
+ FI
+ dst[127:0] := a[127:0] << (tmp*8)
+ dst[255:128] := a[255:128] << (tmp*8)
+ dst[383:256] := a[383:256] << (tmp*8)
+ dst[511:384] := a[511:384] << (tmp*8)
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF count[i+15:i] < 16
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0)
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+ Shift 128-bit lanes in "a" right by "imm8" bytes while shifting in zeros, and
+ store the results in "dst".
+
+ tmp := imm8[7:0]
+ IF tmp > 15
+ tmp := 16
+ FI
+ dst[127:0] := a[127:0] >> (tmp*8)
+ dst[255:128] := a[255:128] >> (tmp*8)
+ dst[383:256] := a[383:256] >> (tmp*8)
+ dst[511:384] := a[511:384] >> (tmp*8)
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF count[i+15:i] < 16
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512BW
+
+ Shift
+
+
+
+
+
+ Add 32-bit masks in "a" and "b", and store the result in "k".
+
+ k[31:0] := a[31:0] + b[31:0]
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Add 64-bit masks in "a" and "b", and store the result in "k".
+
+ k[63:0] := a[63:0] + b[63:0]
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise AND of 32-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[31:0] := a[31:0] AND b[31:0]
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise AND of 64-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[63:0] := a[63:0] AND b[63:0]
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise NOT of 32-bit masks "a" and then AND with "b", and store
+ the result in "k".
+
+ k[31:0] := (NOT a[31:0]) AND b[31:0]
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise NOT of 64-bit masks "a" and then AND with "b", and store
+ the result in "k".
+
+ k[63:0] := (NOT a[63:0]) AND b[63:0]
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+ Compute the bitwise NOT of 32-bit mask "a", and store the result in "k".
+
+ k[31:0] := NOT a[31:0]
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+ Compute the bitwise NOT of 64-bit mask "a", and store the result in "k".
+
+ k[63:0] := NOT a[63:0]
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 32-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[31:0] := a[31:0] OR b[31:0]
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 64-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[63:0] := a[63:0] OR b[63:0]
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise XNOR of 32-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[31:0] := NOT (a[31:0] XOR b[31:0])
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise XNOR of 64-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[63:0] := NOT (a[63:0] XOR b[63:0])
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise XOR of 32-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[31:0] := a[31:0] XOR b[31:0]
+ k[MAX:32] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise XOR of 64-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[63:0] := a[63:0] XOR b[63:0]
+ k[MAX:64] := 0
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Shift the bits of 32-bit mask "a" left by "count" while shifting in zeros, and
+ store the least significant 32 bits of the result in "k".
+
+ k[MAX:0] := 0
+ IF count[7:0] <= 31
+ k[31:0] := a[31:0] << count[7:0]
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Shift the bits of 64-bit mask "a" left by "count" while shifting in zeros, and
+ store the least significant 64 bits of the result in "k".
+
+ k[MAX:0] := 0
+ IF count[7:0] <= 63
+ k[63:0] := a[63:0] << count[7:0]
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Shift the bits of 32-bit mask "a" right by "count" while shifting in zeros, and
+ store the least significant 32 bits of the result in "k".
+
+ k[MAX:0] := 0
+ IF count[7:0] <= 31
+ k[31:0] := a[31:0] >> count[7:0]
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Shift the bits of 64-bit mask "a" right by "count" while shifting in zeros, and
+ store the least significant 64 bits of the result in "k".
+
+ k[MAX:0] := 0
+ IF count[7:0] <= 63
+ k[63:0] := a[63:0] >> count[7:0]
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+
+ Compute the bitwise OR of 32-bit masks "a" and "b". If the result is all zeros,
+ store 1 in "dst", otherwise store 0 in "dst". If the result is all ones, store 1 in
+ "all_ones", otherwise store 0 in "all_ones".
+
+ tmp[31:0] := a[31:0] OR b[31:0]
+ IF tmp[31:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+ IF tmp[31:0] == 0xFFFFFFFF
+ MEM[all_ones+7:all_ones] := 1
+ ELSE
+ MEM[all_ones+7:all_ones] := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 32-bit masks "a" and "b". If the result is all
+ zeroes, store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[31:0] := a[31:0] OR b[31:0]
+ IF tmp[31:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 32-bit masks "a" and "b". If the result is all ones,
+ store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[31:0] := a[31:0] OR b[31:0]
+ IF tmp[31:0] == 0xFFFFFFFF
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+
+ Compute the bitwise OR of 64-bit masks "a" and "b". If the result is all zeros,
+ store 1 in "dst", otherwise store 0 in "dst". If the result is all ones, store 1 in
+ "all_ones", otherwise store 0 in "all_ones".
+
+ tmp[63:0] := a[63:0] OR b[63:0]
+ IF tmp[63:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+ IF tmp[7:0] == 0xFFFFFFFFFFFFFFFF
+ MEM[all_ones+7:all_ones] := 1
+ ELSE
+ MEM[all_ones+7:all_ones] := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 64-bit masks "a" and "b". If the result is all
+ zeroes, store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[63:0] := a[63:0] OR b[63:0]
+ IF tmp[63:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 64-bit masks "a" and "b". If the result is all ones,
+ store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[63:0] := a[63:0] OR b[63:0]
+ IF tmp[63:0] == 0xFFFFFFFFFFFFFFFF
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+
+ Compute the bitwise AND of 32-bit masks "a" and "b", and if the result is all
+ zeros, store 1 in "dst", otherwise store 0 in "dst". Compute the bitwise NOT of "a" and
+ then AND with "b", if the result is all zeros, store 1 in "and_not", otherwise store 0
+ in "and_not".
+
+ tmp1[31:0] := a[31:0] AND b[31:0]
+ IF tmp1[31:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+ tmp2[31:0] := (NOT a[31:0]) AND b[31:0]
+ IF tmp2[31:0] == 0x0
+ MEM[and_not+7:and_not] := 1
+ ELSE
+ MEM[and_not+7:and_not] := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise AND of 32-bit masks "a" and "b", and if the result is all
+ zeros, store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[31:0] := a[31:0] AND b[31:0]
+ IF tmp[31:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise NOT of 32-bit mask "a" and then AND with "b", if the result
+ is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[31:0] := (NOT a[31:0]) AND b[31:0]
+ IF tmp[31:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+
+ Compute the bitwise AND of 64-bit masks "a" and "b", and if the result is all
+ zeros, store 1 in "dst", otherwise store 0 in "dst". Compute the bitwise NOT of "a" and
+ then AND with "b", if the result is all zeros, store 1 in "and_not", otherwise store 0
+ in "and_not".
+
+ tmp1[63:0] := a[63:0] AND b[63:0]
+ IF tmp1[63:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+ tmp2[63:0] := (NOT a[63:0]) AND b[63:0]
+ IF tmp2[63:0] == 0x0
+ MEM[and_not+7:and_not] := 1
+ ELSE
+ MEM[and_not+7:and_not] := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise AND of 64-bit masks "a" and "b", and if the result is all
+ zeros, store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[63:0] := a[63:0] AND b[63:0]
+ IF tmp[63:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+ Compute the bitwise NOT of 64-bit mask "a" and then AND with "b", if the result
+ is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[63:0] := (NOT a[63:0]) AND b[63:0]
+ IF tmp[63:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+ Convert 32-bit mask "a" into an integer value, and store the result in "dst".
+
+ dst := ZeroExtend32(a[31:0])
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+ Convert 64-bit mask "a" into an integer value, and store the result in "dst".
+
+ dst := ZeroExtend64(a[63:0])
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+ Convert integer value "a" into an 32-bit mask, and store the result in "k".
+
+ k := ZeroExtend32(a[31:0])
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+ Convert integer value "a" into an 64-bit mask, and store the result in "k".
+
+ k := ZeroExtend64(a[63:0])
+
+
+ AVX512BW
+
+ Mask
+
+
+
+
+
+
+ Broadcast the low 8-bits from input mask "k" to all 64-bit elements of "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ZeroExtend64(k[7:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Broadcast the low 8-bits from input mask "k" to all 64-bit elements of "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ZeroExtend64(k[7:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Broadcast the low 16-bits from input mask "k" to all 32-bit elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ZeroExtend32(k[15:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Broadcast the low 16-bits from input mask "k" to all 32-bit elements of "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ZeroExtend32(k[15:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Test each 32-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit. Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ FOR k := 0 to j-1
+ m := k*32
+ dst[i+k] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
+ ENDFOR
+ dst[i+31:i+j] := 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Test each 32-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set). Each element's comparison forms a zero
+ extended bit vector in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*32
+ dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
+ ENDFOR
+ dst[i+31:i+j] := 0
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Test each 32-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*32
+ dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
+ ENDFOR
+ dst[i+31:i+j] := 0
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+ Test each 32-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit. Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ FOR k := 0 to j-1
+ m := k*32
+ dst[i+k] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
+ ENDFOR
+ dst[i+31:i+j] := 0
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Test each 32-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set). Each element's comparison forms a zero
+ extended bit vector in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*32
+ dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
+ ENDFOR
+ dst[i+31:i+j] := 0
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Test each 32-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*32
+ dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
+ ENDFOR
+ dst[i+31:i+j] := 0
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+ Test each 64-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit. Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ FOR k := 0 to j-1
+ m := k*64
+ dst[i+k] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
+ ENDFOR
+ dst[i+63:i+j] := 0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Test each 64-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set). Each element's comparison forms a zero
+ extended bit vector in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*64
+ dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
+ ENDFOR
+ dst[i+63:i+j] := 0
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Test each 64-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*64
+ dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
+ ENDFOR
+ dst[i+63:i+j] := 0
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+ Test each 64-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit. Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ FOR k := 0 to j-1
+ m := k*64
+ dst[i+k] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
+ ENDFOR
+ dst[i+63:i+j] := 0
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Test each 64-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set). Each element's comparison forms a zero
+ extended bit vector in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*64
+ dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
+ ENDFOR
+ dst[i+63:i+j] := 0
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Test each 64-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*64
+ dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
+ ENDFOR
+ dst[i+63:i+j] := 0
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Compare
+
+
+
+
+ Counts the number of leading zero bits in each packed 32-bit integer in "a",
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ tmp := 31
+ dst[i+31:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+31:i] := dst[i+31:i] + 1
+ OD
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 32-bit integer in "a",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ tmp := 31
+ dst[i+31:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+31:i] := dst[i+31:i] + 1
+ OD
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 32-bit integer in "a",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ tmp := 31
+ dst[i+31:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+31:i] := dst[i+31:i] + 1
+ OD
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+ Counts the number of leading zero bits in each packed 32-bit integer in "a",
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ tmp := 31
+ dst[i+31:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+31:i] := dst[i+31:i] + 1
+ OD
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 32-bit integer in "a",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ tmp := 31
+ dst[i+31:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+31:i] := dst[i+31:i] + 1
+ OD
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 32-bit integer in "a",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ tmp := 31
+ dst[i+31:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+31:i] := dst[i+31:i] + 1
+ OD
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+ Counts the number of leading zero bits in each packed 64-bit integer in "a",
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ tmp := 63
+ dst[i+63:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+63:i] := dst[i+63:i] + 1
+ OD
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 64-bit integer in "a",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp := 63
+ dst[i+63:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+63:i] := dst[i+63:i] + 1
+ OD
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 64-bit integer in "a",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp := 63
+ dst[i+63:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+63:i] := dst[i+63:i] + 1
+ OD
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+ Counts the number of leading zero bits in each packed 64-bit integer in "a",
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ tmp := 63
+ dst[i+63:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+63:i] := dst[i+63:i] + 1
+ OD
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 64-bit integer in "a",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp := 63
+ dst[i+63:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+63:i] := dst[i+63:i] + 1
+ OD
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 64-bit integer in "a",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp := 63
+ dst[i+63:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+63:i] := dst[i+63:i] + 1
+ OD
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512CD
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Broadcast the low 8-bits from input mask "k" to all 64-bit elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ZeroExtend64(k[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Swizzle
+
+
+
+
+ Broadcast the low 16-bits from input mask "k" to all 32-bit elements of "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ZeroExtend32(k[15:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Swizzle
+
+
+
+
+ Test each 32-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit. Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ FOR k := 0 to j-1
+ m := k*32
+ dst[i+k] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
+ ENDFOR
+ dst[i+31:i+j] := 0
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Compare
+
+
+
+
+
+
+ Test each 32-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set). Each element's comparison forms a zero
+ extended bit vector in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*32
+ dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
+ ENDFOR
+ dst[i+31:i+j] := 0
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Compare
+
+
+
+
+
+ Test each 32-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*32
+ dst[i+l] := (a[i+31:i] == a[m+31:m]) ? 1 : 0
+ ENDFOR
+ dst[i+31:i+j] := 0
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Compare
+
+
+
+
+ Test each 64-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit. Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ FOR k := 0 to j-1
+ m := k*64
+ dst[i+k] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
+ ENDFOR
+ dst[i+63:i+j] := 0
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Compare
+
+
+
+
+
+
+ Test each 64-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set). Each element's comparison forms a zero
+ extended bit vector in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*64
+ dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
+ ENDFOR
+ dst[i+63:i+j] := 0
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Compare
+
+
+
+
+
+ Test each 64-bit element of "a" for equality with all other elements in "a"
+ closer to the least significant bit using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). Each element's comparison forms a zero extended bit
+ vector in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ FOR l := 0 to j-1
+ m := l*64
+ dst[i+l] := (a[i+63:i] == a[m+63:m]) ? 1 : 0
+ ENDFOR
+ dst[i+63:i+j] := 0
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Compare
+
+
+
+
+ Counts the number of leading zero bits in each packed 32-bit integer in "a",
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ tmp := 31
+ dst[i+31:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+31:i] := dst[i+31:i] + 1
+ OD
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Bit Manipulation
+
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 32-bit integer in "a",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ tmp := 31
+ dst[i+31:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+31:i] := dst[i+31:i] + 1
+ OD
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Bit Manipulation
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 32-bit integer in "a",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ tmp := 31
+ dst[i+31:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+31:i] := dst[i+31:i] + 1
+ OD
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Bit Manipulation
+
+
+
+
+ Counts the number of leading zero bits in each packed 64-bit integer in "a",
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ tmp := 63
+ dst[i+63:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+63:i] := dst[i+63:i] + 1
+ OD
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Bit Manipulation
+
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 64-bit integer in "a",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp := 63
+ dst[i+63:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+63:i] := dst[i+63:i] + 1
+ OD
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Bit Manipulation
+
+
+
+
+
+ Counts the number of leading zero bits in each packed 64-bit integer in "a",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp := 63
+ dst[i+63:i] := 0
+ DO WHILE (tmp >= 0 AND a[i+tmp] == 0)
+ tmp := tmp - 1
+ dst[i+63:i] := dst[i+63:i] + 1
+ OD
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512CD
+
+ Bit Manipulation
+
+
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed double-precision (64-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed double-precision (64-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed double-precision (64-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed double-precision (64-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed single-precision (32-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed single-precision (32-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed single-precision (32-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed single-precision (32-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise AND of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise AND of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise AND of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise AND of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Logical
+
+
+
+
+ Broadcast the lower 2 packed single-precision (32-bit) floating-point elements
+ from "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 2)*32
+ dst[i+31:i] := a[n+31:n]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the lower 2 packed single-precision (32-bit) floating-point elements
+ from "a" to all elements of "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 2)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the lower 2 packed single-precision (32-bit) floating-point elements
+ from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 2)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Broadcast the 2 packed double-precision (64-bit) floating-point elements from
+ "a" to all elements of "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ n := (j % 2)*64
+ dst[i+63:i] := a[n+63:n]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the 2 packed double-precision (64-bit) floating-point elements from
+ "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ n := (j % 2)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the 2 packed double-precision (64-bit) floating-point elements from
+ "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ n := (j % 2)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst.
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 2)*32
+ dst[i+31:i] := a[n+31:n]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 2)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 2)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst.
+
+ FOR j := 0 to 3
+ i := j*32
+ n := (j % 2)*32
+ dst[i+31:i] := a[n+31:n]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ n := (j % 2)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ n := (j % 2)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ n := (j % 2)*64
+ dst[i+63:i] := a[n+63:n]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ n := (j % 2)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ n := (j % 2)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from "a", selected with "imm8", and store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with
+ "imm8", and store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Test packed double-precision (64-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k".
+ [fpclass_note]
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Test packed double-precision (64-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k" using
+ zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ [fpclass_note]
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Test packed double-precision (64-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k".
+ [fpclass_note]
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Test packed double-precision (64-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k" using
+ zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ [fpclass_note]
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Test packed single-precision (32-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k".
+ [fpclass_note]
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Test packed single-precision (32-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k" using
+ zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ [fpclass_note]
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Test packed single-precision (32-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k".
+ [fpclass_note]
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Test packed single-precision (32-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k" using
+ zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ [fpclass_note]
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits (composed of 2 packed double-precision
+ (64-bit) floating-point elements) from "b" into "dst" at the location specified by
+ "imm8".
+
+ dst[255:0] := a[255:0]
+ CASE imm8[0] OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 2 packed double-precision
+ (64-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ tmp[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 2 packed double-precision
+ (64-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits (composed of 2 packed 64-bit integers)
+ from "b" into "dst" at the location specified by "imm8".
+
+ dst[255:0] := a[255:0]
+ CASE imm8[0] OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 2 packed 64-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ tmp[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 2 packed 64-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 32-bit integer in "a".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF a[i+31]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 32-bit integer in "a".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF a[i+31]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each packed 32-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := 0xFFFFFFFF
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each packed 32-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := 0xFFFFFFFF
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each packed 64-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := 0xFFFFFFFFFFFFFFFF
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each packed 64-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := 0xFFFFFFFFFFFFFFFF
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 64-bit integer in "a".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF a[i+63]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 64-bit integer in "a".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF a[i+63]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ RETURN tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ }
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+
+ Multiply the packed 64-bit integers in "a" and "b", producing intermediate
+ 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp[127:0] := a[i+63:i] * b[i+63:i]
+ dst[i+63:i] := tmp[63:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed 64-bit integers in "a" and "b", producing intermediate
+ 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp[127:0] := a[i+63:i] * b[i+63:i]
+ dst[i+63:i] := tmp[63:0]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 64-bit integers in "a" and "b", producing intermediate
+ 128-bit integers, and store the low 64 bits of the intermediate integers in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ tmp[127:0] := a[i+63:i] * b[i+63:i]
+ dst[i+63:i] := tmp[63:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed 64-bit integers in "a" and "b", producing intermediate
+ 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp[127:0] := a[i+63:i] * b[i+63:i]
+ dst[i+63:i] := tmp[63:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed 64-bit integers in "a" and "b", producing intermediate
+ 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp[127:0] := a[i+63:i] * b[i+63:i]
+ dst[i+63:i] := tmp[63:0]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 64-bit integers in "a" and "b", producing intermediate
+ 128-bit integers, and store the low 64 bits of the intermediate integers in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ tmp[127:0] := a[i+63:i] * b[i+63:i]
+ dst[i+63:i] := tmp[63:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed double-precision (64-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed double-precision (64-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed double-precision (64-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of packed single-precision (32-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed single-precision (32-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed single-precision (32-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise AND of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise AND of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Logical
+
+
+
+
+ Broadcast the lower 2 packed single-precision (32-bit) floating-point elements
+ from "a" to all elements of "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 2)*32
+ dst[i+31:i] := a[n+31:n]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the lower 2 packed single-precision (32-bit) floating-point elements
+ from "a" to all elements of "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 2)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the lower 2 packed single-precision (32-bit) floating-point elements
+ from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 2)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+ Broadcast the 8 packed single-precision (32-bit) floating-point elements from
+ "a" to all elements of "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 8)*32
+ dst[i+31:i] := a[n+31:n]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the 8 packed single-precision (32-bit) floating-point elements from
+ "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 8)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the 8 packed single-precision (32-bit) floating-point elements from
+ "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 8)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+ Broadcast the 2 packed double-precision (64-bit) floating-point elements from
+ "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 2)*64
+ dst[i+63:i] := a[n+63:n]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the 2 packed double-precision (64-bit) floating-point elements from
+ "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 2)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the 2 packed double-precision (64-bit) floating-point elements from
+ "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 2)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+ Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst.
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 2)*32
+ dst[i+31:i] := a[n+31:n]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 2)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the lower 2 packed 32-bit integers from "a" to all elements of "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 2)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+ Broadcast the 8 packed 32-bit integers from "a" to all elements of "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 8)*32
+ dst[i+31:i] := a[n+31:n]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the 8 packed 32-bit integers from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 8)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the 8 packed 32-bit integers from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 8)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+ Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 2)*64
+ dst[i+63:i] := a[n+63:n]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 2)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the 2 packed 64-bit integers from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 2)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Extract 256 bits (composed of 8 packed single-precision (32-bit) floating-point
+ elements) from "a", selected with "imm8", and store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[255:0] := a[255:0]
+ 1: dst[255:0] := a[511:256]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract 256 bits (composed of 8 packed single-precision (32-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[255:0] := a[255:0]
+ 1: tmp[255:0] := a[511:256]
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract 256 bits (composed of 8 packed single-precision (32-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[255:0] := a[255:0]
+ 1: tmp[255:0] := a[511:256]
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from "a", selected with "imm8", and store the result in "dst".
+
+ CASE imm8[1:0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ 2: dst[127:0] := a[383:256]
+ 3: dst[127:0] := a[511:384]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ CASE imm8[1:0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ 2: tmp[127:0] := a[383:256]
+ 3: tmp[127:0] := a[511:384]
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ CASE imm8[1:0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ 2: tmp[127:0] := a[383:256]
+ 3: tmp[127:0] := a[511:384]
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Extract 256 bits (composed of 8 packed 32-bit integers) from "a", selected with
+ "imm8", and store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[255:0] := a[255:0]
+ 1: dst[255:0] := a[511:256]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract 256 bits (composed of 8 packed 32-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[255:0] := a[255:0]
+ 1: tmp[255:0] := a[511:256]
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract 256 bits (composed of 8 packed 32-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[255:0] := a[255:0]
+ 1: tmp[255:0] := a[511:256]
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with
+ "imm8", and store the result in "dst".
+
+ CASE imm8[1:0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ 2: dst[127:0] := a[383:256]
+ 3: dst[127:0] := a[511:384]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ CASE imm8[1:0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ 2: tmp[127:0] := a[383:256]
+ 3: tmp[127:0] := a[511:384]
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract 128 bits (composed of 2 packed 64-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ CASE imm8[1:0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ 2: tmp[127:0] := a[383:256]
+ 3: tmp[127:0] := a[511:384]
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Test packed double-precision (64-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k".
+ [fpclass_note]
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Test packed double-precision (64-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k" using
+ zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ [fpclass_note]
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := CheckFPClass_FP64(a[i+63:i], imm8[7:0])
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Test packed single-precision (32-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k".
+ [fpclass_note]
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Test packed single-precision (32-bit) floating-point elements in "a" for
+ special categories specified by "imm8", and store the results in mask vector "k" using
+ zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ [fpclass_note]
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := CheckFPClass_FP32(a[i+31:i], imm8[7:0])
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Test the lower double-precision (64-bit) floating-point element in "a" for
+ special categories specified by "imm8", and store the result in mask vector "k".
+ [fpclass_note]
+ k[0] := CheckFPClass_FP64(a[63:0], imm8[7:0])
+ k[MAX:1] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Test the lower double-precision (64-bit) floating-point element in "a" for
+ special categories specified by "imm8", and store the result in mask vector "k" using
+ zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
+ [fpclass_note]
+ IF k1[0]
+ k[0] := CheckFPClass_FP64(a[63:0], imm8[7:0])
+ ELSE
+ k[0] := 0
+ FI
+ k[MAX:1] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Test the lower single-precision (32-bit) floating-point element in "a" for
+ special categories specified by "imm8", and store the result in mask vector "k.
+ [fpclass_note]
+ k[0] := CheckFPClass_FP32(a[31:0], imm8[7:0])
+ k[MAX:1] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Test the lower single-precision (32-bit) floating-point element in "a" for
+ special categories specified by "imm8", and store the result in mask vector "k" using
+ zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
+ [fpclass_note]
+ IF k1[0]
+ k[0] := CheckFPClass_FP32(a[31:0], imm8[7:0])
+ ELSE
+ k[0] := 0
+ FI
+ k[MAX:1] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 256 bits (composed of 8 packed single-precision
+ (32-bit) floating-point elements) from "b" into "dst" at the location specified by
+ "imm8".
+
+ dst[511:0] := a[511:0]
+ CASE (imm8[0]) OF
+ 0: dst[255:0] := b[255:0]
+ 1: dst[511:256] := b[255:0]
+ ESAC
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 256 bits (composed of 8 packed single-precision
+ (32-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[0]) OF
+ 0: tmp[255:0] := b[255:0]
+ 1: tmp[511:256] := b[255:0]
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 256 bits (composed of 8 packed single-precision
+ (32-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[0]) OF
+ 0: tmp[255:0] := b[255:0]
+ 1: tmp[511:256] := b[255:0]
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits (composed of 2 packed double-precision
+ (64-bit) floating-point elements) from "b" into "dst" at the location specified by
+ "imm8".
+
+ dst[511:0] := a[511:0]
+ CASE imm8[1:0] OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ 2: dst[383:256] := b[127:0]
+ 3: dst[511:384] := b[127:0]
+ ESAC
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 2 packed double-precision
+ (64-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[1:0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ 2: tmp[383:256] := b[127:0]
+ 3: tmp[511:384] := b[127:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 2 packed double-precision
+ (64-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[1:0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ 2: tmp[383:256] := b[127:0]
+ 3: tmp[511:384] := b[127:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 256 bits (composed of 8 packed 32-bit integers)
+ from "b" into "dst" at the location specified by "imm8".
+
+ dst[511:0] := a[511:0]
+ CASE imm8[0] OF
+ 0: dst[255:0] := b[255:0]
+ 1: dst[511:256] := b[255:0]
+ ESAC
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 256 bits (composed of 8 packed 32-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[0]) OF
+ 0: tmp[255:0] := b[255:0]
+ 1: tmp[511:256] := b[255:0]
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 256 bits (composed of 8 packed 32-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[0]) OF
+ 0: tmp[255:0] := b[255:0]
+ 1: tmp[511:256] := b[255:0]
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits (composed of 2 packed 64-bit integers)
+ from "b" into "dst" at the location specified by "imm8".
+
+ dst[511:0] := a[511:0]
+ CASE imm8[1:0] OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ 2: dst[383:256] := b[127:0]
+ 3: dst[511:384] := b[127:0]
+ ESAC
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 2 packed 64-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[1:0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ 2: tmp[383:256] := b[127:0]
+ 3: tmp[511:384] := b[127:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 2 packed 64-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[1:0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ 2: tmp[383:256] := b[127:0]
+ 3: tmp[511:384] := b[127:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 32-bit integer in "a".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF a[i+31]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+ Set each packed 32-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := 0xFFFFFFFF
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+ Set each packed 64-bit integer in "dst" to all ones or all zeros based on the
+ value of the corresponding bit in "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := 0xFFFFFFFFFFFFFFFF
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask register "k" based on the most significant bit of the
+ corresponding packed 64-bit integer in "a".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF a[i+63]
+ k[j] := 1
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed double-precision (64-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := RANGE(a[i+63:i], b[i+63:i], imm8[1:0], imm8[3:2])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for packed single-precision (32-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[63:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := RANGE(a[i+31:i], b[i+31:i], imm8[1:0], imm8[3:2])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for the lower double-precision (64-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to
+ the upper element of "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ IF k[0]
+ dst[63:0] := RANGE(a[63:0], b[63:0], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for the lower double-precision (64-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to
+ the upper element of "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ IF k[0]
+ dst[63:0] := RANGE(a[63:0], b[63:0], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for the lower double-precision (64-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using zeromask "k" (the element is zeroed
+ out when mask bit 0 is not set), and copy the upper element from "a" to the upper
+ element of "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ IF k[0]
+ dst[63:0] := RANGE(a[63:0], b[63:0], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for the lower double-precision (64-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using zeromask "k" (the element is zeroed
+ out when mask bit 0 is not set), and copy the upper element from "a" to the upper
+ element of "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ IF k[0]
+ dst[63:0] := RANGE(a[63:0], b[63:0], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for the lower double-precision (64-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst", and copy the upper element from "a" to
+ the upper element of "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[63:0], src2[63:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src1[63:0] : src2[63:0]
+ 1: tmp[63:0] := (src1[63:0] <= src2[63:0]) ? src2[63:0] : src1[63:0]
+ 2: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src1[63:0] : src2[63:0]
+ 3: tmp[63:0] := (ABS(src1[63:0]) <= ABS(src2[63:0])) ? src2[63:0] : src1[63:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[63:0] := (src1[63] << 63) OR (tmp[62:0])
+ 1: dst[63:0] := tmp[63:0]
+ 2: dst[63:0] := (0 << 63) OR (tmp[62:0])
+ 3: dst[63:0] := (1 << 63) OR (tmp[62:0])
+ ESAC
+
+ RETURN dst
+ }
+ dst[63:0] := RANGE(a[63:0], b[63:0], imm8[1:0], imm8[3:2])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for the lower single-precision (32-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from
+ "a" to the upper elements of "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[31:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ IF k[0]
+ dst[31:0] := RANGE(a[31:0], b[31:0], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for the lower single-precision (32-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from
+ "a" to the upper elements of "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[31:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ IF k[0]
+ dst[31:0] := RANGE(a[31:0], b[31:0], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for the lower single-precision (32-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using zeromask "k" (the element is zeroed
+ out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the
+ upper elements of "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[31:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ IF k[0]
+ dst[31:0] := RANGE(a[31:0], b[31:0], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for the lower single-precision (32-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using zeromask "k" (the element is zeroed
+ out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the
+ upper elements of "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit.
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[31:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ IF k[0]
+ dst[31:0] := RANGE(a[31:0], b[31:0], imm8[1:0], imm8[3:2])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Calculate the max, min, absolute max, or absolute min (depending on control in
+ "imm8") for the lower single-precision (32-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst", and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst".
+ imm8[1:0] specifies the operation control: 00 = min, 01 = max, 10 = absolute min, 11 =
+ absolute max.
+ imm8[3:2] specifies the sign control: 00 = sign from a, 01 = sign from compare result,
+ 10 = clear sign bit, 11 = set sign bit. [sae_note]
+
+ DEFINE RANGE(src1[31:0], src2[31:0], opCtl[1:0], signSelCtl[1:0]) {
+ CASE opCtl[1:0] OF
+ 0: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src1[31:0] : src2[31:0]
+ 1: tmp[31:0] := (src1[31:0] <= src2[31:0]) ? src2[31:0] : src1[31:0]
+ 2: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src1[31:0] : src2[31:0]
+ 3: tmp[31:0] := (ABS(src1[31:0]) <= ABS(src2[31:0])) ? src2[31:0] : src1[31:0]
+ ESAC
+
+ CASE signSelCtl[1:0] OF
+ 0: dst[31:0] := (src1[31] << 31) OR (tmp[30:0])
+ 1: dst[31:0] := tmp[31:0]
+ 2: dst[31:0] := (0 << 31) OR (tmp[30:0])
+ 3: dst[31:0] := (1 << 31) OR (tmp[30:0])
+ ESAC
+
+ RETURN dst
+ }
+ dst[31:0] := RANGE(a[31:0], b[31:0], imm8[1:0], imm8[3:2])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed double-precision (64-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ReduceArgumentPD(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed single-precision (32-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ReduceArgumentPS(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower double-precision (64-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from
+ "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper
+ element of "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ IF k[0]
+ dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower double-precision (64-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from
+ "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper
+ element of "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ IF k[0]
+ dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower double-precision (64-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ IF k[0]
+ dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower double-precision (64-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ IF k[0]
+ dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of the lower double-precision (64-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst", and copy the upper element from "a" to the upper
+ element of "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower double-precision (64-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst", and copy the upper element from "a" to the upper
+ element of "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPD(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ tmp[63:0] := src1[63:0] - tmp[63:0]
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := FP64(0.0)
+ FI
+ RETURN tmp[63:0]
+ }
+ dst[63:0] := ReduceArgumentPD(b[63:0], imm8[7:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower single-precision (32-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from
+ "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the
+ upper elements of "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ IF k[0]
+ dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower single-precision (32-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from
+ "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the
+ upper elements of "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ IF k[0]
+ dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower single-precision (32-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ IF k[0]
+ dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower single-precision (32-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ IF k[0]
+ dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of the lower single-precision (32-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst", and copy the upper 3 packed elements from "a" to
+ the upper elements of "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower single-precision (32-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst", and copy the upper 3 packed elements from "a" to
+ the upper elements of "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentPS(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ tmp[31:0] := src1[31:0] - tmp[31:0]
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := FP32(0.0)
+ FI
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := ReduceArgumentPS(b[31:0], imm8[7:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512DQ
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst". [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_Int64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst".
+ [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_FP64_To_UInt64_Truncate(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst". [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_Int64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst".
+ [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 64-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_UInt64_Truncate(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_Int64_To_FP32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512DQ
+
+ Convert
+
+
+
+
+
+
+
+ Multiply the packed 64-bit integers in "a" and "b", producing intermediate
+ 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp[127:0] := a[i+63:i] * b[i+63:i]
+ dst[i+63:i] := tmp[63:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed 64-bit integers in "a" and "b", producing intermediate
+ 128-bit integers, and store the low 64 bits of the intermediate integers in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp[127:0] := a[i+63:i] * b[i+63:i]
+ dst[i+63:i] := tmp[63:0]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 64-bit integers in "a" and "b", producing intermediate
+ 128-bit integers, and store the low 64 bits of the intermediate integers in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ tmp[127:0] := a[i+63:i] * b[i+63:i]
+ dst[i+63:i] := tmp[63:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512DQ
+
+ Arithmetic
+
+
+
+
+
+ Add 8-bit masks in "a" and "b", and store the result in "k".
+
+ k[7:0] := a[7:0] + b[7:0]
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Add 16-bit masks in "a" and "b", and store the result in "k".
+
+ k[15:0] := a[15:0] + b[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Compute the bitwise AND of 8-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[7:0] := a[7:0] AND b[7:0]
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Compute the bitwise NOT of 8-bit masks "a" and then AND with "b", and store the
+ result in "k".
+
+ k[7:0] := (NOT a[7:0]) AND b[7:0]
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+ Compute the bitwise NOT of 8-bit mask "a", and store the result in "k".
+
+ k[7:0] := NOT a[7:0]
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 8-bit masks "a" and "b", and store the result in "k".
+
+ k[7:0] := a[7:0] OR b[7:0]
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Compute the bitwise XNOR of 8-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[7:0] := NOT (a[7:0] XOR b[7:0])
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Compute the bitwise XOR of 8-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[7:0] := a[7:0] XOR b[7:0]
+ k[MAX:8] := 0
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Shift the bits of 8-bit mask "a" left by "count" while shifting in zeros, and
+ store the least significant 8 bits of the result in "k".
+
+ k[MAX:0] := 0
+ IF count[7:0] <= 7
+ k[7:0] := a[7:0] << count[7:0]
+ FI
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Shift the bits of 8-bit mask "a" right by "count" while shifting in zeros, and
+ store the least significant 8 bits of the result in "k".
+
+ k[MAX:0] := 0
+ IF count[7:0] <= 7
+ k[7:0] := a[7:0] >> count[7:0]
+ FI
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+
+ Compute the bitwise OR of 8-bit masks "a" and "b". If the result is all zeros,
+ store 1 in "dst", otherwise store 0 in "dst". If the result is all ones, store 1 in
+ "all_ones", otherwise store 0 in "all_ones".
+
+ tmp[7:0] := a[7:0] OR b[7:0]
+ IF tmp[7:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+ IF tmp[7:0] == 0xFF
+ MEM[all_ones+7:all_ones] := 1
+ ELSE
+ MEM[all_ones+7:all_ones] := 0
+ FI
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 8-bit masks "a" and "b". If the result is all zeroes,
+ store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[7:0] := a[7:0] OR b[7:0]
+ IF tmp[7:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 8-bit masks "a" and "b". If the result is all ones,
+ store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[7:0] := a[7:0] OR b[7:0]
+ IF tmp[7:0] == 0xFF
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+
+ Compute the bitwise AND of 8-bit masks "a" and "b", and if the result is all
+ zeros, store 1 in "dst", otherwise store 0 in "dst". Compute the bitwise NOT of "a" and
+ then AND with "b", if the result is all zeros, store 1 in "and_not", otherwise store 0
+ in "and_not".
+
+ tmp1[7:0] := a[7:0] AND b[7:0]
+ IF tmp1[7:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+ tmp2[7:0] := (NOT a[7:0]) AND b[7:0]
+ IF tmp2[7:0] == 0x0
+ MEM[and_not+7:and_not] := 1
+ ELSE
+ MEM[and_not+7:and_not] := 0
+ FI
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Compute the bitwise AND of 8-bit masks "a" and "b", and if the result is all
+ zeros, store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[7:0] := a[7:0] AND b[7:0]
+ IF tmp[7:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Compute the bitwise NOT of 8-bit mask "a" and then AND with "b", if the result
+ is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[7:0] := (NOT a[7:0]) AND b[7:0]
+ IF tmp[7:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+
+ Compute the bitwise AND of 16-bit masks "a" and "b", and if the result is all
+ zeros, store 1 in "dst", otherwise store 0 in "dst". Compute the bitwise NOT of "a" and
+ then AND with "b", if the result is all zeros, store 1 in "and_not", otherwise store 0
+ in "and_not".
+
+ tmp1[15:0] := a[15:0] AND b[15:0]
+ IF tmp1[15:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+ tmp2[15:0] := (NOT a[15:0]) AND b[15:0]
+ IF tmp2[15:0] == 0x0
+ MEM[and_not+7:and_not] := 1
+ ELSE
+ MEM[and_not+7:and_not] := 0
+ FI
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Compute the bitwise AND of 16-bit masks "a" and "b", and if the result is all
+ zeros, store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[15:0] := a[15:0] AND b[15:0]
+ IF tmp[15:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+
+ Compute the bitwise NOT of 16-bit mask "a" and then AND with "b", if the result
+ is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[15:0] := (NOT a[15:0]) AND b[15:0]
+ IF tmp[15:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+ Convert 8-bit mask "a" into an integer value, and store the result in "dst".
+
+ dst := ZeroExtend32(a[7:0])
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+ Convert integer value "a" into an 8-bit mask, and store the result in "k".
+
+ k := a[7:0]
+
+
+ AVX512DQ
+
+ Mask
+
+
+
+
+ Load 8-bit mask from memory into "k".
+
+ k[7:0] := MEM[mem_addr+7:mem_addr]
+
+
+ AVX512DQ
+
+ Load
+
+
+
+
+
+ Store 8-bit mask from "a" into memory.
+
+ MEM[mem_addr+7:mem_addr] := a[7:0]
+
+
+ AVX512DQ
+
+ Store
+
+
+
+
+
+
+ Compute the inverse cosine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ACOS(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse cosine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ACOS(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the inverse cosine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ACOS(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse cosine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ACOS(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic cosine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ACOSH(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse hyperbolic cosine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ACOSH(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic cosine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ACOSH(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse hyperbolic cosine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ACOSH(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the inverse sine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ASIN(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse sine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ASIN(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the inverse sine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ASIN(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse sine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ASIN(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic sine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ASINH(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse hyperbolic sine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ASINH(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic sine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ASINH(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse hyperbolic sine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ASINH(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+ Compute the inverse tangent of packed double-precision (64-bit) floating-point
+ elements in "a" divided by packed elements in "b", and store the results in "dst"
+ expressed in radians.
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ATAN2(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+
+ Compute the inverse tangent of packed double-precision (64-bit) floating-point
+ elements in "a" divided by packed elements in "b", and store the results in "dst"
+ expressed in radians using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ATAN2(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+ Compute the inverse tangent of packed single-precision (32-bit) floating-point
+ elements in "a" divided by packed elements in "b", and store the results in "dst"
+ expressed in radians.
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ATAN2(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+
+ Compute the inverse tangent of packed single-precision (32-bit) floating-point
+ elements in "a" divided by packed elements in "b", and store the results in "dst"
+ expressed in radians using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ATAN2(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the inverse tangent of packed double-precision (64-bit) floating-point
+ elements in "a" and store the results in "dst" expressed in radians.
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ATAN(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse tangent of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" expressed in radians using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ATAN(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the inverse tangent of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" expressed in radians.
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ATAN(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse tangent of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ATAN(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic tangent of packed double-precision (64-bit)
+ floating-point elements in "a" and store the results in "dst" expressed in radians.
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ATANH(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse hyperbolic tangent of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" expressed in radians
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ATANH(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperblic tangent of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" expressed in radians.
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ATANH(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the inverse hyperbolic tangent of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ATANH(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := COS(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the cosine of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := COS(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := COS(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the cosine of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := COS(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := COSD(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the cosine of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := COSD(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := COSD(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the cosine of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := COSD(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic cosine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := COSH(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the hyperbolic cosine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := COSH(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic cosine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := COSH(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the hyperbolic cosine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := COSH(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed double-precision (64-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := SIN(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the sine of packed double-precision (64-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SIN(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed single-precision (32-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := SIN(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the sine of packed single-precision (32-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SIN(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic sine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := SINH(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the hyperbolic sine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SINH(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic sine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := SINH(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the hyperbolic sine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SINH(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed double-precision (64-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := SIND(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the sine of packed double-precision (64-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SIND(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed single-precision (32-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := SIND(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the sine of packed single-precision (32-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SIND(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := TAN(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the tangent of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := TAN(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := TAN(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the tangent of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := TAN(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := TAND(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the tangent of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := TAND(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := TAND(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the tangent of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := TAND(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic tangent of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := TANH(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the hyperbolic tangent of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := TANH(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic tangent of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := TANH(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+ Compute the hyperbolic tangent of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := TANH(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+ Compute the sine and cosine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", and store the cosine into
+ memory at "mem_addr".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := SIN(a[i+63:i])
+ MEM[mem_addr+i+63:mem_addr+i] := COS(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+ cos_res[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+
+
+ Compute the sine and cosine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", store the cosine into
+ memory at "mem_addr". Elements are written to their respective locations using writemask
+ "k" (elements are copied from "sin_src" or "cos_src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SIN(a[i+63:i])
+ MEM[mem_addr+i+63:mem_addr+i] := COS(a[i+63:i])
+ ELSE
+ dst[i+63:i] := sin_src[i+63:i]
+ MEM[mem_addr+i+63:mem_addr+i] := cos_src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+ cos_res[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+ Compute the sine and cosine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", and store the cosine into
+ memory at "mem_addr".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := SIN(a[i+31:i])
+ MEM[mem_addr+i+31:mem_addr+i] := COS(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+ cos_res[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+
+
+
+
+ Compute the sine and cosine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", store the cosine into
+ memory at "mem_addr". Elements are written to their respective locations using writemask
+ "k" (elements are copied from "sin_src" or "cos_src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SIN(a[i+31:i])
+ MEM[mem_addr+i+31:mem_addr+i] := COS(a[i+31:i])
+ ELSE
+ dst[i+31:i] := sin_src[i+31:i]
+ MEM[mem_addr+i+31:mem_addr+i] := cos_src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+ cos_res[MAX:512] := 0
+
+ AVX512F
+
+ Trigonometry
+
+
+
+
+ Compute the cube root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := CubeRoot(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the cube root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := CubeRoot(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the cube root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := CubeRoot(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the cube root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := CubeRoot(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := POW(10.0, a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := POW(10.0, a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := POW(FP32(10.0), a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := POW(FP32(10.0), a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 2 raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := POW(2.0, a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the exponential value of 2 raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := POW(2.0, a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 2 raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the exponential value of 2 raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := POW(e, a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := POW(e, a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := POW(FP32(e), a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := POW(FP32(e), a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", subtract one from each
+ element, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := POW(e, a[i+63:i]) - 1.0
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", subtract one from each
+ element, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := POW(e, a[i+63:i]) - 1.0
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", subtract one from each
+ element, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := POW(FP32(e), a[i+31:i]) - 1.0
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", subtract one from each
+ element, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := POW(FP32(e), a[i+31:i]) - 1.0
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the length of the hypotenous of a right triangle, with the lengths of
+ the other two sides of the triangle stored as packed double-precision (64-bit)
+ floating-point elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := SQRT(POW(a[i+63:i], 2.0) + POW(b[i+63:i], 2.0))
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the length of the hypotenous of a right triangle, with the lengths of
+ the other two sides of the triangle stored as packed double-precision (64-bit)
+ floating-point elements in "a" and "b", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SQRT(POW(a[i+63:i], 2.0) + POW(b[i+63:i], 2.0))
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the length of the hypotenous of a right triangle, with the lengths of
+ the other two sides of the triangle stored as packed single-precision (32-bit)
+ floating-point elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := SQRT(POW(a[i+31:i], 2.0) + POW(b[i+31:i], 2.0))
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the length of the hypotenous of a right triangle, with the lengths of
+ the other two sides of the triangle stored as packed single-precision (32-bit)
+ floating-point elements in "a" and "b", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SQRT(POW(a[i+31:i], 2.0) + POW(b[i+31:i], 2.0))
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the inverse square root of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := InvSQRT(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the inverse square root of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := InvSQRT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the inverse square root of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := InvSQRT(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the inverse square root of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := InvSQRT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the base-10 logarithm of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := LOG(a[i+63:i]) / LOG(10.0)
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the base-10 logarithm of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LOG(a[i+63:i]) / LOG(10.0)
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the base-10 logarithm of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := LOG(a[i+31:i]) / LOG(10.0)
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the base-10 logarithm of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LOG(a[i+31:i]) / LOG(10.0)
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of one plus packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := LOG(1.0 + a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the natural logarithm of one plus packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LOG(1.0 + a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of one plus packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := LOG(1.0 + a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the natural logarithm of one plus packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LOG(1.0 + a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the base-2 logarithm of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := LOG(a[i+63:i]) / LOG(2.0)
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the base-2 logarithm of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LOG(a[i+63:i]) / LOG(2.0)
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := LOG(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the natural logarithm of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LOG(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := LOG(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the natural logarithm of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LOG(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision floating-point number representing the integer
+ exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision floating-point number representing the integer
+ exponent, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision floating-point number representing the integer
+ exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision floating-point number representing the integer
+ exponent, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the exponential value of packed double-precision (64-bit)
+ floating-point elements in "a" raised by packed elements in "b", and store the results
+ in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := POW(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the exponential value of packed double-precision (64-bit)
+ floating-point elements in "a" raised by packed elements in "b", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := POW(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the exponential value of packed single-precision (32-bit)
+ floating-point elements in "a" raised by packed elements in "b", and store the results
+ in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := POW(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the exponential value of packed single-precision (32-bit)
+ floating-point elements in "a" raised by packed elements in "b", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := POW(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Computes the reciprocal of packed double-precision (64-bit) floating-point
+ elements in "a", storing the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := (1.0 / a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Computes the reciprocal of packed double-precision (64-bit) floating-point
+ elements in "a", storing the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Computes the reciprocal of packed single-precision (32-bit) floating-point
+ elements in "a", storing the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Computes the reciprocal of packed single-precision (32-bit) floating-point
+ elements in "a", storing the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the cumulative distribution function of packed double-precision
+ (64-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := CDFNormal(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the cumulative distribution function of packed double-precision
+ (64-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := CDFNormal(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Compute the cumulative distribution function of packed single-precision
+ (32-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := CDFNormal(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the cumulative distribution function of packed single-precision
+ (32-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := CDFNormal(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse cumulative distribution function of packed double-precision
+ (64-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := InverseCDFNormal(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the inverse cumulative distribution function of packed double-precision
+ (64-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := InverseCDFNormal(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse cumulative distribution function of packed single-precision
+ (32-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := InverseCDFNormal(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the inverse cumulative distribution function of packed single-precision
+ (32-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := InverseCDFNormal(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Compute the error function of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ERF(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the error function of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ERF(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Compute the complementary error function of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := 1.0 - ERF(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the complementary error function of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := 1.0 - ERF(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Compute the error function of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ERF(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the error function of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ERF(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Compute the complementary error function of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+63:i] := 1.0 - ERF(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the complementary error function of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+63:i] := 1.0 - ERF(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse error function of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := 1.0 / ERF(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the inverse error function of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := 1.0 / ERF(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse error function of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+63:i] := 1.0 / ERF(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the inverse error function of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+63:i] := 1.0 / ERF(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse complementary error function of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+63:i]))
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the inverse complementary error function of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+63:i]))
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse complementary error function of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+31:i]))
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+
+
+ Compute the inverse complementary error function of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+31:i]))
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Probability/Statistics
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed double-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := CEIL(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed double-precision floating-point
+ elements in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := CEIL(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed single-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := CEIL(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed single-precision floating-point
+ elements in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := CEIL(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed double-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := FLOOR(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed double-precision floating-point
+ elements in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := FLOOR(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed single-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := FLOOR(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed single-precision floating-point
+ elements in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := FLOOR(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Rounds each packed double-precision (64-bit) floating-point element in "a" to
+ the nearest integer value and stores the results as packed double-precision
+ floating-point elements in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := NearbyInt(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Rounds each packed double-precision (64-bit) floating-point element in "a" to
+ the nearest integer value and stores the results as packed double-precision
+ floating-point elements in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := NearbyInt(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Rounds each packed single-precision (32-bit) floating-point element in "a" to
+ the nearest integer value and stores the results as packed single-precision
+ floating-point elements in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := NearbyInt(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Rounds each packed single-precision (32-bit) floating-point element in "a" to
+ the nearest integer value and stores the results as packed single-precision
+ floating-point elements in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := NearbyInt(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Rounds the packed double-precision (64-bit) floating-point elements in "a" to
+ the nearest even integer value and stores the results in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := RoundToNearestEven(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Rounds the packed double-precision (64-bit) floating-point elements in "a" to
+ the nearest even integer value and stores the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RoundToNearestEven(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Rounds the packed single-precision (32-bit) floating-point elements in "a" to
+ the nearest even integer value and stores the results in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := RoundToNearestEven(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Rounds the packed single-precision (32-bit) floating-point elements in "a" to
+ the nearest even integer value and stores the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RoundToNearestEven(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" to
+ the nearest integer value, and store the results as packed double-precision
+ floating-point elements in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ROUND(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" to
+ the nearest integer value, and store the results as packed double-precision
+ floating-point elements in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ROUND(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Truncate the packed double-precision (64-bit) floating-point elements in "a",
+ and store the results as packed double-precision floating-point elements in "dst".
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := TRUNCATE(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Truncate the packed double-precision (64-bit) floating-point elements in "a",
+ and store the results as packed double-precision floating-point elements in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := TRUNCATE(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Truncate the packed single-precision (32-bit) floating-point elements in "a",
+ and store the results as packed single-precision floating-point elements in "dst".
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := TRUNCATE(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Truncate the packed single-precision (32-bit) floating-point elements in "a",
+ and store the results as packed single-precision floating-point elements in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := TRUNCATE(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Divide packed signed 32-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF b[i+31:i] == 0
+ #DE
+ FI
+ dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed signed 32-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ IF b[i+31:i] == 0
+ #DE
+ FI
+ dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed signed 8-bit integers in "a" by packed elements in "b", and store
+ the truncated results in "dst".
+
+ FOR j := 0 to 63
+ i := 8*j
+ IF b[i+7:i] == 0
+ #DE
+ FI
+ dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed signed 16-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 31
+ i := 16*j
+ IF b[i+15:i] == 0
+ #DE
+ FI
+ dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed signed 64-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ IF b[i+63:i] == 0
+ #DE
+ FI
+ dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 32-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed 32-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 8-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 63
+ i := 8*j
+ dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 16-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 31
+ i := 16*j
+ dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 64-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 7
+ i := 64*j
+ dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF b[i+31:i] == 0
+ #DE
+ FI
+ dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ IF b[i+31:i] == 0
+ #DE
+ FI
+ dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 63
+ i := 8*j
+ IF b[i+7:i] == 0
+ #DE
+ FI
+ dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 31
+ i := 16*j
+ IF b[i+15:i] == 0
+ #DE
+ FI
+ dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ IF b[i+63:i] == 0
+ #DE
+ FI
+ dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 63
+ i := 8*j
+ dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 31
+ i := 16*j
+ dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 7
+ i := 64*j
+ dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+ Compute the base-2 logarithm of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := LOG(a[i+31:i]) / LOG(2.0)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the base-2 logarithm of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LOG(a[i+31:i]) / LOG(2.0)
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set). RM.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the absolute value of packed signed 32-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ABS(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the absolute value of packed signed 32-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ABS(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the absolute value of packed signed 32-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ABS(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the absolute value of packed signed 32-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ABS(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the absolute value of packed signed 64-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ABS(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the absolute value of packed signed 64-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ABS(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the absolute value of packed signed 64-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ABS(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the absolute value of packed signed 64-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ABS(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the absolute value of packed signed 64-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ABS(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the absolute value of packed signed 64-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ABS(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 32-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 32-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 32-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 32-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 64-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 64-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] :=0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 64-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 64-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ maximum values in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ maximum values in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ minimum values in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ minimum values in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the low signed 32-bit integers from each packed 64-bit element in "a"
+ and "b", and store the signed 64-bit results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the low signed 32-bit integers from each packed 64-bit element in "a"
+ and "b", and store the signed 64-bit results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the low signed 32-bit integers from each packed 64-bit element in "a"
+ and "b", and store the signed 64-bit results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the low signed 32-bit integers from each packed 64-bit element in "a"
+ and "b", and store the signed 64-bit results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed 32-bit integers in "a" and "b", producing intermediate
+ 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ tmp[63:0] := a[i+31:i] * b[i+31:i]
+ dst[i+31:i] := tmp[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed 32-bit integers in "a" and "b", producing intermediate
+ 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ tmp[63:0] := a[i+31:i] * b[i+31:i]
+ dst[i+31:i] := tmp[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed 32-bit integers in "a" and "b", producing intermediate
+ 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ tmp[63:0] := a[i+31:i] * b[i+31:i]
+ dst[i+31:i] := tmp[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed 32-bit integers in "a" and "b", producing intermediate
+ 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ tmp[63:0] := a[i+31:i] * b[i+31:i]
+ dst[i+31:i] := tmp[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the low unsigned 32-bit integers from each packed 64-bit element in
+ "a" and "b", and store the unsigned 64-bit results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the low unsigned 32-bit integers from each packed 64-bit element in
+ "a" and "b", and store the unsigned 64-bit results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the low unsigned 32-bit integers from each packed 64-bit element in
+ "a" and "b", and store the unsigned 64-bit results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the low unsigned 32-bit integers from each packed 64-bit element in
+ "a" and "b", and store the unsigned 64-bit results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the approximate reciprocal of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the approximate reciprocal of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the approximate reciprocal of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst". The maximum relative
+ error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := (1.0 / a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the approximate reciprocal of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the approximate reciprocal of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the approximate reciprocal of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst". The maximum relative
+ error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (1.0 / a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the approximate reciprocal of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the approximate reciprocal of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the approximate reciprocal of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst". The maximum relative
+ error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the approximate reciprocal of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the approximate reciprocal of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the approximate reciprocal of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst". The maximum relative
+ error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the approximate reciprocal square root of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst". The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set). The
+ maximum relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the approximate reciprocal square root of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst". The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set). The
+ maximum relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the approximate reciprocal square root of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst". The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set). The
+ maximum relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the approximate reciprocal square root of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst". The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set). The
+ maximum relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 64-byte immediate result, shift the result right
+ by "imm8" 32-bit elements, and store the low 32 bytes (8 elements) in "dst".
+
+ temp[511:256] := a[255:0]
+ temp[255:0] := b[255:0]
+ temp[511:0] := temp[511:0] >> (32*imm8[2:0])
+ dst[255:0] := temp[255:0]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 64-byte immediate result, shift the result right
+ by "imm8" 32-bit elements, and store the low 32 bytes (8 elements) in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ temp[511:256] := a[255:0]
+ temp[255:0] := b[255:0]
+ temp[511:0] := temp[511:0] >> (32*imm8[2:0])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := temp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 64-byte immediate result, shift the result right
+ by "imm8" 32-bit elements, and store the low 32 bytes (8 elements) in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ temp[511:256] := a[255:0]
+ temp[255:0] := b[255:0]
+ temp[511:0] := temp[511:0] >> (32*imm8[2:0])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := temp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 32-byte immediate result, shift the result right
+ by "imm8" 32-bit elements, and store the low 16 bytes (4 elements) in "dst".
+
+ temp[255:128] := a[127:0]
+ temp[127:0] := b[127:0]
+ temp[255:0] := temp[255:0] >> (32*imm8[1:0])
+ dst[127:0] := temp[127:0]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 32-byte immediate result, shift the result right
+ by "imm8" 32-bit elements, and store the low 16 bytes (4 elements) in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ temp[255:128] := a[127:0]
+ temp[127:0] := b[127:0]
+ temp[255:0] := temp[255:0] >> (32*imm8[1:0])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := temp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 32-byte immediate result, shift the result right
+ by "imm8" 32-bit elements, and store the low 16 bytes (4 elements) in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ temp[255:128] := a[127:0]
+ temp[127:0] := b[127:0]
+ temp[255:0] := temp[255:0] >> (32*imm8[1:0])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := temp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 64-byte immediate result, shift the result right
+ by "imm8" 64-bit elements, and store the low 32 bytes (4 elements) in "dst".
+
+ temp[511:256] := a[255:0]
+ temp[255:0] := b[255:0]
+ temp[511:0] := temp[511:0] >> (64*imm8[1:0])
+ dst[255:0] := temp[255:0]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 64-byte immediate result, shift the result right
+ by "imm8" 64-bit elements, and store the low 32 bytes (4 elements) in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ temp[511:256] := a[255:0]
+ temp[255:0] := b[255:0]
+ temp[511:0] := temp[511:0] >> (64*imm8[1:0])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := temp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 64-byte immediate result, shift the result right
+ by "imm8" 64-bit elements, and store the low 32 bytes (4 elements) in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ temp[511:256] := a[255:0]
+ temp[255:0] := b[255:0]
+ temp[511:0] := temp[511:0] >> (64*imm8[1:0])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := temp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 32-byte immediate result, shift the result right
+ by "imm8" 64-bit elements, and store the low 16 bytes (2 elements) in "dst".
+
+ temp[255:128] := a[127:0]
+ temp[127:0] := b[127:0]
+ temp[255:0] := temp[255:0] >> (64*imm8[0])
+ dst[127:0] := temp[127:0]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 32-byte immediate result, shift the result right
+ by "imm8" 64-bit elements, and store the low 16 bytes (2 elements) in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ temp[255:128] := a[127:0]
+ temp[127:0] := b[127:0]
+ temp[255:0] := temp[255:0] >> (64*imm8[0])
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := temp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 32-byte immediate result, shift the result right
+ by "imm8" 64-bit elements, and store the low 16 bytes (2 elements) in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ temp[255:128] := a[127:0]
+ temp[127:0] := b[127:0]
+ temp[255:0] := temp[255:0] >> (64*imm8[0])
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := temp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed double-precision (64-bit) floating-point elements from "a" and "b"
+ using control mask "k", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed double-precision (64-bit) floating-point elements from "a" and "b"
+ using control mask "k", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed single-precision (32-bit) floating-point elements from "a" and "b"
+ using control mask "k", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed single-precision (32-bit) floating-point elements from "a" and "b"
+ using control mask "k", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Broadcast the 4 packed single-precision (32-bit) floating-point elements from
+ "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 4)*32
+ dst[i+31:i] := a[n+31:n]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the 4 packed single-precision (32-bit) floating-point elements from
+ "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 4)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the 4 packed single-precision (32-bit) floating-point elements from
+ "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 4)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 4)*32
+ dst[i+31:i] := a[n+31:n]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 4)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ n := (j % 4)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low double-precision (64-bit) floating-point element from "a" to
+ all elements of "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low double-precision (64-bit) floating-point element from "a" to
+ all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low single-precision (32-bit) floating-point element from "a" to
+ all elements of "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low single-precision (32-bit) floating-point element from "a" to
+ all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low single-precision (32-bit) floating-point element from "a" to
+ all elements of "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low single-precision (32-bit) floating-point element from "a" to
+ all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Contiguously store the active double-precision (64-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to "dst", and pass through
+ the remaining elements from "src".
+
+ size := 64
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := src[255:m]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Contiguously store the active double-precision (64-bit) floating-point elements
+ in "a" (those with their respective bit set in zeromask "k") to "dst", and set the
+ remaining elements to zero.
+
+ size := 64
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := 0
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Contiguously store the active double-precision (64-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to "dst", and pass through
+ the remaining elements from "src".
+
+ size := 64
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := src[127:m]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Contiguously store the active double-precision (64-bit) floating-point elements
+ in "a" (those with their respective bit set in zeromask "k") to "dst", and set the
+ remaining elements to zero.
+
+ size := 64
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := 0
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Contiguously store the active single-precision (32-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to "dst", and pass through
+ the remaining elements from "src".
+
+ size := 32
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := src[255:m]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Contiguously store the active single-precision (32-bit) floating-point elements
+ in "a" (those with their respective bit set in zeromask "k") to "dst", and set the
+ remaining elements to zero.
+
+ size := 32
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := 0
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Contiguously store the active single-precision (32-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to "dst", and pass through
+ the remaining elements from "src".
+
+ size := 32
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := src[127:m]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Contiguously store the active single-precision (32-bit) floating-point elements
+ in "a" (those with their respective bit set in zeromask "k") to "dst", and set the
+ remaining elements to zero.
+
+ size := 32
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := 0
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from "a", selected with "imm8", and store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with
+ "imm8", and store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst". "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN: j := 0
+ SNAN_TOKEN: j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is
+ used to set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst". "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is
+ used to set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst". "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is
+ used to set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst". "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is
+ used to set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element.
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element.
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element.
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element.
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits (composed of 4 packed single-precision
+ (32-bit) floating-point elements) from "b" into "dst" at the location specified by
+ "imm8".
+
+ dst[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 4 packed single-precision
+ (32-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ tmp[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 4 packed single-precision
+ (32-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits (composed of 4 packed 32-bit integers)
+ from "b" into "dst" at the location specified by "imm8".
+
+ dst[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 4 packed 32-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ tmp[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 4 packed 32-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp[255:0] := a[255:0]
+ CASE (imm8[0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed 32-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed 32-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed 64-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed 64-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Contiguously store the active 32-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 32
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := src[255:m]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Contiguously store the active 32-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 32
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := 0
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Contiguously store the active 32-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 32
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := src[127:m]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Contiguously store the active 32-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 32
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := 0
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Contiguously store the active 64-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 64
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := src[255:m]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Contiguously store the active 64-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 64
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := 0
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Contiguously store the active 64-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 64
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := src[127:m]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Contiguously store the active 64-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 64
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := 0
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ id := idx[i+2:i]*32
+ IF k[j]
+ dst[i+31:i] := a[id+31:id]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ id := idx[i+2:i]*32
+ IF k[j]
+ dst[i+31:i] := a[id+31:id]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle 32-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ id := idx[i+2:i]*32
+ dst[i+31:i] := a[id+31:id]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "idx" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ off := idx[i+2:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := idx[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ off := idx[i+2:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ off := idx[i+2:i]*32
+ IF k[j]
+ dst[i+31:i] := (idx[i+3]) ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ off := idx[i+2:i]*32
+ dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using writemask "k" (elements are copied
+ from "idx" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ off := idx[i+1:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := idx[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using writemask "k" (elements are copied
+ from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ off := idx[i+1:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ off := idx[i+1:i]*32
+ IF k[j]
+ dst[i+31:i] := (idx[i+2]) ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ off := idx[i+1:i]*32
+ dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ off := idx[i+1:i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := idx[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ off := idx[i+1:i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ off := idx[i+1:i]*64
+ IF k[j]
+ dst[i+63:i] := (idx[i+2]) ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ off := idx[i+1:i]*64
+ dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" using
+ the corresponding selector and index in "idx", and store the results in "dst" using
+ writemask "k" (elements are copied from "idx" when the corresponding mask bit is not
+ set)
+
+ FOR j := 0 to 1
+ i := j*64
+ off := idx[i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := idx[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" using
+ the corresponding selector and index in "idx", and store the results in "dst" using
+ writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ off := idx[i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" using
+ the corresponding selector and index in "idx", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ off := idx[i]*64
+ IF k[j]
+ dst[i+63:i] := (idx[i+1]) ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" using
+ the corresponding selector and index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ off := idx[i]*64
+ dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ off := idx[i+2:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := idx[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ off := idx[i+2:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*32
+ off := idx[i+2:i]*32
+ IF k[j]
+ dst[i+31:i] := (idx[i+3]) ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ off := idx[i+2:i]*32
+ dst[i+31:i] := idx[i+3] ? b[off+31:off] : a[off+31:off]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" using
+ the corresponding selector and index in "idx", and store the results in "dst" using
+ writemask "k" (elements are copied from "idx" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*32
+ off := idx[i+1:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := idx[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" using
+ the corresponding selector and index in "idx", and store the results in "dst" using
+ writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ off := idx[i+1:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" using
+ the corresponding selector and index in "idx", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ off := idx[i+1:i]*32
+ IF k[j]
+ dst[i+31:i] := (idx[i+2]) ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" using
+ the corresponding selector and index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ off := idx[i+1:i]*32
+ dst[i+31:i] := idx[i+2] ? b[off+31:off] : a[off+31:off]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "idx" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ off := idx[i+1:i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := idx[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ off := idx[i+1:i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ off := idx[i+1:i]*64
+ IF k[j]
+ dst[i+63:i] := (idx[i+2]) ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ off := idx[i+1:i]*64
+ dst[i+63:i] := idx[i+2] ? b[off+63:off] : a[off+63:off]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using writemask "k" (elements are copied
+ from "idx" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ off := idx[i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := idx[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using writemask "k" (elements are copied
+ from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ off := idx[i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ off := idx[i]*64
+ IF k[j]
+ dst[i+63:i] := (idx[i+1]) ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ off := idx[i]*64
+ dst[i+63:i] := idx[i+1] ? b[off+63:off] : a[off+63:off]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
+ IF (imm8[2] == 0) tmp_dst[191:128] := a[191:128]; FI
+ IF (imm8[2] == 1) tmp_dst[191:128] := a[255:192]; FI
+ IF (imm8[3] == 0) tmp_dst[255:192] := a[191:128]; FI
+ IF (imm8[3] == 1) tmp_dst[255:192] := a[255:192]; FI
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
+ IF (b[129] == 0) tmp_dst[191:128] := a[191:128]; FI
+ IF (b[129] == 1) tmp_dst[191:128] := a[255:192]; FI
+ IF (b[193] == 0) tmp_dst[255:192] := a[191:128]; FI
+ IF (b[193] == 1) tmp_dst[255:192] := a[255:192]; FI
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
+ IF (imm8[2] == 0) tmp_dst[191:128] := a[191:128]; FI
+ IF (imm8[2] == 1) tmp_dst[191:128] := a[255:192]; FI
+ IF (imm8[3] == 0) tmp_dst[255:192] := a[191:128]; FI
+ IF (imm8[3] == 1) tmp_dst[255:192] := a[255:192]; FI
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
+ IF (b[129] == 0) tmp_dst[191:128] := a[191:128]; FI
+ IF (b[129] == 1) tmp_dst[191:128] := a[255:192]; FI
+ IF (b[193] == 0) tmp_dst[255:192] := a[191:128]; FI
+ IF (b[193] == 1) tmp_dst[255:192] := a[255:192]; FI
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" using the
+ control in "imm8", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" using the
+ control in "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" using the
+ control in "imm8", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" using the
+ control in "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
+ tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
+ tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
+ tmp_dst[159:128] := SELECT4(a[255:128], b[129:128])
+ tmp_dst[191:160] := SELECT4(a[255:128], b[161:160])
+ tmp_dst[223:192] := SELECT4(a[255:128], b[193:192])
+ tmp_dst[255:224] := SELECT4(a[255:128], b[225:224])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
+ tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
+ tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
+ tmp_dst[159:128] := SELECT4(a[255:128], b[129:128])
+ tmp_dst[191:160] := SELECT4(a[255:128], b[161:160])
+ tmp_dst[223:192] := SELECT4(a[255:128], b[193:192])
+ tmp_dst[255:224] := SELECT4(a[255:128], b[225:224])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" using the
+ control in "imm8", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" using the
+ control in "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
+ tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
+ tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" using the
+ control in "imm8", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" using the
+ control in "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
+ tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
+ tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" across lanes
+ using the control in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ id := idx[i+1:i]*64
+ IF k[j]
+ dst[i+63:i] := a[id+63:id]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" across lanes
+ using the control in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ id := idx[i+1:i]*64
+ IF k[j]
+ dst[i+63:i] := a[id+63:id]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" across lanes
+ using the control in "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ id := idx[i+1:i]*64
+ dst[i+63:i] := a[id+63:id]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ id := idx[i+2:i]*32
+ IF k[j]
+ dst[i+31:i] := a[id+31:id]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ id := idx[i+2:i]*32
+ IF k[j]
+ dst[i+31:i] := a[id+31:id]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx".
+
+ FOR j := 0 to 7
+ i := j*32
+ id := idx[i+2:i]*32
+ dst[i+31:i] := a[id+31:id]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" across lanes lanes using the control in "imm8",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ id := idx[i+1:i]*64
+ IF k[j]
+ dst[i+63:i] := a[id+63:id]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" across lanes using the control in "imm8", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ id := idx[i+1:i]*64
+ IF k[j]
+ dst[i+63:i] := a[id+63:id]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle 64-bit integers in "a" across lanes using the control in "imm8", and
+ store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle 64-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ id := idx[i+1:i]*64
+ dst[i+63:i] := a[id+63:id]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Load contiguous active 32-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Load contiguous active 32-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Load contiguous active 32-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Load contiguous active 32-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Load contiguous active 64-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Load contiguous active 64-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Load contiguous active 64-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Load contiguous active 64-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" within 128-bit lanes using the control in
+ "imm8", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" within 128-bit lanes using the control in
+ "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" using the control in "imm8", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" using the control in "imm8", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the high half of "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the high half of "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the high half of "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the high half of "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the low half of "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the low half of "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the low half of "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the low half of "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ tmp_dst.m128[0] := a.m128[imm8[0]]
+ tmp_dst.m128[1] := b.m128[imm8[1]]
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst.m128[0] := a.m128[imm8[0]]
+ tmp_dst.m128[1] := b.m128[imm8[1]]
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst".
+
+ dst.m128[0] := a.m128[imm8[0]]
+ dst.m128[1] := b.m128[imm8[1]]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ tmp_dst.m128[0] := a.m128[imm8[0]]
+ tmp_dst.m128[1] := b.m128[imm8[1]]
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst.m128[0] := a.m128[imm8[0]]
+ tmp_dst.m128[1] := b.m128[imm8[1]]
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst".
+
+ dst.m128[0] := a.m128[imm8[0]]
+ dst.m128[1] := b.m128[imm8[1]]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ tmp_dst.m128[0] := a.m128[imm8[0]]
+ tmp_dst.m128[1] := b.m128[imm8[1]]
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ tmp_dst.m128[0] := a.m128[imm8[0]]
+ tmp_dst.m128[1] := b.m128[imm8[1]]
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst".
+
+ dst.m128[0] := a.m128[imm8[0]]
+ dst.m128[1] := b.m128[imm8[1]]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ tmp_dst.m128[0] := a.m128[imm8[0]]
+ tmp_dst.m128[1] := b.m128[imm8[1]]
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ tmp_dst.m128[0] := a.m128[imm8[0]]
+ tmp_dst.m128[1] := b.m128[imm8[1]]
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst".
+
+ dst.m128[0] := a.m128[imm8[0]]
+ dst.m128[1] := b.m128[imm8[1]]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes
+ using the control in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
+ tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
+ tmp_dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
+ tmp_dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes
+ using the control in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
+ tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
+ tmp_dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
+ tmp_dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements using the control in
+ "imm8", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
+ tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements using the control in
+ "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
+ tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(b[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(b[255:128], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(b[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(b[255:128], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" using the
+ control in "imm8", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" using the
+ control in "imm8", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the high half of "a" and "b", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the high half of "a" and "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the high half of "a" and "b", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the high half of "a" and "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the low half of "a" and "b", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the low half of "a" and "b", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the low half of "a" and "b", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the low half of "a" and "b", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := (a[i+63:i] OP b[i+63:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := (a[i+31:i] OP b[i+31:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k1[j]
+ k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 7
+ i := j*32
+ k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k1[j]
+ k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 3
+ i := j*32
+ k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k1[j]
+ k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 3
+ i := j*64
+ k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:4] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k1[j]
+ k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+ Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 1
+ i := j*64
+ k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:2] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Contiguously store the active double-precision (64-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to unaligned memory at
+ "base_addr".
+
+ size := 64
+ m := base_addr
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ MEM[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Contiguously store the active double-precision (64-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to unaligned memory at
+ "base_addr".
+
+ size := 64
+ m := base_addr
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ MEM[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Contiguously store the active single-precision (32-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to unaligned memory at
+ "base_addr".
+
+ size := 32
+ m := base_addr
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ MEM[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Contiguously store the active single-precision (32-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to unaligned memory at
+ "base_addr".
+
+ size := 32
+ m := base_addr
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ MEM[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed double-precision (64-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed double-precision (64-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed single-precision (32-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed single-precision (32-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed 32-bit integers from "a" into memory using writemask "k".
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed 32-bit integers from "a" into memory using writemask "k".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed 64-bit integers from "a" into memory using writemask "k".
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed 64-bit integers from "a" into memory using writemask "k".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed 32-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed 32-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed 64-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed 64-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed double-precision (64-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed double-precision (64-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed single-precision (32-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Store packed single-precision (32-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Contiguously store the active 32-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 32
+ m := base_addr
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ MEM[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Contiguously store the active 32-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 32
+ m := base_addr
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ MEM[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Contiguously store the active 64-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 64
+ m := base_addr
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ MEM[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Contiguously store the active 64-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 64
+ m := base_addr
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ MEM[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 4 packed 64-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 8 packed 32-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 2 packed 64-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 4 packed 32-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 4 packed 64-bit integers) from "a" into memory.
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 8 packed 32-bit integers) from "a" into memory.
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 2 packed 64-bit integers) from "a" into memory.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 4 packed 32-bit integers) from "a" into memory.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ AVX512F
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ IF k[j]
+ dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
+ ELSE
+ dst[m+63:m] := src[m+63:m]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ IF k[j]
+ dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
+ ELSE
+ dst[m+63:m] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ IF k[j]
+ dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
+ ELSE
+ dst[m+63:m] := src[m+63:m]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ IF k[j]
+ dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
+ ELSE
+ dst[m+63:m] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 1
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[k+63:k])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[k+63:k])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). [round_imm_note]
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). [round_imm_note]
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). [round_imm_note]
+
+ FOR j := 0 to 3
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). [round_imm_note]
+
+ FOR j := 0 to 3
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ FOR j := 0 to 3
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ FOR j := 0 to 3
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[k+63:k])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[k+63:k])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_Int32_To_FP64(a[l+31:l])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_Int32_To_FP64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 8*j
+ dst[k+7:k] := Truncate8(a[i+31:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the active results (those with their respective bit set in writemask "k") to
+ unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 8*j
+ dst[k+7:k] := Truncate8(a[i+31:i])
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the active results (those with their respective bit set in writemask "k") to
+ unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 16*j
+ dst[k+15:k] := Truncate16(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 16*j
+ dst[k+15:k] := Truncate16(a[i+31:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 8*j
+ dst[k+7:k] := Truncate8(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the active results (those with their respective bit set in writemask "k") to
+ unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 8*j
+ dst[k+7:k] := Truncate8(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the active results (those with their respective bit set in writemask "k") to
+ unaligned memory at "base_addr".
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 32*j
+ dst[k+31:k] := Truncate32(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Truncate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ MEM[base_addr+l+31:base_addr+l] := Truncate32(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Truncate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 32*j
+ dst[k+31:k] := Truncate32(a[i+63:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Truncate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ MEM[base_addr+l+31:base_addr+l] := Truncate32(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Truncate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 16*j
+ dst[k+15:k] := Truncate16(a[i+63:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 16*j
+ dst[k+15:k] := Truncate16(a[i+63:i])
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 8*j
+ dst[k+7:k] := Saturate8(a[i+31:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 8*j
+ dst[k+7:k] := Saturate8(a[i+31:i])
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 16*j
+ dst[k+15:k] := Saturate16(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 16*j
+ dst[k+15:k] := Saturate16(a[i+31:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 8*j
+ dst[k+7:k] := Saturate8(a[i+63:i])
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 8*j
+ dst[k+7:k] := Saturate8(a[i+63:i])
+ ENDFOR
+ dst[MAX:16] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:16] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:16] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 32*j
+ dst[k+31:k] := Saturate32(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Saturate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ MEM[base_addr+l+31:base_addr+l] := Saturate32(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Saturate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 32*j
+ dst[k+31:k] := Saturate32(a[i+63:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Saturate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ MEM[base_addr+l+31:base_addr+l] := Saturate32(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Saturate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 16*j
+ dst[k+15:k] := Saturate16(a[i+63:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 16*j
+ dst[k+15:k] := Saturate16(a[i+63:i])
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 32-bit
+ integers, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 32-bit
+ integers, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 8-bit integers in the low 4 bytes of "a" to packed 32-bit
+ integers, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 8-bit integers in the low 4 bytes of "a" to packed 32-bit
+ integers, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 8-bit integers in the low 4 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 8-bit integers in the low 4 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 8-bit integers in the low 2 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 8-bit integers in the low 2 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ l := j*16
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ l := j*16
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 16-bit integers in the low 8 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 16-bit integers in the low 8 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 16-bit integers in the low 4 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Sign extend packed 16-bit integers in the low 4 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 8*j
+ dst[k+7:k] := SaturateU8(a[i+31:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 8*j
+ dst[k+7:k] := SaturateU8(a[i+31:i])
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 16*j
+ dst[k+15:k] := SaturateU16(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 16*j
+ dst[k+15:k] := SaturateU16(a[i+31:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 8*j
+ dst[k+7:k] := SaturateU8(a[i+63:i])
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 8*j
+ dst[k+7:k] := SaturateU8(a[i+63:i])
+ ENDFOR
+ dst[MAX:16] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:16] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:16] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 32*j
+ dst[k+31:k] := SaturateU32(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := SaturateU32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ MEM[base_addr+l+31:base_addr+l] := SaturateU32(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := SaturateU32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 32*j
+ dst[k+31:k] := SaturateU32(a[i+63:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := SaturateU32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ MEM[base_addr+l+31:base_addr+l] := SaturateU32(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := SaturateU32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 64*j
+ k := 16*j
+ dst[k+15:k] := SaturateU16(a[i+63:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 16*j
+ dst[k+15:k] := SaturateU16(a[i+63:i])
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the active results (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 8 bytes of "a" to packed
+ 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 8 bytes of "a" to packed
+ 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 4 bytes of "a" to packed
+ 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in th elow 4 bytes of "a" to packed
+ 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 4 bytes of "a" to packed
+ 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 4 bytes of "a" to packed
+ 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 2 bytes of "a" to packed
+ 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 2 bytes of "a" to packed
+ 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in the low 8 bytes of "a" to packed
+ 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in the low 8 bytes of "a" to packed
+ 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in the low 4 bytes of "a" to packed
+ 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in the low 4 bytes of "a" to packed
+ 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memory into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). "mem_addr" must be aligned on a 32-byte boundary or a
+ general-protection exception may be generated.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memory into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception
+ may be generated.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memory into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). "mem_addr" must be aligned on a 16-byte boundary or a
+ general-protection exception may be generated.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memory into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception
+ may be generated.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). "mem_addr" must be aligned on a 32-byte boundary or a
+ general-protection exception may be generated.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception
+ may be generated.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). "mem_addr" must be aligned on a 16-byte boundary or a
+ general-protection exception may be generated.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception
+ may be generated.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memoy into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memoy into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memoy into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memoy into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load contiguous active 32-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load contiguous active 32-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load contiguous active 32-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load contiguous active 32-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load contiguous active 64-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load contiguous active 64-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Load contiguous active 64-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load contiguous active 64-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 3
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 1
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 256-bits (composed of 4 packed 64-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 256-bits (composed of 8 packed 32-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 2 packed 64-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 4 packed 32-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 256-bits (composed of 4 packed 64-bit integers) from memory into "dst".
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 256-bits (composed of 8 packed 32-bit integers) from memory into "dst".
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 2 packed 64-bit integers) from memory into "dst".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 4 packed 32-bit integers) from memory into "dst".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Load
+
+
+
+
+
+
+ Move packed double-precision (64-bit) floating-point elements from "a" to "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed double-precision (64-bit) floating-point elements from "a" into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Move packed double-precision (64-bit) floating-point elements from "a" to "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed double-precision (64-bit) floating-point elements from "a" into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Move packed single-precision (32-bit) floating-point elements from "a" to "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed single-precision (32-bit) floating-point elements from "a" into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Move packed single-precision (32-bit) floating-point elements from "a" to "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed single-precision (32-bit) floating-point elements from "a" into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Duplicate even-indexed double-precision (64-bit) floating-point elements from
+ "a", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ tmp[63:0] := a[63:0]
+ tmp[127:64] := a[63:0]
+ tmp[191:128] := a[191:128]
+ tmp[255:192] := a[191:128]
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Duplicate even-indexed double-precision (64-bit) floating-point elements from
+ "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[63:0] := a[63:0]
+ tmp[127:64] := a[63:0]
+ tmp[191:128] := a[191:128]
+ tmp[255:192] := a[191:128]
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Duplicate even-indexed double-precision (64-bit) floating-point elements from
+ "a", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ tmp[63:0] := a[63:0]
+ tmp[127:64] := a[63:0]
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Duplicate even-indexed double-precision (64-bit) floating-point elements from
+ "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[63:0] := a[63:0]
+ tmp[127:64] := a[63:0]
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Move packed 32-bit integers from "a" to "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed 32-bit integers from "a" into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Move packed 32-bit integers from "a" to "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed 32-bit integers from "a" into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Move packed 64-bit integers from "a" to "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed 64-bit integers from "a" into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Move packed 64-bit integers from "a" to "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Move packed 64-bit integers from "a" into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Duplicate odd-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ tmp[31:0] := a[63:32]
+ tmp[63:32] := a[63:32]
+ tmp[95:64] := a[127:96]
+ tmp[127:96] := a[127:96]
+ tmp[159:128] := a[191:160]
+ tmp[191:160] := a[191:160]
+ tmp[223:192] := a[255:224]
+ tmp[255:224] := a[255:224]
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Duplicate odd-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[31:0] := a[63:32]
+ tmp[63:32] := a[63:32]
+ tmp[95:64] := a[127:96]
+ tmp[127:96] := a[127:96]
+ tmp[159:128] := a[191:160]
+ tmp[191:160] := a[191:160]
+ tmp[223:192] := a[255:224]
+ tmp[255:224] := a[255:224]
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Duplicate odd-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ tmp[31:0] := a[63:32]
+ tmp[63:32] := a[63:32]
+ tmp[95:64] := a[127:96]
+ tmp[127:96] := a[127:96]
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Duplicate odd-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[31:0] := a[63:32]
+ tmp[63:32] := a[63:32]
+ tmp[95:64] := a[127:96]
+ tmp[127:96] := a[127:96]
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Duplicate even-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ tmp[31:0] := a[31:0]
+ tmp[63:32] := a[31:0]
+ tmp[95:64] := a[95:64]
+ tmp[127:96] := a[95:64]
+ tmp[159:128] := a[159:128]
+ tmp[191:160] := a[159:128]
+ tmp[223:192] := a[223:192]
+ tmp[255:224] := a[223:192]
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Duplicate even-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[31:0] := a[31:0]
+ tmp[63:32] := a[31:0]
+ tmp[95:64] := a[95:64]
+ tmp[127:96] := a[95:64]
+ tmp[159:128] := a[159:128]
+ tmp[191:160] := a[159:128]
+ tmp[223:192] := a[223:192]
+ tmp[255:224] := a[223:192]
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+ Duplicate even-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ tmp[31:0] := a[31:0]
+ tmp[63:32] := a[31:0]
+ tmp[95:64] := a[95:64]
+ tmp[127:96] := a[95:64]
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+ Duplicate even-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[31:0] := a[31:0]
+ tmp[63:32] := a[31:0]
+ tmp[95:64] := a[95:64]
+ tmp[127:96] := a[95:64]
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Move
+
+
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] AND b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] AND b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] AND b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] AND b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (NOT a[i+31:i]) AND b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (NOT a[i+31:i]) AND b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (NOT a[i+63:i]) AND b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (NOT a[i+63:i]) AND b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] AND b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] AND b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] AND b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] AND b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using writemask "k" at 32-bit granularity (32-bit elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ FOR h := 0 to 31
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using zeromask "k" at 32-bit granularity (32-bit elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ FOR h := 0 to 31
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst".
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 7
+ i := j*32
+ FOR h := 0 to 31
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using writemask "k" at 32-bit granularity (32-bit elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ FOR h := 0 to 31
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using zeromask "k" at 32-bit granularity (32-bit elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ FOR h := 0 to 31
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst".
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 3
+ i := j*32
+ FOR h := 0 to 31
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using writemask "k" at 64-bit granularity (64-bit elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ FOR h := 0 to 63
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using zeromask "k" at 64-bit granularity (64-bit elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ FOR h := 0 to 63
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst".
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 3
+ i := j*64
+ FOR h := 0 to 63
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using writemask "k" at 64-bit granularity (64-bit elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ FOR h := 0 to 63
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using zeromask "k" at 64-bit granularity (64-bit elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ FOR h := 0 to 63
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst".
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 1
+ i := j*64
+ FOR h := 0 to 63
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Logical
+
+
+
+
+
+
+ Broadcast 32-bit integer "a" to all elements of "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Set
+
+
+
+
+
+ Broadcast 32-bit integer "a" to all elements of "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Set
+
+
+
+
+
+
+ Broadcast 32-bit integer "a" to all elements of "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Set
+
+
+
+
+
+ Broadcast 32-bit integer "a" to all elements of "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Set
+
+
+
+
+
+
+ Broadcast 64-bit integer "a" to all elements of "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Set
+
+
+
+
+
+ Broadcast 64-bit integer "a" to all elements of "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Set
+
+
+
+
+
+
+ Broadcast 64-bit integer "a" to all elements of "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Set
+
+
+
+
+
+ Broadcast 64-bit integer "a" to all elements of "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Set
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF count[63:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF imm8[7:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF count[63:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF imm8[7:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF count[i+63:i] < 64
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF count[i+63:i] < 64
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Perform the last round of an AES encryption flow on data (state) in "a" using
+ the round key in "RoundKey", and store the results in "dst"."
+ FOR j := 0 to 3
+ i := j*128
+ a[i+127:i] := ShiftRows(a[i+127:i])
+ a[i+127:i] := SubBytes(a[i+127:i])
+ dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+ VAES
+
+ Cryptography
+
+
+
+
+
+ Perform one round of an AES encryption flow on data (state) in "a" using the
+ round key in "RoundKey", and store the results in "dst"."
+ FOR j := 0 to 3
+ i := j*128
+ a[i+127:i] := ShiftRows(a[i+127:i])
+ a[i+127:i] := SubBytes(a[i+127:i])
+ a[i+127:i] := MixColumns(a[i+127:i])
+ dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+ VAES
+
+ Cryptography
+
+
+
+
+
+ Perform the last round of an AES decryption flow on data (state) in "a" using
+ the round key in "RoundKey", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*128
+ a[i+127:i] := InvShiftRows(a[i+127:i])
+ a[i+127:i] := InvSubBytes(a[i+127:i])
+ dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+ VAES
+
+ Cryptography
+
+
+
+
+
+ Perform one round of an AES decryption flow on data (state) in "a" using the
+ round key in "RoundKey", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*128
+ a[i+127:i] := InvShiftRows(a[i+127:i])
+ a[i+127:i] := InvSubBytes(a[i+127:i])
+ a[i+127:i] := InvMixColumns(a[i+127:i])
+ dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+ VAES
+
+ Cryptography
+
+
+
+
+
+
+
+
+ Multiply the packed 32-bit integers in "a" and "b", producing intermediate
+ 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ tmp[63:0] := a[i+31:i] * b[i+31:i]
+ dst[i+31:i] := tmp[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Add the lower double-precision (64-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst", and copy the upper element from "a" to
+ the upper element of "dst".
+ [round_note]
+
+ dst[63:0] := a[63:0] + b[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Add the lower double-precision (64-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to
+ the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := a[63:0] + b[63:0]
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add the lower double-precision (64-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to
+ the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := a[63:0] + b[63:0]
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add the lower double-precision (64-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using zeromask "k" (the element is zeroed
+ out when mask bit 0 is not set), and copy the upper element from "a" to the upper
+ element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := a[63:0] + b[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Add the lower double-precision (64-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using zeromask "k" (the element is zeroed
+ out when mask bit 0 is not set), and copy the upper element from "a" to the upper
+ element of "dst".
+
+ IF k[0]
+ dst[63:0] := a[63:0] + b[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Add the lower single-precision (32-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst", and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := a[31:0] + b[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Add the lower single-precision (32-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from
+ "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := a[31:0] + b[31:0]
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add the lower single-precision (32-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from
+ "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := a[31:0] + b[31:0]
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add the lower single-precision (32-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using zeromask "k" (the element is zeroed
+ out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the
+ upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := a[31:0] + b[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Add the lower single-precision (32-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst" using zeromask "k" (the element is zeroed
+ out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the
+ upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := a[31:0] + b[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", =and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := 64*j
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := 64*j
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := 64*j
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Divide the lower double-precision (64-bit) floating-point element in "a" by the
+ lower double-precision (64-bit) floating-point element in "b", store the result in the
+ lower element of "dst", and copy the upper element from "a" to the upper element of
+ "dst".
+ [round_note]
+
+ dst[63:0] := a[63:0] / b[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Divide the lower double-precision (64-bit) floating-point element in "a" by the
+ lower double-precision (64-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := a[63:0] / b[63:0]
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide the lower double-precision (64-bit) floating-point element in "a" by the
+ lower double-precision (64-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := a[63:0] / b[63:0]
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide the lower double-precision (64-bit) floating-point element in "a" by the
+ lower double-precision (64-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and copy the upper element from "a" to the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := a[63:0] / b[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Divide the lower double-precision (64-bit) floating-point element in "a" by the
+ lower double-precision (64-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := a[63:0] / b[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Divide the lower single-precision (32-bit) floating-point element in "a" by the
+ lower single-precision (32-bit) floating-point element in "b", store the result in the
+ lower element of "dst", and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ dst[31:0] := a[31:0] / b[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Divide the lower single-precision (32-bit) floating-point element in "a" by the
+ lower single-precision (32-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements
+ of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := a[31:0] / b[31:0]
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide the lower single-precision (32-bit) floating-point element in "a" by the
+ lower single-precision (32-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements
+ of "dst".
+
+ IF k[0]
+ dst[31:0] := a[31:0] / b[31:0]
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide the lower single-precision (32-bit) floating-point element in "a" by the
+ lower single-precision (32-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := a[31:0] / b[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Divide the lower single-precision (32-bit) floating-point element in "a" by the
+ lower single-precision (32-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := a[31:0] / b[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in "a"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst", and copy the upper element from "a" to the upper element of
+ "dst".
+ [round_note]
+
+ dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "c" when mask
+ bit 0 is not set), and copy the upper element from "c" to the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := c[63:0]
+ FI
+ dst[127:64] := c[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "c" when mask
+ bit 0 is not set), and copy the upper element from "c" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := c[63:0]
+ FI
+ dst[127:64] := c[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "a" when mask
+ bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := a[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "a" when mask
+ bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := a[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0
+ is not set), and copy the upper element from "a" to the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0
+ is not set), and copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "c" when mask
+ bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper elements
+ of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := c[31:0]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "c" when mask
+ bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper elements
+ of "dst".
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := c[31:0]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "a" when mask
+ bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements
+ of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := a[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "a" when mask
+ bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements
+ of "dst".
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := a[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0
+ is not set), and copy the upper 3 packed elements from "a" to the upper elements of
+ "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0
+ is not set), and copy the upper 3 packed elements from "a" to the upper elements of
+ "dst".
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst", and copy the upper element from "a" to the upper
+ element of "dst".
+ [round_note]
+
+ dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper element from "c" to the upper element of
+ "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := c[63:0]
+ FI
+ dst[127:64] := c[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper element from "c" to the upper element of
+ "dst".
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := c[63:0]
+ FI
+ dst[127:64] := c[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := a[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst".
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := a[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst".
+
+ IF k[0]
+ dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst", and copy the upper 3 packed elements from "a" to
+ the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := c[31:0]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := c[31:0]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := a[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := a[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "c"
+ when the corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using writemask "k" (elements are copied from "a"
+ when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set). [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set). [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst", and copy the upper element from "a" to the upper
+ element of "dst".
+ [round_note]
+
+ dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper element from "c" to the upper element of
+ "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := c[63:0]
+ FI
+ dst[127:64] := c[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper element from "c" to the upper element of
+ "dst".
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := c[63:0]
+ FI
+ dst[127:64] := c[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := a[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst".
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := a[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst".
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst", and copy the upper 3 packed elements from "a" to
+ the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := c[31:0]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := c[31:0]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := a[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := a[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set). [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst", and copy the upper element from "a" to the
+ upper element of "dst".
+ [round_note]
+
+ dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using writemask "k" (the element is copied from
+ "c" when mask bit 0 is not set), and copy the upper element from "c" to the upper
+ element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := c[63:0]
+ FI
+ dst[127:64] := c[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using writemask "k" (the element is copied from
+ "c" when mask bit 0 is not set), and copy the upper element from "c" to the upper
+ element of "dst".
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := c[63:0]
+ FI
+ dst[127:64] := c[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using writemask "k" (the element is copied from
+ "c" when mask bit 0 is not set), and copy the upper element from "a" to the upper
+ element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := a[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using writemask "k" (the element is copied from
+ "c" when mask bit 0 is not set), and copy the upper element from "a" to the upper
+ element of "dst".
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := a[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not
+ set), and copy the upper element from "a" to the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not
+ set), and copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract the lower element in "c" from the negated intermediate result, store the
+ result in the lower element of "dst", and copy the upper 3 packed elements from "a" to
+ the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract the lower element in "c" from the negated intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := c[31:0]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using writemask "k" (the element is copied from
+ "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the
+ upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := c[31:0]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using writemask "k" (the element is copied from
+ "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the
+ upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := a[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using writemask "k" (the element is copied from
+ "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the
+ upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := a[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using zeromask "k" (the element is zeroed out
+ when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using zeromask "k" (the element is zeroed out
+ when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to
+ the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := a[63:0] * b[63:0]
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to
+ the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := a[63:0] * b[63:0]
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using zeromask "k" (the element is
+ zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper
+ element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := a[63:0] * b[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using zeromask "k" (the element is
+ zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper
+ element of "dst".
+
+ IF k[0]
+ dst[63:0] := a[63:0] * b[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst", and copy the upper element from "a"
+ to the upper element of "dst".
+ [round_note]
+
+ dst[63:0] := a[63:0] * b[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from
+ "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := a[31:0] * b[31:0]
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from
+ "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := a[31:0] * b[31:0]
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using zeromask "k" (the element is
+ zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to
+ the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := a[31:0] * b[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using zeromask "k" (the element is
+ zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to
+ the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := a[31:0] * b[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst", and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := a[31:0] * b[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 32-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Add packed 64-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 64-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed 64-bit integers in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the low signed 32-bit integers from each packed 64-bit element in "a"
+ and "b", and store the signed 64-bit results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the low signed 32-bit integers from each packed 64-bit element in "a"
+ and "b", and store the signed 64-bit results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Multiply the low signed 32-bit integers from each packed 64-bit element in "a"
+ and "b", and store the signed 64-bit results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the low unsigned 32-bit integers from each packed 64-bit element in
+ "a" and "b", and store the unsigned 64-bit results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the low unsigned 32-bit integers from each packed 64-bit element in
+ "a" and "b", and store the unsigned 64-bit results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Multiply the low unsigned 32-bit integers from each packed 64-bit element in
+ "a" and "b", and store the unsigned 64-bit results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+31:i] * b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Subtract the lower double-precision (64-bit) floating-point element in "b" from
+ the lower double-precision (64-bit) floating-point element in "a", store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "src" when
+ mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := a[63:0] - b[63:0]
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract the lower double-precision (64-bit) floating-point element in "b" from
+ the lower double-precision (64-bit) floating-point element in "a", store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "src" when
+ mask bit 0 is not set), and copy the upper element from "a" to the upper element of
+ "dst".
+
+ IF k[0]
+ dst[63:0] := a[63:0] - b[63:0]
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract the lower double-precision (64-bit) floating-point element in "b" from
+ the lower double-precision (64-bit) floating-point element in "a", store the result in
+ the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0
+ is not set), and copy the upper element from "a" to the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := a[63:0] - b[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract the lower double-precision (64-bit) floating-point element in "b" from
+ the lower double-precision (64-bit) floating-point element in "a", store the result in
+ the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0
+ is not set), and copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := a[63:0] - b[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract the lower double-precision (64-bit) floating-point element in "b" from
+ the lower double-precision (64-bit) floating-point element in "a", store the result in
+ the lower element of "dst", and copy the upper element from "a" to the upper element of
+ "dst".
+ [round_note]
+
+ dst[63:0] := a[63:0] - b[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Subtract the lower single-precision (32-bit) floating-point element in "b" from
+ the lower single-precision (32-bit) floating-point element in "a", store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "src" when
+ mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := a[31:0] - b[31:0]
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract the lower single-precision (32-bit) floating-point element in "b" from
+ the lower single-precision (32-bit) floating-point element in "a", store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "src" when
+ mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst[31:0] := a[31:0] - b[31:0]
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract the lower single-precision (32-bit) floating-point element in "b" from
+ the lower single-precision (32-bit) floating-point element in "a", store the result in
+ the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0
+ is not set), and copy the upper 3 packed elements from "a" to the upper elements of
+ "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := a[31:0] - b[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract the lower single-precision (32-bit) floating-point element in "b" from
+ the lower single-precision (32-bit) floating-point element in "a", store the result in
+ the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0
+ is not set), and copy the upper 3 packed elements from "a" to the upper elements of
+ "dst".
+
+ IF k[0]
+ dst[31:0] := a[31:0] - b[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract the lower single-precision (32-bit) floating-point element in "b" from
+ the lower single-precision (32-bit) floating-point element in "a", store the result in
+ the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ dst[31:0] := a[31:0] - b[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Store 512-bits (composed of 8 packed 64-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 16 packed 32-bit integers) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 16-bit mask from "a" into memory.
+
+ MEM[mem_addr+15:mem_addr] := a[15:0]
+
+
+ AVX512F
+
+ Store
+
+
+ Swizzle
+
+
+
+
+ Contiguously store the active double-precision (64-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to unaligned memory at
+ "base_addr".
+
+ size := 64
+ m := base_addr
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ MEM[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+ Swizzle
+
+
+
+
+ Contiguously store the active single-precision (32-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to unaligned memory at
+ "base_addr".
+
+ size := 32
+ m := base_addr
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ MEM[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+ Store packed 32-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits of integer data from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+ Store packed 64-bit integers from "a" into memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits of integer data from "a" into memory using a non-temporal memory
+ hint.
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 8 packed double-precision (64-bit) floating-point
+ elements) from "a" into memory using a non-temporal memory hint.
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 16 packed single-precision (32-bit) floating-point
+ elements) from "a" into memory using a non-temporal memory hint.
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+ Store the lower double-precision (64-bit) floating-point element from "a" into
+ memory using writemask "k".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ IF k[0]
+ MEM[mem_addr+63:mem_addr] := a[63:0]
+ FI
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+ Store the lower single-precision (32-bit) floating-point element from "a" into
+ memory using writemask "k".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ IF k[0]
+ MEM[mem_addr+31:mem_addr] := a[31:0]
+ FI
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+ Store packed double-precision (64-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 8 packed double-precision (64-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+ Store packed single-precision (32-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 16 packed single-precision (32-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+ Swizzle
+
+
+
+
+ Contiguously store the active 32-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 32
+ m := base_addr
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ MEM[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+ Swizzle
+
+
+
+
+ Contiguously store the active 64-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 64
+ m := base_addr
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ MEM[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 64-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter double-precision (64-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Multiplies elements in packed 64-bit integer vectors "a" and "b" together,
+ storing the lower 64 bits of the result in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+ Multiplies elements in packed 64-bit integer vectors "a" and "b" together,
+ storing the lower 64 bits of the result in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Store
+
+
+
+
+ Load 512-bits (composed of 8 packed 64-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+ Load 512-bits (composed of 16 packed 32-bit integers) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+ Load 16-bit mask from memory into "k".
+
+ k[15:0] := MEM[mem_addr+15:mem_addr]
+
+
+ AVX512F
+
+ Load
+
+
+ Swizzle
+
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+ Swizzle
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+ Swizzle
+
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+ Swizzle
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+
+
+ Gather double-precision (64-bit) floating-point elements from memory using
+ 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 64-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memory into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception
+ may be generated.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception
+ may be generated.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+ Load 512-bits of integer data from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+ Load 512-bits of integer data from memory into "dst" using a non-temporal
+ memory hint.
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Load a double-precision (64-bit) floating-point element from memory into the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and set the upper element of "dst" to zero. "mem_addr" must be
+ aligned on a 16-byte boundary or a general-protection exception may be generated.
+
+ IF k[0]
+ dst[63:0] := MEM[mem_addr+63:mem_addr]
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[MAX:64] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+ Load a double-precision (64-bit) floating-point element from memory into the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and set the upper element of "dst" to zero. "mem_addr" must be aligned on a
+ 16-byte boundary or a general-protection exception may be generated.
+
+ IF k[0]
+ dst[63:0] := MEM[mem_addr+63:mem_addr]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[MAX:64] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Load a single-precision (32-bit) floating-point element from memory into the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and set the upper elements of "dst" to zero. "mem_addr" must be
+ aligned on a 16-byte boundary or a general-protection exception may be generated.
+
+ IF k[0]
+ dst[31:0] := MEM[mem_addr+31:mem_addr]
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[MAX:32] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+ Load a single-precision (32-bit) floating-point element from memory into the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and set the upper elements of "dst" to zero. "mem_addr" must be aligned on a
+ 16-byte boundary or a general-protection exception may be generated.
+
+ IF k[0]
+ dst[31:0] := MEM[mem_addr+31:mem_addr]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[MAX:32] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+ Load 512-bits (composed of 8 packed double-precision (64-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memoy into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memoy into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+ Load 512-bits (composed of 16 packed single-precision (32-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+ Swizzle
+
+
+
+
+ Load contiguous active 32-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+ Swizzle
+
+
+
+ Load contiguous active 32-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+ Swizzle
+
+
+
+
+ Load contiguous active 64-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+ Swizzle
+
+
+
+ Load contiguous active 64-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*64
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 64-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*64
+ IF k[j]
+ addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+ Compute the bitwise AND of 16-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[15:0] := a[15:0] AND b[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Compute the bitwise NOT of 16-bit masks "a" and then AND with "b", and store
+ the result in "k".
+
+ k[15:0] := (NOT a[15:0]) AND b[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+ Compute the bitwise NOT of 16-bit mask "a", and store the result in "k".
+
+ k[15:0] := NOT a[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 16-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[15:0] := a[15:0] OR b[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Compute the bitwise XNOR of 16-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[15:0] := NOT (a[15:0] XOR b[15:0])
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Compute the bitwise XOR of 16-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[15:0] := a[15:0] XOR b[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Shift the bits of 16-bit mask "a" left by "count" while shifting in zeros, and
+ store the least significant 16 bits of the result in "k".
+
+ k[MAX:0] := 0
+ IF count[7:0] <= 15
+ k[15:0] := a[15:0] << count[7:0]
+ FI
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Shift the bits of 16-bit mask "a" right by "count" while shifting in zeros, and
+ store the least significant 16 bits of the result in "k".
+
+ k[MAX:0] := 0
+ IF count[7:0] <= 15
+ k[15:0] := a[15:0] >> count[7:0]
+ FI
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+
+ Compute the bitwise OR of 16-bit masks "a" and "b". If the result is all zeros,
+ store 1 in "dst", otherwise store 0 in "dst". If the result is all ones, store 1 in
+ "all_ones", otherwise store 0 in "all_ones".
+
+ tmp[15:0] := a[15:0] OR b[15:0]
+ IF tmp[15:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+ IF tmp[15:0] == 0xFFFF
+ MEM[all_ones+7:all_ones] := 1
+ ELSE
+ MEM[all_ones+7:all_ones] := 0
+ FI
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 16-bit masks "a" and "b". If the result is all
+ zeroes, store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[15:0] := a[15:0] OR b[15:0]
+ IF tmp[15:0] == 0x0
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 16-bit masks "a" and "b". If the result is all ones,
+ store 1 in "dst", otherwise store 0 in "dst".
+
+ tmp[15:0] := a[15:0] OR b[15:0]
+ IF tmp[15:0] == 0xFFFF
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+ Convert 16-bit mask "a" into an integer value, and store the result in "dst".
+
+ dst := ZeroExtend32(a[15:0])
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+ Convert integer value "a" into an 16-bit mask, and store the result in "k".
+
+ k := ZeroExtend16(a[15:0])
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Compute the bitwise NOT of 16-bit masks "a" and then AND with "b", and store
+ the result in "k".
+
+ k[15:0] := (NOT a[15:0]) AND b[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Compute the bitwise AND of 16-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[15:0] := a[15:0] AND b[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+ Copy 16-bit mask "a" to "k".
+
+ k[15:0] := a[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+ Compute the bitwise NOT of 16-bit mask "a", and store the result in "k".
+
+ k[15:0] := NOT a[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Compute the bitwise OR of 16-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[15:0] := a[15:0] OR b[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Unpack and interleave 8 bits from masks "a" and "b", and store the 16-bit
+ result in "k".
+
+ k[7:0] := b[7:0]
+ k[15:8] := a[7:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Compute the bitwise XNOR of 16-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[15:0] := NOT (a[15:0] XOR b[15:0])
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Compute the bitwise XOR of 16-bit masks "a" and "b", and store the result in
+ "k".
+
+ k[15:0] := a[15:0] XOR b[15:0]
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Performs bitwise OR between "k1" and "k2", storing the result in "dst". ZF flag
+ is set if "dst" is 0.
+ dst[15:0] := k1[15:0] | k2[15:0]
+ IF dst == 0
+ SetZF()
+ FI
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+ Performs bitwise OR between "k1" and "k2", storing the result in "dst". CF flag
+ is set if "dst" consists of all 1's.
+ dst[15:0] := k1[15:0] | k2[15:0]
+ IF PopCount(dst[15:0]) == 16
+ SetCF()
+ FI
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+ Converts bit mask "k1" into an integer value, storing the results in "dst".
+
+ dst := ZeroExtend32(k1)
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+ Converts integer "mask" into bitmask, storing the result in "dst".
+
+ dst := mask[15:0]
+
+
+ AVX512F
+
+ Mask
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 128-byte immediate result, shift the result
+ right by "imm8" 32-bit elements, and stores the low 64 bytes (16 elements) in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ temp[1023:512] := a[511:0]
+ temp[511:0] := b[511:0]
+ temp[1023:0] := temp[1023:0] >> (32*imm8[3:0])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := temp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 128-byte immediate result, shift the result
+ right by "imm8" 64-bit elements, and store the low 64 bytes (8 elements) in "dst".
+
+ temp[1023:512] := a[511:0]
+ temp[511:0] := b[511:0]
+ temp[1023:0] := temp[1023:0] >> (64*imm8[2:0])
+ dst[511:0] := temp[511:0]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 128-byte immediate result, shift the result
+ right by "imm8" 64-bit elements, and store the low 64 bytes (8 elements) in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ temp[1023:512] := a[511:0]
+ temp[511:0] := b[511:0]
+ temp[1023:0] := temp[1023:0] >> (64*imm8[2:0])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := temp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 128-byte immediate result, shift the result
+ right by "imm8" 64-bit elements, and stores the low 64 bytes (8 elements) in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ temp[1023:512] := a[511:0]
+ temp[511:0] := b[511:0]
+ temp[1023:0] := temp[1023:0] >> (64*imm8[2:0])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := temp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst". "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst". "imm8" is used to
+ set the required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is
+ used to set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is
+ used to set the required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Fix up packed double-precision (64-bit) floating-point elements in "a" and "b"
+ using packed 64-bit integers in "c", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to
+ set the required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst". "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst". "imm8" is used to
+ set the required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is
+ used to set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is
+ used to set the required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to
+ set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Fix up packed single-precision (32-bit) floating-point elements in "a" and "b"
+ using packed 32-bit integers in "c", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to
+ set the required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" using the lower 64-bit integer in "c", store the result in the lower element of
+ "dst", and copy the upper element from "b" to the upper element of "dst". "imm8" is used
+ to set the required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
+ dst[127:64] := b[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Fix up the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" using the lower 64-bit integer in "c", store the result in the lower element of
+ "dst", and copy the upper element from "b" to the upper element of "dst". "imm8" is used
+ to set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
+ dst[127:64] := b[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Fix up the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" using the lower 64-bit integer in "c", store the result in the lower element of
+ "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set),
+ and copy the upper element from "b" to the upper element of "dst". "imm8" is used to set
+ the required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ IF k[0]
+ dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := a[63:0]
+ FI
+ dst[127:64] := b[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" using the lower 64-bit integer in "c", store the result in the lower element of
+ "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set),
+ and copy the upper element from "b" to the upper element of "dst". "imm8" is used to set
+ the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ IF k[0]
+ dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := a[63:0]
+ FI
+ dst[127:64] := b[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Fix up the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" using the lower 64-bit integer in "c", store the result in the lower element of
+ "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper element from "b" to the upper element of "dst". "imm8" is used to set the
+ required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ IF k[0]
+ dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := b[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" using the lower 64-bit integer in "c", store the result in the lower element of
+ "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper element from "b" to the upper element of "dst". "imm8" is used to set the
+ required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
+ tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
+ CASE(tsrc[63:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[63:0] := src1[63:0]
+ 1 : dest[63:0] := tsrc[63:0]
+ 2 : dest[63:0] := QNaN(tsrc[63:0])
+ 3 : dest[63:0] := QNAN_Indefinite
+ 4 : dest[63:0] := -INF
+ 5 : dest[63:0] := +INF
+ 6 : dest[63:0] := tsrc.sign? -INF : +INF
+ 7 : dest[63:0] := -0
+ 8 : dest[63:0] := +0
+ 9 : dest[63:0] := -1
+ 10: dest[63:0] := +1
+ 11: dest[63:0] := 1/2
+ 12: dest[63:0] := 90.0
+ 13: dest[63:0] := PI/2
+ 14: dest[63:0] := MAX_FLOAT
+ 15: dest[63:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[63:0]
+ }
+ IF k[0]
+ dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := b[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" using the lower 32-bit integer in "c", store the result in the lower element of
+ "dst", and copy the upper 3 packed elements from "b" to the upper elements of "dst".
+ "imm8" is used to set the required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
+ dst[127:32] := b[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Fix up the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" using the lower 32-bit integer in "c", store the result in the lower element of
+ "dst", and copy the upper 3 packed elements from "b" to the upper elements of "dst".
+ "imm8" is used to set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
+ dst[127:32] := b[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Fix up the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" using the lower 32-bit integer in "c", store the result in the lower element of
+ "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set),
+ and copy the upper 3 packed elements from "b" to the upper elements of "dst". "imm8" is
+ used to set the required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ IF k[0]
+ dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := a[31:0]
+ FI
+ dst[127:32] := b[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" using the lower 32-bit integer in "c", store the result in the lower element of
+ "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set),
+ and copy the upper 3 packed elements from "b" to the upper elements of "dst". "imm8" is
+ used to set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ IF k[0]
+ dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := a[31:0]
+ FI
+ dst[127:32] := b[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Fix up the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" using the lower 32-bit integer in "c", store the result in the lower element of
+ "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 3 packed elements from "b" to the upper elements of "dst". "imm8" is used
+ to set the required flags reporting.
+ [sae_note]
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ IF k[0]
+ dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := b[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Fix up the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" using the lower 32-bit integer in "c", store the result in the lower element of
+ "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 3 packed elements from "b" to the upper elements of "dst". "imm8" is used
+ to set the required flags reporting.
+ enum TOKEN_TYPE {
+ QNAN_TOKEN := 0, \
+ SNAN_TOKEN := 1, \
+ ZERO_VALUE_TOKEN := 2, \
+ ONE_VALUE_TOKEN := 3, \
+ NEG_INF_TOKEN := 4, \
+ POS_INF_TOKEN := 5, \
+ NEG_VALUE_TOKEN := 6, \
+ POS_VALUE_TOKEN := 7
+ }
+ DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
+ tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
+ CASE(tsrc[31:0]) OF
+ QNAN_TOKEN:j := 0
+ SNAN_TOKEN:j := 1
+ ZERO_VALUE_TOKEN: j := 2
+ ONE_VALUE_TOKEN: j := 3
+ NEG_INF_TOKEN: j := 4
+ POS_INF_TOKEN: j := 5
+ NEG_VALUE_TOKEN: j := 6
+ POS_VALUE_TOKEN: j := 7
+ ESAC
+
+ token_response[3:0] := src3[3+4*j:4*j]
+
+ CASE(token_response[3:0]) OF
+ 0 : dest[31:0] := src1[31:0]
+ 1 : dest[31:0] := tsrc[31:0]
+ 2 : dest[31:0] := QNaN(tsrc[31:0])
+ 3 : dest[31:0] := QNAN_Indefinite
+ 4 : dest[31:0] := -INF
+ 5 : dest[31:0] := +INF
+ 6 : dest[31:0] := tsrc.sign? -INF : +INF
+ 7 : dest[31:0] := -0
+ 8 : dest[31:0] := +0
+ 9 : dest[31:0] := -1
+ 10: dest[31:0] := +1
+ 11: dest[31:0] := 1/2
+ 12: dest[31:0] := 90.0
+ 13: dest[31:0] := PI/2
+ 14: dest[31:0] := MAX_FLOAT
+ 15: dest[31:0] := -MAX_FLOAT
+ ESAC
+
+ CASE(tsrc[31:0]) OF
+ ZERO_VALUE_TOKEN:
+ IF (imm8[0]) #ZE; FI
+ ZERO_VALUE_TOKEN:
+ IF (imm8[1]) #IE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[2]) #ZE; FI
+ ONE_VALUE_TOKEN:
+ IF (imm8[3]) #IE; FI
+ SNAN_TOKEN:
+ IF (imm8[4]) #IE; FI
+ NEG_INF_TOKEN:
+ IF (imm8[5]) #IE; FI
+ NEG_VALUE_TOKEN:
+ IF (imm8[6]) #IE; FI
+ POS_INF_TOKEN:
+ IF (imm8[7]) #IE; FI
+ ESAC
+ RETURN dest[31:0]
+ }
+ IF k[0]
+ dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := b[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ [sae_note]
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ [sae_note]
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of the lower double-precision (64-bit) floating-point
+ element in "b" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for the lower element.
+ [sae_note]
+ dst[63:0] := ConvertExpFP64(b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of the lower double-precision (64-bit) floating-point
+ element in "b" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for the lower element.
+ dst[63:0] := ConvertExpFP64(b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Convert the exponent of the lower double-precision (64-bit) floating-point
+ element in "b" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using writemask "k"
+ (the element is copied from "src" when mask bit 0 is not set), and copy the upper
+ element from "a" to the upper element of "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for the lower element.
+ [sae_note]
+ IF k[0]
+ dst[63:0] := ConvertExpFP64(b[63:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Convert the exponent of the lower double-precision (64-bit) floating-point
+ element in "b" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using writemask "k"
+ (the element is copied from "src" when mask bit 0 is not set), and copy the upper
+ element from "a" to the upper element of "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for the lower element.
+ IF k[0]
+ dst[63:0] := ConvertExpFP64(b[63:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Convert the exponent of the lower double-precision (64-bit) floating-point
+ element in "b" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst". This intrinsic essentially calculates "floor(log2(x))"
+ for the lower element.
+ [sae_note]
+ IF k[0]
+ dst[63:0] := ConvertExpFP64(b[63:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of the lower double-precision (64-bit) floating-point
+ element in "b" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst". This intrinsic essentially calculates "floor(log2(x))"
+ for the lower element.
+ IF k[0]
+ dst[63:0] := ConvertExpFP64(b[63:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of the lower single-precision (32-bit) floating-point
+ element in "b" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst", and copy the upper 3
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "floor(log2(x))" for the lower element.
+ [sae_note]
+ dst[31:0] := ConvertExpFP32(b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of the lower single-precision (32-bit) floating-point
+ element in "b" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst", and copy the upper 3
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "floor(log2(x))" for the lower element.
+ dst[31:0] := ConvertExpFP32(b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Convert the exponent of the lower single-precision (32-bit) floating-point
+ element in "b" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using writemask "k"
+ (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "floor(log2(x))" for the lower element.
+ [sae_note]
+ IF k[0]
+ dst[31:0] := ConvertExpFP32(b[31:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Convert the exponent of the lower single-precision (32-bit) floating-point
+ element in "b" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using writemask "k"
+ (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "floor(log2(x))" for the lower element.
+ IF k[0]
+ dst[31:0] := ConvertExpFP32(b[31:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Convert the exponent of the lower single-precision (32-bit) floating-point
+ element in "b" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for the lower element.
+ [sae_note]
+ IF k[0]
+ dst[31:0] := ConvertExpFP32(b[31:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of the lower single-precision (32-bit) floating-point
+ element in "b" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for the lower element.
+ IF k[0]
+ dst[31:0] := ConvertExpFP32(b[31:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper element
+ from "a" to the upper element of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ IF k[0]
+ dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper element
+ from "a" to the upper element of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ IF k[0]
+ dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ IF k[0]
+ dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ IF k[0]
+ dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower single-precision (32-bit) floating-point
+ element in "b", store the result in the lower element of "dst", and copy the upper 3
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower single-precision (32-bit) floating-point
+ element in "b", store the result in the lower element of "dst", and copy the upper 3
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower single-precision (32-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ IF k[0]
+ dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower single-precision (32-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ IF k[0]
+ dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower single-precision (32-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ IF k[0]
+ dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower single-precision (32-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ IF k[0]
+ dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed double-precision (64-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed single-precision (32-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Round the lower double-precision (64-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set),
+ and copy the upper element from "a" to the upper element of "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ IF k[0]
+ dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Round the lower double-precision (64-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set),
+ and copy the upper element from "a" to the upper element of "dst". [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ IF k[0]
+ dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Round the lower double-precision (64-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper element from "a" to the upper element of "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ IF k[0]
+ dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round the lower double-precision (64-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper element from "a" to the upper element of "dst". [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ IF k[0]
+ dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round the lower double-precision (64-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst", and copy the upper element from "a" to the upper element of "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Round the lower double-precision (64-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst", and copy the upper element from "a" to the upper element of "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
+ m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
+ IF IsInf(tmp[63:0])
+ tmp[63:0] := src1[63:0]
+ FI
+ RETURN tmp[63:0]
+ }
+ dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Round the lower single-precision (32-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set),
+ and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ IF k[0]
+ dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Round the lower single-precision (32-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set),
+ and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ IF k[0]
+ dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Round the lower single-precision (32-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ IF k[0]
+ dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round the lower single-precision (32-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ IF k[0]
+ dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round the lower single-precision (32-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Round the lower single-precision (32-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
+ m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
+ IF IsInf(tmp[31:0])
+ tmp[31:0] := src1[31:0]
+ FI
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[31:0]
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper element
+ from "a" to the upper element of "dst".
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ IF k[0]
+ dst[63:0] := SCALE(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper element
+ from "a" to the upper element of "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ IF k[0]
+ dst[63:0] := SCALE(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst".
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ IF k[0]
+ dst[63:0] := SCALE(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ IF k[0]
+ dst[63:0] := SCALE(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst".
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ dst[63:0] := SCALE(a[63:0], b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed double-precision (64-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
+ RETURN dst[63:0]
+ }
+ dst[63:0] := SCALE(a[63:0], b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst".
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[63:0]
+ }
+ IF k[0]
+ dst[31:0] := SCALE(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[63:0]
+ }
+ IF k[0]
+ dst[31:0] := SCALE(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst".
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[63:0]
+ }
+ IF k[0]
+ dst[31:0] := SCALE(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[63:0]
+ }
+ IF k[0]
+ dst[31:0] := SCALE(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst", and copy the upper 3
+ packed elements from "a" to the upper elements of "dst".
+ [round_note]
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[63:0]
+ }
+ dst[31:0] := SCALE(a[31:0], b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst", and copy the upper 3
+ packed elements from "a" to the upper elements of "dst".
+ DEFINE SCALE(src1, src2) {
+ IF (src2 == NaN)
+ IF (src2 == SNaN)
+ RETURN QNAN(src2)
+ FI
+ ELSE IF (src1 == NaN)
+ IF (src1 == SNaN)
+ RETURN QNAN(src1)
+ FI
+ IF (src2 != INF)
+ RETURN QNAN(src1)
+ FI
+ ELSE
+ tmp_src2 := src2
+ tmp_src1 := src1
+ IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
+ tmp_src2 := 0
+ FI
+ IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
+ tmp_src1 := 0
+ FI
+ FI
+ dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
+ RETURN dst[63:0]
+ }
+ dst[31:0] := SCALE(a[31:0], b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+ Broadcast the 4 packed single-precision (32-bit) floating-point elements from
+ "a" to all elements of "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 4)*32
+ dst[i+31:i] := a[n+31:n]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Broadcast the 4 packed single-precision (32-bit) floating-point elements from
+ "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 4)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Broadcast the 4 packed single-precision (32-bit) floating-point elements from
+ "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 4)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+ Broadcast the 4 packed double-precision (64-bit) floating-point elements from
+ "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 4)*64
+ dst[i+63:i] := a[n+63:n]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Broadcast the 4 packed double-precision (64-bit) floating-point elements from
+ "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 4)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Broadcast the 4 packed double-precision (64-bit) floating-point elements from
+ "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 4)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+ Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 4)*32
+ dst[i+31:i] := a[n+31:n]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 4)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ n := (j % 4)*32
+ IF k[j]
+ dst[i+31:i] := a[n+31:n]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+ Broadcast the 4 packed 64-bit integers from "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 4)*64
+ dst[i+63:i] := a[n+63:n]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Broadcast the 4 packed 64-bit integers from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 4)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Broadcast the 4 packed 64-bit integers from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ n := (j % 4)*64
+ IF k[j]
+ dst[i+63:i] := a[n+63:n]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+ Broadcast the low double-precision (64-bit) floating-point element from "a" to
+ all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Broadcast the low double-precision (64-bit) floating-point element from "a" to
+ all elements of "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Broadcast the low double-precision (64-bit) floating-point element from "a" to
+ all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+ Broadcast the low single-precision (32-bit) floating-point element from "a" to
+ all elements of "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Broadcast the low single-precision (32-bit) floating-point element from "a" to
+ all elements of "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Broadcast the low single-precision (32-bit) floating-point element from "a" to
+ all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Contiguously store the active double-precision (64-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to "dst", and pass through
+ the remaining elements from "src".
+
+ size := 64
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := src[511:m]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Contiguously store the active double-precision (64-bit) floating-point elements
+ in "a" (those with their respective bit set in zeromask "k") to "dst", and set the
+ remaining elements to zero.
+
+ size := 64
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := 0
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Contiguously store the active single-precision (32-bit) floating-point elements
+ in "a" (those with their respective bit set in writemask "k") to "dst", and pass through
+ the remaining elements from "src".
+
+ size := 32
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := src[511:m]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Contiguously store the active single-precision (32-bit) floating-point elements
+ in "a" (those with their respective bit set in zeromask "k") to "dst", and set the
+ remaining elements to zero.
+
+ size := 32
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := 0
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Load contiguous active double-precision (64-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Load contiguous active single-precision (32-bit) floating-point elements from
+ "a" (those with their respective bit set in mask "k"), and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from "a", selected with "imm8", and store the result in "dst".
+
+ CASE imm8[1:0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ 2: dst[127:0] := a[383:256]
+ 3: dst[127:0] := a[511:384]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ CASE imm8[1:0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ 2: tmp[127:0] := a[383:256]
+ 3: tmp[127:0] := a[511:384]
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ CASE imm8[1:0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ 2: tmp[127:0] := a[383:256]
+ 3: tmp[127:0] := a[511:384]
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Extract 256 bits (composed of 4 packed double-precision (64-bit) floating-point
+ elements) from "a", selected with "imm8", and store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[255:0] := a[255:0]
+ 1: dst[255:0] := a[511:256]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Extract 256 bits (composed of 4 packed double-precision (64-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[255:0] := a[255:0]
+ 1: tmp[255:0] := a[511:256]
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Extract 256 bits (composed of 4 packed double-precision (64-bit) floating-point
+ elements) from "a", selected with "imm8", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[255:0] := a[255:0]
+ 1: tmp[255:0] := a[511:256]
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with
+ "imm8", and store the result in "dst".
+
+ CASE imm8[1:0] OF
+ 0: dst[127:0] := a[127:0]
+ 1: dst[127:0] := a[255:128]
+ 2: dst[127:0] := a[383:256]
+ 3: dst[127:0] := a[511:384]
+ ESAC
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ CASE imm8[1:0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ 2: tmp[127:0] := a[383:256]
+ 3: tmp[127:0] := a[511:384]
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ CASE imm8[1:0] OF
+ 0: tmp[127:0] := a[127:0]
+ 1: tmp[127:0] := a[255:128]
+ 2: tmp[127:0] := a[383:256]
+ 3: tmp[127:0] := a[511:384]
+ ESAC
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Extract 256 bits (composed of 4 packed 64-bit integers) from "a", selected with
+ "imm8", and store the result in "dst".
+
+ CASE imm8[0] OF
+ 0: dst[255:0] := a[255:0]
+ 1: dst[255:0] := a[511:256]
+ ESAC
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Extract 256 bits (composed of 4 packed 64-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[255:0] := a[255:0]
+ 1: tmp[255:0] := a[511:256]
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Extract 256 bits (composed of 4 packed 64-bit integers) from "a", selected with
+ "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ CASE imm8[0] OF
+ 0: tmp[255:0] := a[255:0]
+ 1: tmp[255:0] := a[511:256]
+ ESAC
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits (composed of 4 packed single-precision
+ (32-bit) floating-point elements) from "b" into "dst" at the location specified by
+ "imm8".
+
+ dst[511:0] := a[511:0]
+ CASE (imm8[1:0]) OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ 2: dst[383:256] := b[127:0]
+ 3: dst[511:384] := b[127:0]
+ ESAC
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 4 packed single-precision
+ (32-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[1:0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ 2: tmp[383:256] := b[127:0]
+ 3: tmp[511:384] := b[127:0]
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 4 packed single-precision
+ (32-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[1:0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ 2: tmp[383:256] := b[127:0]
+ 3: tmp[511:384] := b[127:0]
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 256 bits (composed of 4 packed double-precision
+ (64-bit) floating-point elements) from "b" into "dst" at the location specified by
+ "imm8".
+
+ dst[511:0] := a[511:0]
+ CASE (imm8[0]) OF
+ 0: dst[255:0] := b[255:0]
+ 1: dst[511:256] := b[255:0]
+ ESAC
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 256 bits (composed of 4 packed double-precision
+ (64-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[0]) OF
+ 0: tmp[255:0] := b[255:0]
+ 1: tmp[511:256] := b[255:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 256 bits (composed of 4 packed double-precision
+ (64-bit) floating-point elements) from "b" into "tmp" at the location specified by
+ "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[0]) OF
+ 0: tmp[255:0] := b[255:0]
+ 1: tmp[511:256] := b[255:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 128 bits (composed of 4 packed 32-bit integers)
+ from "b" into "dst" at the location specified by "imm8".
+
+ dst[511:0] := a[511:0]
+ CASE (imm8[1:0]) OF
+ 0: dst[127:0] := b[127:0]
+ 1: dst[255:128] := b[127:0]
+ 2: dst[383:256] := b[127:0]
+ 3: dst[511:384] := b[127:0]
+ ESAC
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 4 packed 32-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[1:0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ 2: tmp[383:256] := b[127:0]
+ 3: tmp[511:384] := b[127:0]
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 128 bits (composed of 4 packed 32-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[1:0]) OF
+ 0: tmp[127:0] := b[127:0]
+ 1: tmp[255:128] := b[127:0]
+ 2: tmp[383:256] := b[127:0]
+ 3: tmp[511:384] := b[127:0]
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", then insert 256 bits (composed of 4 packed 64-bit integers)
+ from "b" into "dst" at the location specified by "imm8".
+
+ dst[511:0] := a[511:0]
+ CASE (imm8[0]) OF
+ 0: dst[255:0] := b[255:0]
+ 1: dst[511:256] := b[255:0]
+ ESAC
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 256 bits (composed of 4 packed 64-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[0]) OF
+ 0: tmp[255:0] := b[255:0]
+ 1: tmp[511:256] := b[255:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert 256 bits (composed of 4 packed 64-bit integers)
+ from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ tmp[511:0] := a[511:0]
+ CASE (imm8[0]) OF
+ 0: tmp[255:0] := b[255:0]
+ 1: tmp[511:256] := b[255:0]
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+ Broadcast the low packed 32-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+ Broadcast the low packed 64-bit integer from "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Contiguously store the active 32-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 32
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := src[511:m]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Contiguously store the active 32-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 32
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[m+size-1:m] := a[i+31:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := 0
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Contiguously store the active 64-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 64
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := src[511:m]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Contiguously store the active 64-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 64
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[m+size-1:m] := a[i+63:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := 0
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ id := idx[i+3:i]*32
+ IF k[j]
+ dst[i+31:i] := a[id+31:id]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ id := idx[i+3:i]*32
+ IF k[j]
+ dst[i+31:i] := a[id+31:id]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle 32-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ id := idx[i+3:i]*32
+ dst[i+31:i] := a[id+31:id]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "idx" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ off := idx[i+3:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := idx[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ off := idx[i+3:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ off := idx[i+3:i]*32
+ IF k[j]
+ dst[i+31:i] := (idx[i+4]) ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ off := idx[i+3:i]*32
+ dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask
+ bit is not set)
+
+ FOR j := 0 to 7
+ i := j*64
+ off := idx[i+2:i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := idx[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ off := idx[i+2:i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ off := idx[i+2:i]*64
+ IF k[j]
+ dst[i+63:i] := (idx[i+3]) ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ off := idx[i+2:i]*64
+ dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ off := idx[i+3:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := idx[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ off := idx[i+3:i]*32
+ IF k[j]
+ dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ off := idx[i+3:i]*32
+ IF k[j]
+ dst[i+31:i] := (idx[i+4]) ? b[off+31:off] : a[off+31:off]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ off := idx[i+3:i]*32
+ dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "idx" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ off := idx[i+2:i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := idx[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ off := idx[i+2:i]*64
+ IF k[j]
+ dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ off := idx[i+2:i]*64
+ IF k[j]
+ dst[i+63:i] := (idx[i+3]) ? b[off+63:off] : a[off+63:off]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ off := idx[i+2:i]*64
+ dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
+ IF (imm8[2] == 0) tmp_dst[191:128] := a[191:128]; FI
+ IF (imm8[2] == 1) tmp_dst[191:128] := a[255:192]; FI
+ IF (imm8[3] == 0) tmp_dst[255:192] := a[191:128]; FI
+ IF (imm8[3] == 1) tmp_dst[255:192] := a[255:192]; FI
+ IF (imm8[4] == 0) tmp_dst[319:256] := a[319:256]; FI
+ IF (imm8[4] == 1) tmp_dst[319:256] := a[383:320]; FI
+ IF (imm8[5] == 0) tmp_dst[383:320] := a[319:256]; FI
+ IF (imm8[5] == 1) tmp_dst[383:320] := a[383:320]; FI
+ IF (imm8[6] == 0) tmp_dst[447:384] := a[447:384]; FI
+ IF (imm8[6] == 1) tmp_dst[447:384] := a[511:448]; FI
+ IF (imm8[7] == 0) tmp_dst[511:448] := a[447:384]; FI
+ IF (imm8[7] == 1) tmp_dst[511:448] := a[511:448]; FI
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
+ IF (b[129] == 0) tmp_dst[191:128] := a[191:128]; FI
+ IF (b[129] == 1) tmp_dst[191:128] := a[255:192]; FI
+ IF (b[193] == 0) tmp_dst[255:192] := a[191:128]; FI
+ IF (b[193] == 1) tmp_dst[255:192] := a[255:192]; FI
+ IF (b[257] == 0) tmp_dst[319:256] := a[319:256]; FI
+ IF (b[257] == 1) tmp_dst[319:256] := a[383:320]; FI
+ IF (b[321] == 0) tmp_dst[383:320] := a[319:256]; FI
+ IF (b[321] == 1) tmp_dst[383:320] := a[383:320]; FI
+ IF (b[385] == 0) tmp_dst[447:384] := a[447:384]; FI
+ IF (b[385] == 1) tmp_dst[447:384] := a[511:448]; FI
+ IF (b[449] == 0) tmp_dst[511:448] := a[447:384]; FI
+ IF (b[449] == 1) tmp_dst[511:448] := a[511:448]; FI
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
+ IF (imm8[2] == 0) tmp_dst[191:128] := a[191:128]; FI
+ IF (imm8[2] == 1) tmp_dst[191:128] := a[255:192]; FI
+ IF (imm8[3] == 0) tmp_dst[255:192] := a[191:128]; FI
+ IF (imm8[3] == 1) tmp_dst[255:192] := a[255:192]; FI
+ IF (imm8[4] == 0) tmp_dst[319:256] := a[319:256]; FI
+ IF (imm8[4] == 1) tmp_dst[319:256] := a[383:320]; FI
+ IF (imm8[5] == 0) tmp_dst[383:320] := a[319:256]; FI
+ IF (imm8[5] == 1) tmp_dst[383:320] := a[383:320]; FI
+ IF (imm8[6] == 0) tmp_dst[447:384] := a[447:384]; FI
+ IF (imm8[6] == 1) tmp_dst[447:384] := a[511:448]; FI
+ IF (imm8[7] == 0) tmp_dst[511:448] := a[447:384]; FI
+ IF (imm8[7] == 1) tmp_dst[511:448] := a[511:448]; FI
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
+ IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
+ IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
+ IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
+ IF (b[129] == 0) tmp_dst[191:128] := a[191:128]; FI
+ IF (b[129] == 1) tmp_dst[191:128] := a[255:192]; FI
+ IF (b[193] == 0) tmp_dst[255:192] := a[191:128]; FI
+ IF (b[193] == 1) tmp_dst[255:192] := a[255:192]; FI
+ IF (b[257] == 0) tmp_dst[319:256] := a[319:256]; FI
+ IF (b[257] == 1) tmp_dst[319:256] := a[383:320]; FI
+ IF (b[321] == 0) tmp_dst[383:320] := a[319:256]; FI
+ IF (b[321] == 1) tmp_dst[383:320] := a[383:320]; FI
+ IF (b[385] == 0) tmp_dst[447:384] := a[447:384]; FI
+ IF (b[385] == 1) tmp_dst[447:384] := a[511:448]; FI
+ IF (b[449] == 0) tmp_dst[511:448] := a[447:384]; FI
+ IF (b[449] == 1) tmp_dst[511:448] := a[511:448]; FI
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst".
+
+ IF (imm8[0] == 0) dst[63:0] := a[63:0]; FI
+ IF (imm8[0] == 1) dst[63:0] := a[127:64]; FI
+ IF (imm8[1] == 0) dst[127:64] := a[63:0]; FI
+ IF (imm8[1] == 1) dst[127:64] := a[127:64]; FI
+ IF (imm8[2] == 0) dst[191:128] := a[191:128]; FI
+ IF (imm8[2] == 1) dst[191:128] := a[255:192]; FI
+ IF (imm8[3] == 0) dst[255:192] := a[191:128]; FI
+ IF (imm8[3] == 1) dst[255:192] := a[255:192]; FI
+ IF (imm8[4] == 0) dst[319:256] := a[319:256]; FI
+ IF (imm8[4] == 1) dst[319:256] := a[383:320]; FI
+ IF (imm8[5] == 0) dst[383:320] := a[319:256]; FI
+ IF (imm8[5] == 1) dst[383:320] := a[383:320]; FI
+ IF (imm8[6] == 0) dst[447:384] := a[447:384]; FI
+ IF (imm8[6] == 1) dst[447:384] := a[511:448]; FI
+ IF (imm8[7] == 0) dst[511:448] := a[447:384]; FI
+ IF (imm8[7] == 1) dst[511:448] := a[511:448]; FI
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst".
+
+ IF (b[1] == 0) dst[63:0] := a[63:0]; FI
+ IF (b[1] == 1) dst[63:0] := a[127:64]; FI
+ IF (b[65] == 0) dst[127:64] := a[63:0]; FI
+ IF (b[65] == 1) dst[127:64] := a[127:64]; FI
+ IF (b[129] == 0) dst[191:128] := a[191:128]; FI
+ IF (b[129] == 1) dst[191:128] := a[255:192]; FI
+ IF (b[193] == 0) dst[255:192] := a[191:128]; FI
+ IF (b[193] == 1) dst[255:192] := a[255:192]; FI
+ IF (b[257] == 0) dst[319:256] := a[319:256]; FI
+ IF (b[257] == 1) dst[319:256] := a[383:320]; FI
+ IF (b[321] == 0) dst[383:320] := a[319:256]; FI
+ IF (b[321] == 1) dst[383:320] := a[383:320]; FI
+ IF (b[385] == 0) dst[447:384] := a[447:384]; FI
+ IF (b[385] == 1) dst[447:384] := a[511:448]; FI
+ IF (b[449] == 0) dst[511:448] := a[447:384]; FI
+ IF (b[449] == 1) dst[511:448] := a[511:448]; FI
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
+ tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
+ tmp_dst[351:320] := SELECT4(a[383:256], imm8[5:4])
+ tmp_dst[383:352] := SELECT4(a[383:256], imm8[7:6])
+ tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
+ tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
+ tmp_dst[479:448] := SELECT4(a[511:384], imm8[5:4])
+ tmp_dst[511:480] := SELECT4(a[511:384], imm8[7:6])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
+ tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
+ tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
+ tmp_dst[159:128] := SELECT4(a[255:128], b[129:128])
+ tmp_dst[191:160] := SELECT4(a[255:128], b[161:160])
+ tmp_dst[223:192] := SELECT4(a[255:128], b[193:192])
+ tmp_dst[255:224] := SELECT4(a[255:128], b[225:224])
+ tmp_dst[287:256] := SELECT4(a[383:256], b[257:256])
+ tmp_dst[319:288] := SELECT4(a[383:256], b[289:288])
+ tmp_dst[351:320] := SELECT4(a[383:256], b[321:320])
+ tmp_dst[383:352] := SELECT4(a[383:256], b[353:352])
+ tmp_dst[415:384] := SELECT4(a[511:384], b[385:384])
+ tmp_dst[447:416] := SELECT4(a[511:384], b[417:416])
+ tmp_dst[479:448] := SELECT4(a[511:384], b[449:448])
+ tmp_dst[511:480] := SELECT4(a[511:384], b[481:480])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
+ tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
+ tmp_dst[351:320] := SELECT4(a[383:256], imm8[5:4])
+ tmp_dst[383:352] := SELECT4(a[383:256], imm8[7:6])
+ tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
+ tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
+ tmp_dst[479:448] := SELECT4(a[511:384], imm8[5:4])
+ tmp_dst[511:480] := SELECT4(a[511:384], imm8[7:6])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
+ tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
+ tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
+ tmp_dst[159:128] := SELECT4(a[255:128], b[129:128])
+ tmp_dst[191:160] := SELECT4(a[255:128], b[161:160])
+ tmp_dst[223:192] := SELECT4(a[255:128], b[193:192])
+ tmp_dst[255:224] := SELECT4(a[255:128], b[225:224])
+ tmp_dst[287:256] := SELECT4(a[383:256], b[257:256])
+ tmp_dst[319:288] := SELECT4(a[383:256], b[289:288])
+ tmp_dst[351:320] := SELECT4(a[383:256], b[321:320])
+ tmp_dst[383:352] := SELECT4(a[383:256], b[353:352])
+ tmp_dst[415:384] := SELECT4(a[511:384], b[385:384])
+ tmp_dst[447:416] := SELECT4(a[511:384], b[417:416])
+ tmp_dst[479:448] := SELECT4(a[511:384], b[449:448])
+ tmp_dst[511:480] := SELECT4(a[511:384], b[481:480])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ dst[287:256] := SELECT4(a[383:256], imm8[1:0])
+ dst[319:288] := SELECT4(a[383:256], imm8[3:2])
+ dst[351:320] := SELECT4(a[383:256], imm8[5:4])
+ dst[383:352] := SELECT4(a[383:256], imm8[7:6])
+ dst[415:384] := SELECT4(a[511:384], imm8[1:0])
+ dst[447:416] := SELECT4(a[511:384], imm8[3:2])
+ dst[479:448] := SELECT4(a[511:384], imm8[5:4])
+ dst[511:480] := SELECT4(a[511:384], imm8[7:6])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "b", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], b[1:0])
+ dst[63:32] := SELECT4(a[127:0], b[33:32])
+ dst[95:64] := SELECT4(a[127:0], b[65:64])
+ dst[127:96] := SELECT4(a[127:0], b[97:96])
+ dst[159:128] := SELECT4(a[255:128], b[129:128])
+ dst[191:160] := SELECT4(a[255:128], b[161:160])
+ dst[223:192] := SELECT4(a[255:128], b[193:192])
+ dst[255:224] := SELECT4(a[255:128], b[225:224])
+ dst[287:256] := SELECT4(a[383:256], b[257:256])
+ dst[319:288] := SELECT4(a[383:256], b[289:288])
+ dst[351:320] := SELECT4(a[383:256], b[321:320])
+ dst[383:352] := SELECT4(a[383:256], b[353:352])
+ dst[415:384] := SELECT4(a[511:384], b[385:384])
+ dst[447:416] := SELECT4(a[511:384], b[417:416])
+ dst[479:448] := SELECT4(a[511:384], b[449:448])
+ dst[511:480] := SELECT4(a[511:384], b[481:480])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 256-bit
+ lanes using the control in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ tmp_dst[319:256] := SELECT4(a[511:256], imm8[1:0])
+ tmp_dst[383:320] := SELECT4(a[511:256], imm8[3:2])
+ tmp_dst[447:384] := SELECT4(a[511:256], imm8[5:4])
+ tmp_dst[511:448] := SELECT4(a[511:256], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ id := idx[i+2:i]*64
+ IF k[j]
+ dst[i+63:i] := a[id+63:id]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 256-bit
+ lanes using the control in "imm8", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ tmp_dst[319:256] := SELECT4(a[511:256], imm8[1:0])
+ tmp_dst[383:320] := SELECT4(a[511:256], imm8[3:2])
+ tmp_dst[447:384] := SELECT4(a[511:256], imm8[5:4])
+ tmp_dst[511:448] := SELECT4(a[511:256], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ id := idx[i+2:i]*64
+ IF k[j]
+ dst[i+63:i] := a[id+63:id]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" within 256-bit
+ lanes using the control in "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ dst[319:256] := SELECT4(a[511:256], imm8[1:0])
+ dst[383:320] := SELECT4(a[511:256], imm8[3:2])
+ dst[447:384] := SELECT4(a[511:256], imm8[5:4])
+ dst[511:448] := SELECT4(a[511:256], imm8[7:6])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ id := idx[i+2:i]*64
+ dst[i+63:i] := a[id+63:id]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ id := idx[i+3:i]*32
+ IF k[j]
+ dst[i+31:i] := a[id+31:id]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ id := idx[i+3:i]*32
+ IF k[j]
+ dst[i+31:i] := a[id+31:id]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx".
+
+ FOR j := 0 to 15
+ i := j*32
+ id := idx[i+3:i]*32
+ dst[i+31:i] := a[id+31:id]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" within 256-bit lanes using the control in
+ "imm8", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ tmp_dst[319:256] := SELECT4(a[511:256], imm8[1:0])
+ tmp_dst[383:320] := SELECT4(a[511:256], imm8[3:2])
+ tmp_dst[447:384] := SELECT4(a[511:256], imm8[5:4])
+ tmp_dst[511:448] := SELECT4(a[511:256], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ id := idx[i+2:i]*64
+ IF k[j]
+ dst[i+63:i] := a[id+63:id]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" within 256-bit lanes using the control in
+ "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ tmp_dst[319:256] := SELECT4(a[511:256], imm8[1:0])
+ tmp_dst[383:320] := SELECT4(a[511:256], imm8[3:2])
+ tmp_dst[447:384] := SELECT4(a[511:256], imm8[5:4])
+ tmp_dst[511:448] := SELECT4(a[511:256], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 64-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ id := idx[i+2:i]*64
+ IF k[j]
+ dst[i+63:i] := a[id+63:id]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle 64-bit integers in "a" within 256-bit lanes using the control in
+ "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[63:0] := src[63:0]
+ 1: tmp[63:0] := src[127:64]
+ 2: tmp[63:0] := src[191:128]
+ 3: tmp[63:0] := src[255:192]
+ ESAC
+ RETURN tmp[63:0]
+ }
+ dst[63:0] := SELECT4(a[255:0], imm8[1:0])
+ dst[127:64] := SELECT4(a[255:0], imm8[3:2])
+ dst[191:128] := SELECT4(a[255:0], imm8[5:4])
+ dst[255:192] := SELECT4(a[255:0], imm8[7:6])
+ dst[319:256] := SELECT4(a[511:256], imm8[1:0])
+ dst[383:320] := SELECT4(a[511:256], imm8[3:2])
+ dst[447:384] := SELECT4(a[511:256], imm8[5:4])
+ dst[511:448] := SELECT4(a[511:256], imm8[7:6])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle 64-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ id := idx[i+2:i]*64
+ dst[i+63:i] := a[id+63:id]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Load contiguous active 32-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Load contiguous active 32-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[m+31:m]
+ m := m + 32
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Load contiguous active 64-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Load contiguous active 64-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[m+63:m]
+ m := m + 64
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" within 128-bit lanes using the control in
+ "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
+ tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
+ tmp_dst[351:320] := SELECT4(a[383:256], imm8[5:4])
+ tmp_dst[383:352] := SELECT4(a[383:256], imm8[7:6])
+ tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
+ tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
+ tmp_dst[479:448] := SELECT4(a[511:384], imm8[5:4])
+ tmp_dst[511:480] := SELECT4(a[511:384], imm8[7:6])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the high half of each 128-bit lane
+ in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the low half of each 128-bit lane in
+ "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point
+ elements) selected by "imm8" from "a" and "b", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a"
+ and "b", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[127:0] := src[127:0]
+ 1: tmp[127:0] := src[255:128]
+ 2: tmp[127:0] := src[383:256]
+ 3: tmp[127:0] := src[511:384]
+ ESAC
+ RETURN tmp[127:0]
+ }
+ dst[127:0] := SELECT4(a[511:0], imm8[1:0])
+ dst[255:128] := SELECT4(a[511:0], imm8[3:2])
+ dst[383:256] := SELECT4(b[511:0], imm8[5:4])
+ dst[511:384] := SELECT4(b[511:0], imm8[7:6])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes
+ using the control in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
+ tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
+ tmp_dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
+ tmp_dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
+ tmp_dst[319:256] := (imm8[4] == 0) ? a[319:256] : a[383:320]
+ tmp_dst[383:320] := (imm8[5] == 0) ? b[319:256] : b[383:320]
+ tmp_dst[447:384] := (imm8[6] == 0) ? a[447:384] : a[511:448]
+ tmp_dst[511:448] := (imm8[7] == 0) ? b[447:384] : b[511:448]
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes
+ using the control in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
+ tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
+ tmp_dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
+ tmp_dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
+ tmp_dst[319:256] := (imm8[4] == 0) ? a[319:256] : a[383:320]
+ tmp_dst[383:320] := (imm8[5] == 0) ? b[319:256] : b[383:320]
+ tmp_dst[447:384] := (imm8[6] == 0) ? a[447:384] : a[511:448]
+ tmp_dst[511:448] := (imm8[7] == 0) ? b[447:384] : b[511:448]
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes
+ using the control in "imm8", and store the results in "dst".
+
+ dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
+ dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
+ dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
+ dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
+ dst[319:256] := (imm8[4] == 0) ? a[319:256] : a[383:320]
+ dst[383:320] := (imm8[5] == 0) ? b[319:256] : b[383:320]
+ dst[447:384] := (imm8[6] == 0) ? a[447:384] : a[511:448]
+ dst[511:448] := (imm8[7] == 0) ? b[447:384] : b[511:448]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(b[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(b[255:128], imm8[7:6])
+ tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
+ tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
+ tmp_dst[351:320] := SELECT4(b[383:256], imm8[5:4])
+ tmp_dst[383:352] := SELECT4(b[383:256], imm8[7:6])
+ tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
+ tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
+ tmp_dst[479:448] := SELECT4(b[511:384], imm8[5:4])
+ tmp_dst[511:480] := SELECT4(b[511:384], imm8[7:6])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(b[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(b[255:128], imm8[7:6])
+ tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
+ tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
+ tmp_dst[351:320] := SELECT4(b[383:256], imm8[5:4])
+ tmp_dst[383:352] := SELECT4(b[383:256], imm8[7:6])
+ tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
+ tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
+ tmp_dst[479:448] := SELECT4(b[511:384], imm8[5:4])
+ tmp_dst[511:480] := SELECT4(b[511:384], imm8[7:6])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit
+ lanes using the control in "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ dst[95:64] := SELECT4(b[127:0], imm8[5:4])
+ dst[127:96] := SELECT4(b[127:0], imm8[7:6])
+ dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ dst[223:192] := SELECT4(b[255:128], imm8[5:4])
+ dst[255:224] := SELECT4(b[255:128], imm8[7:6])
+ dst[287:256] := SELECT4(a[383:256], imm8[1:0])
+ dst[319:288] := SELECT4(a[383:256], imm8[3:2])
+ dst[351:320] := SELECT4(b[383:256], imm8[5:4])
+ dst[383:352] := SELECT4(b[383:256], imm8[7:6])
+ dst[415:384] := SELECT4(a[511:384], imm8[1:0])
+ dst[447:416] := SELECT4(a[511:384], imm8[3:2])
+ dst[479:448] := SELECT4(b[511:384], imm8[5:4])
+ dst[511:480] := SELECT4(b[511:384], imm8[7:6])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp_dst[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ tmp_dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
+ tmp_dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+ dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
+ dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
+ dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", and store the result in mask
+ vector "k". [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ k[0] := ( a[63:0] OP b[63:0] ) ? 1 : 0
+ k[MAX:1] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", and store the result in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ k[0] := ( a[63:0] OP b[63:0] ) ? 1 : 0
+ k[MAX:1] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", and store the result in mask
+ vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
+ [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ IF k1[0]
+ k[0] := ( a[63:0] OP b[63:0] ) ? 1 : 0
+ ELSE
+ k[0] := 0
+ FI
+ k[MAX:1] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", and store the result in mask
+ vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ IF k1[0]
+ k[0] := ( a[63:0] OP b[63:0] ) ? 1 : 0
+ ELSE
+ k[0] := 0
+ FI
+ k[MAX:1] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", and store the result in mask
+ vector "k". [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ k[0] := ( a[31:0] OP b[31:0] ) ? 1 : 0
+ k[MAX:1] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", and store the result in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ k[0] := ( a[31:0] OP b[31:0] ) ? 1 : 0
+ k[MAX:1] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", and store the result in mask
+ vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
+ [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ IF k1[0]
+ k[0] := ( a[31:0] OP b[31:0] ) ? 1 : 0
+ ELSE
+ k[0] := 0
+ FI
+ k[MAX:1] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", and store the result in mask
+ vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ IF k1[0]
+ k[0] := ( a[31:0] OP b[31:0] ) ? 1 : 0
+ ELSE
+ k[0] := 0
+ FI
+ k[MAX:1] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", and return the boolean result
+ (0 or 1). [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ RETURN ( a[63:0] OP b[63:0] ) ? 1 : 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" based on the comparison operand specified by "imm8", and return the boolean result
+ (0 or 1). [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ RETURN ( a[31:0] OP b[31:0] ) ? 1 : 0
+
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed 64-bit integers in "a" and "b" for equality, and store the
+ results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed 64-bit integers in "a" and "b" for equality, and store the
+ results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*64
+ dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*64
+ IF k[j]
+ dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
+ ELSE
+ dst[m+63:m] := src[m+63:m]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*64
+ IF k[j]
+ dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
+ ELSE
+ dst[m+63:m] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_Int32(a[k+63:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_Int32(a[k+63:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in
+ "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_FP32(a[k+63:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_FP32(a[k+63:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[k+63:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[k+63:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst".
+ [sae_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*16
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*16
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [sae_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed double-precision (64-bit) floating-point elements, and store the results in
+ "dst". [sae_note]
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 32*j
+ dst[i+63:i] := Convert_FP32_To_FP64(a[k+31:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed double-precision (64-bit) floating-point elements, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 32*j
+ dst[i+63:i] := Convert_FP32_To_FP64(a[k+31:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed double-precision (64-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). [sae_note]
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_FP64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed double-precision (64-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_FP64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed double-precision (64-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_FP64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed double-precision (64-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := Convert_FP32_To_FP64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+ [round2_note]
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 32*j
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+ [round2_note]
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 32*j
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). [round2_note]
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). [round2_note]
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round2_note]
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round2_note]
+
+ FOR j := 0 to 15
+ i := 16*j
+ l := 32*j
+ IF k[j]
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 32-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[31:0] := Convert_FP64_To_Int32(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 64-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[63:0] := Convert_FP64_To_Int64(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 32-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[31:0] := Convert_FP64_To_Int32(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 64-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[63:0] := Convert_FP64_To_Int64(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 32-bit integer, and store the result in "dst".
+
+ dst[31:0] := Convert_FP64_To_Int32(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 64-bit integer, and store the result in "dst".
+
+ dst[63:0] := Convert_FP64_To_Int64(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := Convert_FP64_To_FP32(b[63:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := Convert_FP64_To_FP32(b[63:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := Convert_FP64_To_FP32(b[63:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := Convert_FP64_To_FP32(b[63:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 3 packed elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := Convert_FP64_To_FP32(b[63:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to an
+ unsigned 32-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[31:0] := Convert_FP64_To_UInt32(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to an
+ unsigned 64-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[63:0] := Convert_FP64_To_UInt64(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to an
+ unsigned 32-bit integer, and store the result in "dst".
+
+ dst[31:0] := Convert_FP64_To_UInt32(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to an
+ unsigned 64-bit integer, and store the result in "dst".
+
+ dst[63:0] := Convert_FP64_To_UInt64(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the signed 64-bit integer "b" to a double-precision (64-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+ [round_note]
+
+ dst[63:0] := Convert_Int64_To_FP64(b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the signed 64-bit integer "b" to a double-precision (64-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+ [round_note]
+
+ dst[63:0] := Convert_Int64_To_FP64(b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the signed 32-bit integer "b" to a double-precision (64-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := Convert_Int32_To_FP64(b[31:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the signed 64-bit integer "b" to a double-precision (64-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := Convert_Int64_To_FP64(b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the signed 32-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := Convert_Int32_To_FP32(b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the signed 64-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := Convert_Int64_To_FP32(b[63:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the signed 32-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := Convert_Int32_To_FP32(b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the signed 64-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := Convert_Int64_To_FP32(b[63:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the signed 32-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := Convert_Int32_To_FP32(b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the signed 64-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := Convert_Int64_To_FP32(b[63:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst", and copy the upper element from "a" to the upper element of "dst".
+ [sae_note]
+
+ dst[63:0] := Convert_FP32_To_FP64(b[31:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper element from "a" to the upper element of "dst".
+ [sae_note]
+
+ IF k[0]
+ dst[63:0] := Convert_FP32_To_FP64(b[31:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := Convert_FP32_To_FP64(b[31:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper element from "a" to the upper element of "dst".
+ [sae_note]
+
+ IF k[0]
+ dst[63:0] := Convert_FP32_To_FP64(b[31:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := Convert_FP32_To_FP64(b[31:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 32-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[31:0] := Convert_FP32_To_Int32(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 64-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[63:0] := Convert_FP32_To_Int64(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 32-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[31:0] := Convert_FP32_To_Int32(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 64-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[63:0] := Convert_FP32_To_Int64(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 32-bit integer, and store the result in "dst".
+
+ dst[31:0] := Convert_FP32_To_Int32(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 64-bit integer, and store the result in "dst".
+
+ dst[63:0] := Convert_FP32_To_Int64(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to an
+ unsigned 32-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[31:0] := Convert_FP32_To_UInt32(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to an
+ unsigned 64-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst[63:0] := Convert_FP32_To_UInt64(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to an
+ unsigned 32-bit integer, and store the result in "dst".
+
+ dst[31:0] := Convert_FP32_To_UInt32(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to an
+ unsigned 64-bit integer, and store the result in "dst".
+
+ dst[63:0] := Convert_FP32_To_UInt64(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst". [sae_note]
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[k+63:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[k+63:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst".
+ [sae_note]
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[k+63:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[k+63:k])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [sae_note]
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 32*j
+ l := 64*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst". [sae_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst".
+ [sae_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [sae_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (32-bit) floating-point elements in "a" to
+ packed unsigned 32-bit integers with truncation, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 32-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[31:0] := Convert_FP64_To_Int32_Truncate(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 64-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 32-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[31:0] := Convert_FP64_To_Int32_Truncate(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 64-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 32-bit integer with truncation, and store the result in "dst".
+
+ dst[31:0] := Convert_FP64_To_Int32_Truncate(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 64-bit integer with truncation, and store the result in "dst".
+
+ dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to an
+ unsigned 32-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[31:0] := Convert_FP64_To_UInt32_Truncate(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to an
+ unsigned 64-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[63:0] := Convert_FP64_To_UInt64_Truncate(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to an
+ unsigned 32-bit integer with truncation, and store the result in "dst".
+
+ dst[31:0] := Convert_FP64_To_UInt32_Truncate(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to an
+ unsigned 64-bit integer with truncation, and store the result in "dst".
+
+ dst[63:0] := Convert_FP64_To_UInt64_Truncate(a[63:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 32-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 64-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[63:0] := Convert_FP32_To_Int64_Truncate(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 32-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 64-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[63:0] := Convert_FP32_To_Int64_Truncate(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 32-bit integer with truncation, and store the result in "dst".
+
+ dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 64-bit integer with truncation, and store the result in "dst".
+
+ dst[63:0] := Convert_FP32_To_Int64_Truncate(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to an
+ unsigned 32-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[31:0] := Convert_FP32_To_UInt32_Truncate(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to an
+ unsigned 64-bit integer with truncation, and store the result in "dst".
+ [sae_note]
+
+ dst[63:0] := Convert_FP32_To_UInt64_Truncate(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to an
+ unsigned 32-bit integer with truncation, and store the result in "dst".
+
+ dst[31:0] := Convert_FP32_To_UInt32_Truncate(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to an
+ unsigned 64-bit integer with truncation, and store the result in "dst".
+
+ dst[63:0] := Convert_FP32_To_UInt64_Truncate(a[31:0])
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ IF k[j]
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the unsigned 64-bit integer "b" to a double-precision (64-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+ [round_note]
+
+ dst[63:0] := Convert_Int64_To_FP64(b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the unsigned 32-bit integer "b" to a double-precision (64-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := Convert_Int32_To_FP64(b[31:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the unsigned 64-bit integer "b" to a double-precision (64-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := Convert_Int64_To_FP64(b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the unsigned 32-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := Convert_Int32_To_FP32(b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert the unsigned 64-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := Convert_Int64_To_FP32(b[63:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the unsigned 32-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := Convert_Int32_To_FP32(b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert the unsigned 64-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := Convert_Int64_To_FP32(b[63:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ k := 8*j
+ dst[k+7:k] := Truncate8(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the active results (those with their respective bit set in writemask "k") to
+ unaligned memory at "base_addr".
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ k := 16*j
+ dst[k+15:k] := Truncate16(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed 32-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 8*j
+ dst[k+7:k] := Truncate8(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the active results (those with their respective bit set in writemask "k") to
+ unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Truncate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 32*j
+ dst[k+31:k] := Truncate32(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Truncate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ MEM[base_addr+l+31:base_addr+l] := Truncate32(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 32-bit integers with
+ truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Truncate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 16*j
+ dst[k+15:k] := Truncate16(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed 64-bit integers in "a" to packed 16-bit integers with
+ truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Truncate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ k := 8*j
+ dst[k+7:k] := Saturate8(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ k := 16*j
+ dst[k+15:k] := Saturate16(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 8*j
+ dst[k+7:k] := Saturate8(a[i+63:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 8-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := Saturate8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 32*j
+ dst[k+31:k] := Saturate32(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Saturate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ MEM[base_addr+l+31:base_addr+l] := Saturate32(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 32-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := Saturate32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 16*j
+ dst[k+15:k] := Saturate16(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the active results (those with their respective bit set in
+ writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed 16-bit integers with
+ signed saturation, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := Saturate16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ k := 8*j
+ dst[i+31:i] := SignExtend32(a[k+7:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 8*j
+ dst[i+63:i] := SignExtend64(a[k+7:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 32*j
+ dst[i+63:i] := SignExtend64(a[k+31:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ k := 16*j
+ dst[i+31:i] := SignExtend32(a[k+15:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ l := j*16
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[i+31:i] := SignExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 16*j
+ dst[i+63:i] := SignExtend64(a[k+15:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := SignExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ k := 8*j
+ dst[k+7:k] := SaturateU8(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed 8-bit integers with
+ unsigned saturation, and store the active results (those with their respective bit set
+ in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+31:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ k := 16*j
+ dst[k+15:k] := SaturateU16(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed 16-bit integers with
+ unsigned saturation, and store the active results (those with their respective bit set
+ in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+31:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+31:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 8*j
+ dst[k+7:k] := SaturateU8(a[i+63:i])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := src[l+7:l]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed 8-bit integers with
+ unsigned saturation, and store the active results (those with their respective bit set
+ in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[l+7:l] := SaturateU8(a[i+63:i])
+ ELSE
+ dst[l+7:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 32*j
+ dst[k+31:k] := SaturateU32(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := SaturateU32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed 32-bit integers with
+ unsigned saturation, and store the active results (those with their respective bit set
+ in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ MEM[base_addr+l+31:base_addr+l] := SaturateU32(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[l+31:l] := SaturateU32(a[i+63:i])
+ ELSE
+ dst[l+31:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 16*j
+ dst[k+15:k] := SaturateU16(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := src[l+15:l]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+ Store
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed 16-bit integers with
+ unsigned saturation, and store the active results (those with their respective bit set
+ in writemask "k") to unaligned memory at "base_addr".
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+63:i])
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit
+ integers with unsigned saturation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[l+15:l] := SaturateU16(a[i+63:i])
+ ELSE
+ dst[l+15:l] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ k := 8*j
+ dst[i+31:i] := ZeroExtend32(a[k+7:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 8*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+7:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 8 byte sof "a" to packed
+ 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 8*j
+ dst[i+63:i] := ZeroExtend64(a[k+7:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 8 bytes of "a" to packed
+ 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 8 bytes of "a" to packed
+ 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 8*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+7:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 32*j
+ dst[i+63:i] := ZeroExtend64(a[k+31:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 32*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+31:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := 32*j
+ k := 16*j
+ dst[i+31:i] := ZeroExtend32(a[k+15:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := 32*j
+ l := 16*j
+ IF k[j]
+ dst[i+31:i] := ZeroExtend32(a[l+15:l])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := 64*j
+ k := 16*j
+ dst[i+63:i] := ZeroExtend64(a[k+15:k])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := 64*j
+ l := 16*j
+ IF k[j]
+ dst[i+63:i] := ZeroExtend64(a[l+15:l])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Copy the lower single-precision (32-bit) floating-point element of "a" to
+ "dst".
+
+ dst[31:0] := a[31:0]
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Copy the lower double-precision (64-bit) floating-point element of "a" to
+ "dst".
+
+ dst[63:0] := a[63:0]
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Copy the lower 32-bit integer in "a" to "dst".
+
+ dst[31:0] := a[31:0]
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [sae_note][max_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [sae_note][max_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst". [max_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst". [sae_note][max_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [sae_note][max_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [sae_note][max_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst". [max_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst". [sae_note][max_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper element
+ from "a" to the upper element of "dst". [sae_note][max_float_note]
+
+ IF k[0]
+ dst[63:0] := MAX(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper element
+ from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := MAX(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst". [sae_note][max_float_note]
+
+ IF k[0]
+ dst[63:0] := MAX(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := MAX(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst", and copy the upper element
+ from "a" to the upper element of "dst". [sae_note][max_float_note]
+
+ dst[63:0] := MAX(a[63:0], b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst". [sae_note][max_float_note]
+
+ IF k[0]
+ dst[31:0] := MAX(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := MAX(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst". [sae_note][max_float_note]
+
+ IF k[0]
+ dst[31:0] := MAX(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := MAX(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst", and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst". [sae_note][max_float_note]
+
+ dst[31:0] := MAX(a[31:0], b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [sae_note][min_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [sae_note][min_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst". [min_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst". [sae_note][min_float_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). [sae_note][min_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). [sae_note][min_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst". [min_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst". [sae_note][min_float_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper element
+ from "a" to the upper element of "dst". [sae_note][min_float_note]
+
+ IF k[0]
+ dst[63:0] := MIN(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper element
+ from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := MIN(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst". [sae_note][min_float_note]
+
+ IF k[0]
+ dst[63:0] := MIN(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := MIN(a[63:0], b[63:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" , and copy the upper element
+ from "a" to the upper element of "dst". [sae_note][min_float_note]
+
+ dst[63:0] := MIN(a[63:0], b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst". [sae_note][min_float_note]
+
+ IF k[0]
+ dst[31:0] := MIN(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := MIN(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst". [sae_note][min_float_note]
+
+ IF k[0]
+ dst[31:0] := MIN(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := MIN(a[31:0], b[31:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst", and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst". [sae_note][min_float_note]
+
+ dst[31:0] := MIN(a[31:0], b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Compute the absolute value of packed signed 32-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ABS(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compute the absolute value of packed signed 32-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ABS(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compute the absolute value of packed signed 32-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ABS(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Compute the absolute value of packed signed 64-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ABS(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compute the absolute value of packed signed 64-bit integers in "a", and store
+ the unsigned results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ABS(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compute the absolute value of packed signed 64-bit integers in "a", and store
+ the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ABS(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ maximum values in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 64-bit integers in "a" and "b", and store packed
+ minimum values in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Move packed double-precision (64-bit) floating-point elements from "a" into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+ Move packed single-precision (32-bit) floating-point elements from "a" into
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+ Duplicate even-indexed double-precision (64-bit) floating-point elements from
+ "a", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ tmp[63:0] := a[63:0]
+ tmp[127:64] := a[63:0]
+ tmp[191:128] := a[191:128]
+ tmp[255:192] := a[191:128]
+ tmp[319:256] := a[319:256]
+ tmp[383:320] := a[319:256]
+ tmp[447:384] := a[447:384]
+ tmp[511:448] := a[447:384]
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+ Duplicate even-indexed double-precision (64-bit) floating-point elements from
+ "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[63:0] := a[63:0]
+ tmp[127:64] := a[63:0]
+ tmp[191:128] := a[191:128]
+ tmp[255:192] := a[191:128]
+ tmp[319:256] := a[319:256]
+ tmp[383:320] := a[319:256]
+ tmp[447:384] := a[447:384]
+ tmp[511:448] := a[447:384]
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := tmp[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+ Duplicate even-indexed double-precision (64-bit) floating-point elements from
+ "a", and store the results in "dst".
+
+ dst[63:0] := a[63:0]
+ dst[127:64] := a[63:0]
+ dst[191:128] := a[191:128]
+ dst[255:192] := a[191:128]
+ dst[319:256] := a[319:256]
+ dst[383:320] := a[319:256]
+ dst[447:384] := a[447:384]
+ dst[511:448] := a[447:384]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+ Move packed 32-bit integers from "a" into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+ Move packed 64-bit integers from "a" into "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+
+ Move the lower double-precision (64-bit) floating-point element from "b" to the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := b[63:0]
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+ Move the lower double-precision (64-bit) floating-point element from "b" to the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := b[63:0]
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+ Duplicate odd-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ tmp[31:0] := a[63:32]
+ tmp[63:32] := a[63:32]
+ tmp[95:64] := a[127:96]
+ tmp[127:96] := a[127:96]
+ tmp[159:128] := a[191:160]
+ tmp[191:160] := a[191:160]
+ tmp[223:192] := a[255:224]
+ tmp[255:224] := a[255:224]
+ tmp[287:256] := a[319:288]
+ tmp[319:288] := a[319:288]
+ tmp[351:320] := a[383:352]
+ tmp[383:352] := a[383:352]
+ tmp[415:384] := a[447:416]
+ tmp[447:416] := a[447:416]
+ tmp[479:448] := a[511:480]
+ tmp[511:480] := a[511:480]
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+ Duplicate odd-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[31:0] := a[63:32]
+ tmp[63:32] := a[63:32]
+ tmp[95:64] := a[127:96]
+ tmp[127:96] := a[127:96]
+ tmp[159:128] := a[191:160]
+ tmp[191:160] := a[191:160]
+ tmp[223:192] := a[255:224]
+ tmp[255:224] := a[255:224]
+ tmp[287:256] := a[319:288]
+ tmp[319:288] := a[319:288]
+ tmp[351:320] := a[383:352]
+ tmp[383:352] := a[383:352]
+ tmp[415:384] := a[447:416]
+ tmp[447:416] := a[447:416]
+ tmp[479:448] := a[511:480]
+ tmp[511:480] := a[511:480]
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+ Duplicate odd-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst".
+
+ dst[31:0] := a[63:32]
+ dst[63:32] := a[63:32]
+ dst[95:64] := a[127:96]
+ dst[127:96] := a[127:96]
+ dst[159:128] := a[191:160]
+ dst[191:160] := a[191:160]
+ dst[223:192] := a[255:224]
+ dst[255:224] := a[255:224]
+ dst[287:256] := a[319:288]
+ dst[319:288] := a[319:288]
+ dst[351:320] := a[383:352]
+ dst[383:352] := a[383:352]
+ dst[415:384] := a[447:416]
+ dst[447:416] := a[447:416]
+ dst[479:448] := a[511:480]
+ dst[511:480] := a[511:480]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+ Duplicate even-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ tmp[31:0] := a[31:0]
+ tmp[63:32] := a[31:0]
+ tmp[95:64] := a[95:64]
+ tmp[127:96] := a[95:64]
+ tmp[159:128] := a[159:128]
+ tmp[191:160] := a[159:128]
+ tmp[223:192] := a[223:192]
+ tmp[255:224] := a[223:192]
+ tmp[287:256] := a[287:256]
+ tmp[319:288] := a[287:256]
+ tmp[351:320] := a[351:320]
+ tmp[383:352] := a[351:320]
+ tmp[415:384] := a[415:384]
+ tmp[447:416] := a[415:384]
+ tmp[479:448] := a[479:448]
+ tmp[511:480] := a[479:448]
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+ Duplicate even-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ tmp[31:0] := a[31:0]
+ tmp[63:32] := a[31:0]
+ tmp[95:64] := a[95:64]
+ tmp[127:96] := a[95:64]
+ tmp[159:128] := a[159:128]
+ tmp[191:160] := a[159:128]
+ tmp[223:192] := a[223:192]
+ tmp[255:224] := a[223:192]
+ tmp[287:256] := a[287:256]
+ tmp[319:288] := a[287:256]
+ tmp[351:320] := a[351:320]
+ tmp[383:352] := a[351:320]
+ tmp[415:384] := a[415:384]
+ tmp[447:416] := a[415:384]
+ tmp[479:448] := a[479:448]
+ tmp[511:480] := a[479:448]
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+ Duplicate even-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst".
+
+ dst[31:0] := a[31:0]
+ dst[63:32] := a[31:0]
+ dst[95:64] := a[95:64]
+ dst[127:96] := a[95:64]
+ dst[159:128] := a[159:128]
+ dst[191:160] := a[159:128]
+ dst[223:192] := a[223:192]
+ dst[255:224] := a[223:192]
+ dst[287:256] := a[287:256]
+ dst[319:288] := a[287:256]
+ dst[351:320] := a[351:320]
+ dst[383:352] := a[351:320]
+ dst[415:384] := a[415:384]
+ dst[447:416] := a[415:384]
+ dst[479:448] := a[479:448]
+ dst[511:480] := a[479:448]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+
+ Move the lower single-precision (32-bit) floating-point element from "b" to the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements
+ of "dst".
+
+ IF k[0]
+ dst[31:0] := b[31:0]
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+ Move the lower single-precision (32-bit) floating-point element from "b" to the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := b[31:0]
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] AND b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (NOT a[i+31:i]) AND b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (NOT a[i+63:i]) AND b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] AND b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using writemask "k" at 32-bit granularity (32-bit elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ FOR h := 0 to 31
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using zeromask "k" at 32-bit granularity (32-bit elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ FOR h := 0 to 31
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst".
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 15
+ i := j*32
+ FOR h := 0 to 31
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using writemask "k" at 64-bit granularity (64-bit elements are copied from "a"
+ when the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ FOR h := 0 to 63
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst" using zeromask "k" at 64-bit granularity (64-bit elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ FOR h := 0 to 63
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+ Bitwise ternary logic that provides the capability to implement any
+ three-operand binary function; the specific binary function is specified by value in
+ "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b",
+ and "c" are used according to "imm8", and the result is written to the corresponding bit
+ in "dst".
+
+ DEFINE TernaryOP(imm8, a, b, c) {
+ CASE imm8[7:0] OF
+ 0: dst[0] := 0 // imm8[7:0] := 0
+ 1: dst[0] := NOT (a OR b OR c) // imm8[7:0] := NOT (_MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C)
+ // ...
+ 254: dst[0] := a OR b OR c // imm8[7:0] := _MM_TERNLOG_A OR _MM_TERNLOG_B OR
+ _MM_TERNLOG_C
+ 255: dst[0] := 1 // imm8[7:0] := 1
+ ESAC
+ }
+ imm8[7:0] = LogicExp(_MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C)
+ FOR j := 0 to 7
+ i := j*64
+ FOR h := 0 to 63
+ dst[i+h] := TernaryOP(imm8[7:0], a[i+h], b[i+h], c[i+h])
+ ENDFOR
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is zero.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing
+ intermediate 64-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is zero.
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+ Broadcast 8-bit integer "a" to all elements of "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := a[7:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+ Broadcast 32-bit integer "a" to all elements of "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+
+
+ Broadcast 32-bit integer "a" to all elements of "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[31:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+
+ Broadcast 32-bit integer "a" to all elements of "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+ Broadcast 64-bit integer "a" to all elements of "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+
+
+ Broadcast 64-bit integer "a" to all elements of "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[63:0]
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+
+ Broadcast 64-bit integer "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+
+ Broadcast the low packed 16-bit integer from "a" to all all elements of "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := a[15:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+
+ Broadcast double-precision (64-bit) floating-point value "a" to all elements of
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+ Broadcast single-precision (32-bit) floating-point value "a" to all elements of
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+ Set packed 32-bit integers in "dst" with the repeated 4 element sequence.
+
+ dst[31:0] := a
+ dst[63:32] := b
+ dst[95:64] := c
+ dst[127:96] := d
+ dst[159:128] := a
+ dst[191:160] := b
+ dst[223:192] := c
+ dst[255:224] := d
+ dst[287:256] := a
+ dst[319:288] := b
+ dst[351:320] := c
+ dst[383:352] := d
+ dst[415:384] := a
+ dst[447:416] := b
+ dst[479:448] := c
+ dst[511:480] := d
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+ Set packed 64-bit integers in "dst" with the repeated 4 element sequence.
+
+ dst[63:0] := a
+ dst[127:64] := b
+ dst[191:128] := c
+ dst[255:192] := d
+ dst[319:256] := a
+ dst[383:320] := b
+ dst[447:384] := c
+ dst[511:448] := d
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+ Set packed double-precision (64-bit) floating-point elements in "dst" with the
+ repeated 4 element sequence.
+
+ dst[63:0] := a
+ dst[127:64] := b
+ dst[191:128] := c
+ dst[255:192] := d
+ dst[319:256] := a
+ dst[383:320] := b
+ dst[447:384] := c
+ dst[511:448] := d
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+ Set packed single-precision (32-bit) floating-point elements in "dst" with the
+ repeated 4 element sequence.
+
+ dst[31:0] := a
+ dst[63:32] := b
+ dst[95:64] := c
+ dst[127:96] := d
+ dst[159:128] := a
+ dst[191:160] := b
+ dst[223:192] := c
+ dst[255:224] := d
+ dst[287:256] := a
+ dst[319:288] := b
+ dst[351:320] := c
+ dst[383:352] := d
+ dst[415:384] := a
+ dst[447:416] := b
+ dst[479:448] := c
+ dst[511:480] := d
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 8-bit integers in "dst" with the supplied values.
+
+ dst[7:0] := e0
+ dst[15:8] := e1
+ dst[23:16] := e2
+ dst[31:24] := e3
+ dst[39:32] := e4
+ dst[47:40] := e5
+ dst[55:48] := e6
+ dst[63:56] := e7
+ dst[71:64] := e8
+ dst[79:72] := e9
+ dst[87:80] := e10
+ dst[95:88] := e11
+ dst[103:96] := e12
+ dst[111:104] := e13
+ dst[119:112] := e14
+ dst[127:120] := e15
+ dst[135:128] := e16
+ dst[143:136] := e17
+ dst[151:144] := e18
+ dst[159:152] := e19
+ dst[167:160] := e20
+ dst[175:168] := e21
+ dst[183:176] := e22
+ dst[191:184] := e23
+ dst[199:192] := e24
+ dst[207:200] := e25
+ dst[215:208] := e26
+ dst[223:216] := e27
+ dst[231:224] := e28
+ dst[239:232] := e29
+ dst[247:240] := e30
+ dst[255:248] := e31
+ dst[263:256] := e32
+ dst[271:264] := e33
+ dst[279:272] := e34
+ dst[287:280] := e35
+ dst[295:288] := e36
+ dst[303:296] := e37
+ dst[311:304] := e38
+ dst[319:312] := e39
+ dst[327:320] := e40
+ dst[335:328] := e41
+ dst[343:336] := e42
+ dst[351:344] := e43
+ dst[359:352] := e44
+ dst[367:360] := e45
+ dst[375:368] := e46
+ dst[383:376] := e47
+ dst[391:384] := e48
+ dst[399:392] := e49
+ dst[407:400] := e50
+ dst[415:408] := e51
+ dst[423:416] := e52
+ dst[431:424] := e53
+ dst[439:432] := e54
+ dst[447:440] := e55
+ dst[455:448] := e56
+ dst[463:456] := e57
+ dst[471:464] := e58
+ dst[479:472] := e59
+ dst[487:480] := e60
+ dst[495:488] := e61
+ dst[503:496] := e62
+ dst[511:504] := e63
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 16-bit integers in "dst" with the supplied values.
+
+ dst[15:0] := e0
+ dst[31:16] := e1
+ dst[47:32] := e2
+ dst[63:48] := e3
+ dst[79:64] := e4
+ dst[95:80] := e5
+ dst[111:96] := e6
+ dst[127:112] := e7
+ dst[143:128] := e8
+ dst[159:144] := e9
+ dst[175:160] := e10
+ dst[191:176] := e11
+ dst[207:192] := e12
+ dst[223:208] := e13
+ dst[239:224] := e14
+ dst[255:240] := e15
+ dst[271:256] := e16
+ dst[287:272] := e17
+ dst[303:288] := e18
+ dst[319:304] := e19
+ dst[335:320] := e20
+ dst[351:336] := e21
+ dst[367:352] := e22
+ dst[383:368] := e23
+ dst[399:384] := e24
+ dst[415:400] := e25
+ dst[431:416] := e26
+ dst[447:432] := e27
+ dst[463:448] := e28
+ dst[479:464] := e29
+ dst[495:480] := e30
+ dst[511:496] := e31
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 32-bit integers in "dst" with the supplied values.
+
+ dst[31:0] := e0
+ dst[63:32] := e1
+ dst[95:64] := e2
+ dst[127:96] := e3
+ dst[159:128] := e4
+ dst[191:160] := e5
+ dst[223:192] := e6
+ dst[255:224] := e7
+ dst[287:256] := e8
+ dst[319:288] := e9
+ dst[351:320] := e10
+ dst[383:352] := e11
+ dst[415:384] := e12
+ dst[447:416] := e13
+ dst[479:448] := e14
+ dst[511:480] := e15
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 64-bit integers in "dst" with the supplied values.
+
+ dst[63:0] := e0
+ dst[127:64] := e1
+ dst[191:128] := e2
+ dst[255:192] := e3
+ dst[319:256] := e4
+ dst[383:320] := e5
+ dst[447:384] := e6
+ dst[511:448] := e7
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed double-precision (64-bit) floating-point elements in "dst" with the
+ supplied values.
+
+ dst[63:0] := e0
+ dst[127:64] := e1
+ dst[191:128] := e2
+ dst[255:192] := e3
+ dst[319:256] := e4
+ dst[383:320] := e5
+ dst[447:384] := e6
+ dst[511:448] := e7
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed single-precision (32-bit) floating-point elements in "dst" with the
+ supplied values.
+
+ dst[31:0] := e0
+ dst[63:32] := e1
+ dst[95:64] := e2
+ dst[127:96] := e3
+ dst[159:128] := e4
+ dst[191:160] := e5
+ dst[223:192] := e6
+ dst[255:224] := e7
+ dst[287:256] := e8
+ dst[319:288] := e9
+ dst[351:320] := e10
+ dst[383:352] := e11
+ dst[415:384] := e12
+ dst[447:416] := e13
+ dst[479:448] := e14
+ dst[511:480] := e15
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+ Set packed 32-bit integers in "dst" with the repeated 4 element sequence in
+ reverse order.
+
+ dst[31:0] := d
+ dst[63:32] := c
+ dst[95:64] := b
+ dst[127:96] := a
+ dst[159:128] := d
+ dst[191:160] := c
+ dst[223:192] := b
+ dst[255:224] := a
+ dst[287:256] := d
+ dst[319:288] := c
+ dst[351:320] := b
+ dst[383:352] := a
+ dst[415:384] := d
+ dst[447:416] := c
+ dst[479:448] := b
+ dst[511:480] := a
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+ Set packed 64-bit integers in "dst" with the repeated 4 element sequence in
+ reverse order.
+
+ dst[63:0] := d
+ dst[127:64] := c
+ dst[191:128] := b
+ dst[255:192] := a
+ dst[319:256] := d
+ dst[383:320] := c
+ dst[447:384] := b
+ dst[511:448] := a
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+ Set packed double-precision (64-bit) floating-point elements in "dst" with the
+ repeated 4 element sequence in reverse order.
+
+ dst[63:0] := d
+ dst[127:64] := c
+ dst[191:128] := b
+ dst[255:192] := a
+ dst[319:256] := d
+ dst[383:320] := c
+ dst[447:384] := b
+ dst[511:448] := a
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+ Set packed single-precision (32-bit) floating-point elements in "dst" with the
+ repeated 4 element sequence in reverse order.
+
+ dst[31:0] := d
+ dst[63:32] := c
+ dst[95:64] := b
+ dst[127:96] := a
+ dst[159:128] := d
+ dst[191:160] := c
+ dst[223:192] := b
+ dst[255:224] := a
+ dst[287:256] := d
+ dst[319:288] := c
+ dst[351:320] := b
+ dst[383:352] := a
+ dst[415:384] := d
+ dst[447:416] := c
+ dst[479:448] := b
+ dst[511:480] := a
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 32-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[31:0] := e15
+ dst[63:32] := e14
+ dst[95:64] := e13
+ dst[127:96] := e12
+ dst[159:128] := e11
+ dst[191:160] := e10
+ dst[223:192] := e9
+ dst[255:224] := e8
+ dst[287:256] := e7
+ dst[319:288] := e6
+ dst[351:320] := e5
+ dst[383:352] := e4
+ dst[415:384] := e3
+ dst[447:416] := e2
+ dst[479:448] := e1
+ dst[511:480] := e0
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 64-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[63:0] := e7
+ dst[127:64] := e6
+ dst[191:128] := e5
+ dst[255:192] := e4
+ dst[319:256] := e3
+ dst[383:320] := e2
+ dst[447:384] := e1
+ dst[511:448] := e0
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed double-precision (64-bit) floating-point elements in "dst" with the
+ supplied values in reverse order.
+
+ dst[63:0] := e7
+ dst[127:64] := e6
+ dst[191:128] := e5
+ dst[255:192] := e4
+ dst[319:256] := e3
+ dst[383:320] := e2
+ dst[447:384] := e1
+ dst[511:448] := e0
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed single-precision (32-bit) floating-point elements in "dst" with the
+ supplied values in reverse order.
+
+ dst[31:0] := e15
+ dst[63:32] := e14
+ dst[95:64] := e13
+ dst[127:96] := e12
+ dst[159:128] := e11
+ dst[191:160] := e10
+ dst[223:192] := e9
+ dst[255:224] := e8
+ dst[287:256] := e7
+ dst[319:288] := e6
+ dst[351:320] := e5
+ dst[383:352] := e4
+ dst[415:384] := e3
+ dst[447:416] := e2
+ dst[479:448] := e1
+ dst[511:480] := e0
+ dst[MAX:512] := 0
+
+ AVX512F
+
+ Set
+
+
+
+
+ Return vector of type __m512 with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+ Return vector of type __m512i with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+ Return vector of type __m512d with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+ Return vector of type __m512 with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+ Return vector of type __m512i with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ AVX512F
+
+ Set
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src << count) OR (src >> (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the left by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src << count) OR (src >> (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in "imm8", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 32-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
+ count := count_src % 32
+ RETURN (src >>count) OR (src << (32 - count))
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Rotate the bits in each packed 64-bit integer in "a" to the right by the number
+ of bits specified in the corresponding element of "b", and store the results in "dst".
+
+ DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
+ count := count_src % 64
+ RETURN (src >> count) OR (src << (64 - count))
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF count[63:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF count[63:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF imm8[7:0] > 63
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
+ ELSE
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF count[i+63:i] < 64
+ dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF count[i+63:i] < 64
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+ Compute the approximate reciprocal of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst". The maximum relative
+ error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := (1.0 / a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst". The maximum relative
+ error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the approximate reciprocal of the lower double-precision (64-bit)
+ floating-point element in "b", store the result in the lower element of "dst" using
+ writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy
+ the upper element from "a" to the upper element of "dst". The maximum relative error for
+ this approximation is less than 2^-14.
+
+ IF k[0]
+ dst[63:0] := (1.0 / b[63:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal of the lower double-precision (64-bit)
+ floating-point element in "b", store the result in the lower element of "dst" using
+ zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper
+ element from "a" to the upper element of "dst". The maximum relative error for this
+ approximation is less than 2^-14.
+
+ IF k[0]
+ dst[63:0] := (1.0 / b[63:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal of the lower double-precision (64-bit)
+ floating-point element in "b", store the result in the lower element of "dst", and copy
+ the upper element from "a" to the upper element of "dst". The maximum relative error for
+ this approximation is less than 2^-14.
+
+ dst[63:0] := (1.0 / b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the approximate reciprocal of the lower single-precision (32-bit)
+ floating-point element in "b", store the result in the lower element of "dst" using
+ writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy
+ the upper 3 packed elements from "a" to the upper elements of "dst". The maximum
+ relative error for this approximation is less than 2^-14.
+
+ IF k[0]
+ dst[31:0] := (1.0 / b[31:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal of the lower single-precision (32-bit)
+ floating-point element in "b", store the result in the lower element of "dst" using
+ zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper
+ 3 packed elements from "a" to the upper elements of "dst". The maximum relative error
+ for this approximation is less than 2^-14.
+
+ IF k[0]
+ dst[31:0] := (1.0 / b[31:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal of the lower single-precision (32-bit)
+ floating-point element in "b", store the result in the lower element of "dst", and copy
+ the upper 3 packed elements from "a" to the upper elements of "dst". The maximum
+ relative error for this approximation is less than 2^-14.
+
+ dst[31:0] := (1.0 / b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set). The
+ maximum relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal square root of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst". The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set). The
+ maximum relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal square root of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst". The maximum
+ relative error for this approximation is less than 2^-14.
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of the lower double-precision
+ (64-bit) floating-point element in "b", store the result in the lower element of "dst"
+ using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and
+ copy the upper element from "a" to the upper element of "dst". The maximum relative
+ error for this approximation is less than 2^-14.
+
+ IF k[0]
+ dst[63:0] := (1.0 / SQRT(b[63:0]))
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of the lower double-precision
+ (64-bit) floating-point element in "b", store the result in the lower element of "dst"
+ using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the
+ upper element from "a" to the upper element of "dst". The maximum relative error for
+ this approximation is less than 2^-14.
+
+ IF k[0]
+ dst[63:0] := (1.0 / SQRT(b[63:0]))
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal square root of the lower double-precision
+ (64-bit) floating-point element in "b", store the result in the lower element of "dst",
+ and copy the upper element from "a" to the upper element of "dst". The maximum relative
+ error for this approximation is less than 2^-14.
+
+ dst[63:0] := (1.0 / SQRT(b[63:0]))
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of the lower single-precision
+ (32-bit) floating-point element in "b", store the result in the lower element of "dst"
+ using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and
+ copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum
+ relative error for this approximation is less than 2^-14.
+
+ IF k[0]
+ dst[31:0] := (1.0 / SQRT(b[31:0]))
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of the lower single-precision
+ (32-bit) floating-point element in "b", store the result in the lower element of "dst"
+ using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative
+ error for this approximation is less than 2^-14.
+
+ IF k[0]
+ dst[31:0] := (1.0 / SQRT(b[31:0]))
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal square root of the lower single-precision
+ (32-bit) floating-point element in "b", store the result in the lower element of "dst",
+ and copy the upper 3 packed elements from "a" to the upper elements of "dst". The
+ maximum relative error for this approximation is less than 2^-14.
+
+ dst[31:0] := (1.0 / SQRT(b[31:0]))
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ [round_note].
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+ [round_note].
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+ [round_note].
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+
+ Compute the square root of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper element
+ from "a" to the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := SQRT(b[63:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the square root of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper element
+ from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := SQRT(b[63:0])
+ ELSE
+ dst[63:0] := src[63:0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the square root of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[63:0] := SQRT(b[63:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper element from "a"
+ to the upper element of "dst".
+
+ IF k[0]
+ dst[63:0] := SQRT(b[63:0])
+ ELSE
+ dst[63:0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst".
+ [round_note]
+
+ dst[63:0] := SQRT(b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+
+ Compute the square root of the lower single-precision (32-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := SQRT(b[31:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the square root of the lower single-precision (32-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := SQRT(b[31:0])
+ ELSE
+ dst[31:0] := src[31:0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the square root of the lower single-precision (32-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst[31:0] := SQRT(b[31:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of the lower single-precision (32-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst[31:0] := SQRT(b[31:0])
+ ELSE
+ dst[31:0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of the lower single-precision (32-bit) floating-point
+ element in "b", store the result in the lower element of "dst", and copy the upper 3
+ packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := SQRT(b[31:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512F
+
+ Elementary Math Functions
+
+
+
+
+ Cast vector of type __m128d to type __m512d; the upper 384 bits of the result
+ are undefined.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m256d to type __m512d; the upper 256 bits of the result
+ are undefined.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m512d to type __m128d.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m512 to type __m128.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m512d to type __m256d.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m128 to type __m512; the upper 384 bits of the result are
+ undefined.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m256 to type __m512; the upper 256 bits of the result are
+ undefined.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m512 to type __m256.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m128i to type __m512i; the upper 384 bits of the result
+ are undefined.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m256i to type __m512i; the upper 256 bits of the result
+ are undefined.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m512i to type __m128i.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m512i to type __m256i.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m128d to type __m512d; the upper 384 bits of the result
+ are zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m128 to type __m512; the upper 384 bits of the result are
+ zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m128i to type __m512i; the upper 384 bits of the result
+ are zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m256d to type __m512d; the upper 256 bits of the result
+ are zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m256 to type __m512; the upper 256 bits of the result are
+ zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m256i to type __m512i; the upper 256 bits of the result
+ are zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Return vector of type __m512 with undefined elements.
+ AVX512F
+
+ General Support
+
+
+
+ Return vector of type __m512i with undefined elements.
+ AVX512F
+
+ General Support
+
+
+
+ Return vector of type __m512d with undefined elements.
+ AVX512F
+
+ General Support
+
+
+
+ Return vector of type __m512 with undefined elements.
+ AVX512F
+
+ General Support
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask
+ bit is not set). [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask
+ bit is not set). [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask
+ bit is not set). [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask
+ bit is not set). [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := c[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set). [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := c[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set). RM.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set). RM.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Add packed 32-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed 32-bit integers in "a" and "b", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed 32-bit integers in "a" and "b", producing intermediate
+ 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ tmp[63:0] := a[i+31:i] * b[i+31:i]
+ dst[i+31:i] := tmp[31:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 32-bit integers in "a" and "b", producing intermediate
+ 64-bit integers, and store the low 32 bits of the intermediate integers in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ tmp[63:0] := a[i+31:i] * b[i+31:i]
+ dst[i+31:i] := tmp[31:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst".
+ [round_note]
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 32-bit integers in "a" by addition using mask "k". Returns
+ the sum of all active elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[31:0] + src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] + src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_ADD(tmp, 16)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 64-bit integers in "a" by addition using mask "k". Returns
+ the sum of all active elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[63:0] + src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] + src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_ADD(tmp, 8)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed double-precision (64-bit) floating-point elements in "a" by
+ addition using mask "k". Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[63:0] + src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] + src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_ADD(tmp, 8)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed single-precision (32-bit) floating-point elements in "a" by
+ addition using mask "k". Returns the sum of all active elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[31:0] + src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] + src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 16
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_ADD(tmp, 16)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 32-bit integers in "a" by multiplication using mask "k".
+ Returns the product of all active elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[31:0] * src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] * src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 16
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := 1
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_MUL(tmp, 16)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed 64-bit integers in "a" by multiplication using mask "k".
+ Returns the product of all active elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[63:0] * src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] * src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := 1
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_MUL(tmp, 8)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed double-precision (64-bit) floating-point elements in "a" by
+ multiplication using mask "k". Returns the product of all active elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[63:0] * src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] * src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := 1.0
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_MUL(tmp, 8)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Reduce the packed single-precision (32-bit) floating-point elements in "a" by
+ multiplication using mask "k". Returns the product of all active elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[31:0] * src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] * src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 16
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := FP32(1.0)
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_MUL(tmp, 16)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 32-bit integers in "a" by addition. Returns the sum of all
+ elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[31:0] + src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] + src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_ADD(a, 16)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 64-bit integers in "a" by addition. Returns the sum of all
+ elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[63:0] + src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] + src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_ADD(a, 8)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+ Reduce the packed double-precision (64-bit) floating-point elements in "a" by
+ addition. Returns the sum of all elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[63:0] + src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] + src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_ADD(a, 8)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+ Reduce the packed single-precision (32-bit) floating-point elements in "a" by
+ addition. Returns the sum of all elements in "a".
+
+ DEFINE REDUCE_ADD(src, len) {
+ IF len == 2
+ RETURN src[31:0] + src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] + src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_ADD(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_ADD(a, 16)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 32-bit integers in "a" by multiplication. Returns the product
+ of all elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[31:0] * src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] * src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_MUL(a, 16)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+ Reduce the packed 64-bit integers in "a" by multiplication. Returns the product
+ of all elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[63:0] * src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] * src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_MUL(a, 8)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+ Reduce the packed double-precision (64-bit) floating-point elements in "a" by
+ multiplication. Returns the product of all elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[63:0] * src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] * src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_MUL(a, 8)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+ Reduce the packed single-precision (32-bit) floating-point elements in "a" by
+ multiplication. Returns the product of all elements in "a".
+
+ DEFINE REDUCE_MUL(src, len) {
+ IF len == 2
+ RETURN src[31:0] * src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] * src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_MUL(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_MUL(a, 16)
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+ Finds the absolute value of each packed single-precision (32-bit)
+ floating-point element in "v2", storing the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ABS(v2[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Finds the absolute value of each packed single-precision (32-bit)
+ floating-point element in "v2", storing the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ABS(v2[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+ Finds the absolute value of each packed double-precision (64-bit)
+ floating-point element in "v2", storing the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ABS(v2[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Finds the absolute value of each packed double-precision (64-bit)
+ floating-point element in "v2", storing the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ABS(v2[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 128-byte immediate result, shift the result
+ right by "imm8" 32-bit elements, and store the low 64 bytes (16 elements) in "dst".
+
+ temp[1023:512] := a[511:0]
+ temp[511:0] := b[511:0]
+ temp[1023:0] := temp[1023:0] >> (32*imm8[3:0])
+ dst[511:0] := temp[511:0]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Concatenate "a" and "b" into a 128-byte immediate result, shift the result
+ right by "imm8" 32-bit elements, and store the low 64 bytes (16 elements) in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ temp[1023:512] := a[511:0]
+ temp[511:0] := b[511:0]
+ temp[1023:0] := temp[1023:0] >> (32*imm8[3:0])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := temp[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ [sae_note]
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element.
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision (64-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element.
+ [sae_note]
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ [sae_note]
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element.
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision (32-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element.
+ [sae_note]
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by
+ "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note]
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "interv" and the sign depends on "sc" and the source sign.
+ [getmant_note][sae_note]
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed double-precision (64-bit) floating-point elements from "a" and "b"
+ using control mask "k", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed single-precision (32-bit) floating-point elements from "a" and "b"
+ using control mask "k", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed 32-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed 64-bit integers from "a" and "b" using control mask "k", and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). Note that this intrinsic shuffles
+ across 128-bit lanes, unlike past intrinsics that use the "permutevar" name. This
+ intrinsic is identical to "_mm512_mask_permutexvar_epi32", and it is recommended that
+ you use that intrinsic name.
+
+ FOR j := 0 to 15
+ i := j*32
+ id := idx[i+3:i]*32
+ IF k[j]
+ dst[i+31:i] := a[id+31:id]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle 32-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst". Note that this intrinsic shuffles across 128-bit
+ lanes, unlike past intrinsics that use the "permutevar" name. This intrinsic is
+ identical to "_mm512_permutexvar_epi32", and it is recommended that you use that
+ intrinsic name.
+
+ FOR j := 0 to 15
+ i := j*32
+ id := idx[i+3:i]*32
+ dst[i+31:i] := a[id+31:id]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 32-bit integers in "a" within 128-bit lanes using the control in
+ "imm8", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
+ tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
+ tmp_dst[351:320] := SELECT4(a[383:256], imm8[5:4])
+ tmp_dst[383:352] := SELECT4(a[383:256], imm8[7:6])
+ tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
+ tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
+ tmp_dst[479:448] := SELECT4(a[511:384], imm8[5:4])
+ tmp_dst[511:480] := SELECT4(a[511:384], imm8[7:6])
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := tmp_dst[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+ Shuffle 32-bit integers in "a" within 128-bit lanes using the control in
+ "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+ dst[159:128] := SELECT4(a[255:128], imm8[1:0])
+ dst[191:160] := SELECT4(a[255:128], imm8[3:2])
+ dst[223:192] := SELECT4(a[255:128], imm8[5:4])
+ dst[255:224] := SELECT4(a[255:128], imm8[7:6])
+ dst[287:256] := SELECT4(a[383:256], imm8[1:0])
+ dst[319:288] := SELECT4(a[383:256], imm8[3:2])
+ dst[351:320] := SELECT4(a[383:256], imm8[5:4])
+ dst[383:352] := SELECT4(a[383:256], imm8[7:6])
+ dst[415:384] := SELECT4(a[511:384], imm8[1:0])
+ dst[447:416] := SELECT4(a[511:384], imm8[3:2])
+ dst[479:448] := SELECT4(a[511:384], imm8[5:4])
+ dst[511:480] := SELECT4(a[511:384], imm8[7:6])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Swizzle
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := (a[i+63:i] OP b[i+63:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k". [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := (a[i+63:i] OP b[i+63:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for equality, and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := (a[i+63:i] == b[i+63:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for less-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := (a[i+63:i] <= b[i+63:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for less-than, and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := (a[i+63:i] < b[i+63:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for not-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := (a[i+63:i] != b[i+63:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for not-less-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := (!(a[i+63:i] <= b[i+63:i])) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for not-less-than, and store the results in mask vector "k".
+
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := (!(a[i+63:i] < b[i+63:i])) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ to see if neither is NaN, and store the results in mask vector "k".
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := (a[i+63:i] != NaN AND b[i+63:i] != NaN) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ to see if either is NaN, and store the results in mask vector "k".
+ FOR j := 0 to 7
+ i := j*64
+ k[j] := (a[i+63:i] == NaN OR b[i+63:i] == NaN) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set). [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for equality, and store the results in mask vector "k" using zeromask "k1" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := (a[i+63:i] == b[i+63:i]) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := (a[i+63:i] <= b[i+63:i]) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for less-than, and store the results in mask vector "k" using zeromask "k1" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := (a[i+63:i] < b[i+63:i]) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := (a[i+63:i] != b[i+63:i]) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for not-less-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := (!(a[i+63:i] <= b[i+63:i])) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for not-less-than, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := (!(a[i+63:i] < b[i+63:i])) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ to see if neither is NaN, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := (a[i+63:i] != NaN AND b[i+63:i] != NaN) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ to see if either is NaN, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ FOR j := 0 to 7
+ i := j*64
+ IF k1[j]
+ k[j] := (a[i+63:i] == NaN OR b[i+63:i] == NaN) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := (a[i+31:i] OP b[i+31:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k". [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := (a[i+31:i] OP b[i+31:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for equality, and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := (a[i+31:i] == b[i+31:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for less-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := (a[i+31:i] <= b[i+31:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for less-than, and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := (a[i+31:i] < b[i+31:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for not-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := (a[i+31:i] != b[i+31:i]) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for not-less-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := (!(a[i+31:i] <= b[i+31:i])) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for not-less-than, and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := (!(a[i+31:i] < b[i+31:i])) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ to see if neither is NaN, and store the results in mask vector "k".
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ((a[i+31:i] != NaN) AND (b[i+31:i] != NaN)) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ to see if either is NaN, and store the results in mask vector "k".
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ((a[i+31:i] == NaN) OR (b[i+31:i] == NaN)) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set). [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for equality, and store the results in mask vector "k" using zeromask "k1" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := (a[i+31:i] == b[i+31:i]) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := (a[i+31:i] <= b[i+31:i]) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for less-than, and store the results in mask vector "k" using zeromask "k1" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := (a[i+31:i] < b[i+31:i]) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := (a[i+31:i] != b[i+31:i]) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for not-less-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := (!(a[i+31:i] <= b[i+31:i])) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for not-less-than, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := (!(a[i+31:i] < b[i+31:i])) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ to see if neither is NaN, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ((a[i+31:i] != NaN) AND (b[i+31:i] != NaN)) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ to see if either is NaN, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ((a[i+31:i] == NaN) OR (b[i+31:i] == NaN)) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed 32-bit integers in "a" and "b" for equality, and store the
+ results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed 32-bit integers in "a" and "b" for not-equal, and store the
+ results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed 32-bit integers in "a" and "b" for equality, and store the
+ results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed 32-bit integers in "a" and "b" for not-equal, and store the
+ results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k".
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k".
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison
+ operand specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ CASE (imm8[2:0]) OF
+ 0: OP := _MM_CMPINT_EQ
+ 1: OP := _MM_CMPINT_LT
+ 2: OP := _MM_CMPINT_LE
+ 3: OP := _MM_CMPINT_FALSE
+ 4: OP := _MM_CMPINT_NE
+ 5: OP := _MM_CMPINT_NLT
+ 6: OP := _MM_CMPINT_NLE
+ 7: OP := _MM_CMPINT_TRUE
+ ESAC
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for
+ greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and
+ store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal,
+ and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store
+ the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Compare
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+
+
+ Gather single-precision (32-bit) floating-point elements from memory using
+ 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and
+ offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4
+ or 8.
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+ Load 512-bits (composed of 8 packed double-precision (64-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Load packed double-precision (64-bit) floating-point elements from memory into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). "mem_addr" must be aligned on a 64-byte boundary or a
+ general-protection exception may be generated.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+ Load 512-bits (composed of 16 packed single-precision (32-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Load packed single-precision (32-bit) floating-point elements from memory into
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). "mem_addr" must be aligned on a 64-byte boundary or a
+ general-protection exception may be generated.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+ Load 512-bits (composed of 16 packed 32-bit integers) from memory into "dst".
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+ Load 512-bits of integer data from memory into "dst".
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Load packed 32-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+ Load 512-bits (composed of 8 packed 64-bit integers) from memory into "dst".
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Load packed 64-bit integers from memory into "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst". "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+
+
+ Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are
+ loaded from addresses starting at "base_addr" and offset by each 32-bit element in
+ "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged
+ into "dst" using writemask "k" (elements are copied from "src" when the corresponding
+ mask bit is not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+31:i] := MEM[addr+31:addr]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Loads 8 64-bit integer elements from memory starting at location "base_addr" at
+ packed 32-bit integer indices stored in the lower half of "vindex" scaled by "scale" and
+ stores them in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+
+
+ Loads 8 64-bit integer elements from memory starting at location "base_addr" at
+ packed 32-bit integer indices stored in the lower half of "vindex" scaled by "scale" and
+ stores them in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Loads 8 double-precision (64-bit) floating-point elements stored at memory
+ locations starting at location "base_addr" at packed 32-bit integer indices stored in
+ the lower half of "vindex" scaled by "scale" them in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+
+
+ Loads 8 double-precision (64-bit) floating-point elements from memory starting
+ at location "base_addr" at packed 32-bit integer indices stored in the lower half of
+ "vindex" scaled by "scale" into "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ dst[i+63:i] := MEM[addr+63:addr]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Load
+
+
+
+
+
+
+ Move packed double-precision (64-bit) floating-point elements from "a" to "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+ Move packed single-precision (32-bit) floating-point elements from "a" to "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+ Move packed 32-bit integers from "a" to "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+ Move packed 64-bit integers from "a" to "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Move
+
+
+
+
+
+
+ Store packed double-precision (64-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 8 packed double-precision (64-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+ Store packed single-precision (32-bit) floating-point elements from "a" into
+ memory using writemask "k".
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 16 packed single-precision (32-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+ Store packed 32-bit integers from "a" into memory using writemask "k".
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 16 packed 32-bit integers) from "a" into memory.
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits of integer data from "a" into memory.
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+ Store packed 64-bit integers from "a" into memory using writemask "k".
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 8 packed 64-bit integers) from "a" into memory.
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit
+ elements are stored at addresses starting at "base_addr" and offset by each 32-bit
+ element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k"
+ (elements are not stored when the corresponding mask bit is not set). "scale" should be
+ 1, 2, 4 or 8.
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale"). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+
+ Scatter single-precision (32-bit) floating-point elements from "a" into memory
+ using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr"
+ and offset by each 32-bit element in "vindex" (each index is scaled by the factor in
+ "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is
+ not set). "scale" should be 1, 2, 4 or 8.
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+31:addr] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+ Stores 8 packed double-precision (64-bit) floating-point elements in "a" and to
+ memory locations starting at location "base_addr" at packed 32-bit integer indices
+ stored in "vindex" scaled by "scale".
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+
+ Stores 8 packed double-precision (64-bit) floating-point elements in "a" to
+ memory locations starting at location "base_addr" at packed 32-bit integer indices
+ stored in "vindex" scaled by "scale". Only those elements whose corresponding mask bit
+ is set in writemask "k" are written to memory.
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] AND b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 512 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[511:0] := (a[511:0] AND b[511:0])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b",
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := (NOT a[i+31:i]) AND b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of 512 bits (representing integer data) in "a" and then
+ AND with "b", and store the result in "dst".
+
+ dst[511:0] := ((NOT a[511:0]) AND b[511:0])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of 512 bits (composed of packed 64-bit integers) in "a"
+ and then AND with "b", and store the results in "dst".
+
+ dst[511:0] := ((NOT a[511:0]) AND b[511:0])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 512 bits (composed of packed 64-bit integers) in "a"
+ and "b", and store the results in "dst".
+
+ dst[511:0] := (a[511:0] AND b[511:0])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] AND b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of 512 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[511:0] := (a[511:0] OR b[511:0])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the
+ resut in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to
+ writemask "k") if the intermediate value is non-zero.
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k1[j]
+ k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing
+ intermediate 32-bit values, and set the corresponding bit in result mask "k" if the
+ intermediate value is non-zero.
+
+ FOR j := 0 to 15
+ i := j*32
+ k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of 512 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[511:0] := (a[511:0] XOR b[511:0])
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+ Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Reduce the packed 32-bit integers in "a" by bitwise AND using mask "k". Returns
+ the bitwise AND of all active elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[31:0] AND src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] AND src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 16
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := 0xFFFFFFFF
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_AND(tmp, 16)
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Reduce the packed 64-bit integers in "a" by bitwise AND using mask "k". Returns
+ the bitwise AND of all active elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[63:0] AND src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] AND src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := 0xFFFFFFFFFFFFFFFF
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_AND(tmp, 8)
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Reduce the packed 32-bit integers in "a" by bitwise OR using mask "k". Returns
+ the bitwise OR of all active elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[31:0] OR src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] OR src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 16
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_OR(tmp, 16)
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+ Reduce the packed 64-bit integers in "a" by bitwise OR using mask "k". Returns
+ the bitwise OR of all active elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[63:0] OR src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] OR src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_OR(tmp, 8)
+
+ AVX512F
+
+ Logical
+
+
+
+
+ Reduce the packed 32-bit integers in "a" by bitwise AND. Returns the bitwise
+ AND of all elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[31:0] AND src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] AND src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_AND(a, 16)
+
+ AVX512F
+
+ Logical
+
+
+
+
+ Reduce the packed 64-bit integers in "a" by bitwise AND. Returns the bitwise
+ AND of all elements in "a".
+
+ DEFINE REDUCE_AND(src, len) {
+ IF len == 2
+ RETURN src[63:0] AND src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] AND src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_AND(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_AND(a, 8)
+
+ AVX512F
+
+ Logical
+
+
+
+
+ Reduce the packed 32-bit integers in "a" by bitwise OR. Returns the bitwise OR
+ of all elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[31:0] OR src[63:32]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := src[i+31:i] OR src[i+32*len+31:i+32*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_OR(a, 16)
+
+ AVX512F
+
+ Logical
+
+
+
+
+ Reduce the packed 64-bit integers in "a" by bitwise OR. Returns the bitwise OR
+ of all elements in "a".
+
+ DEFINE REDUCE_OR(src, len) {
+ IF len == 2
+ RETURN src[63:0] OR src[127:64]
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := src[i+63:i] OR src[i+64*len+63:i+64*len]
+ ENDFOR
+ RETURN REDUCE_OR(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_OR(a, 8)
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+ Performs element-by-element bitwise AND between packed 32-bit integer elements
+ of "v2" and "v3", storing the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := v2[i+31:i] & v3[i+31:i]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Logical
+
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed maximum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ maximum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ maximum values in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed minimum
+ values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ minimum values in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ minimum values in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 32-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[31:0] > src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] > src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 16
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := Int32(-0x80000000)
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_MAX(tmp, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 64-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[63:0] > src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] > src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := Int64(-0x8000000000000000)
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_MAX(tmp, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 32-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[31:0] > src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] > src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 16
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_MAX(tmp, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 64-bit integers in "a" by maximum using mask "k".
+ Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[63:0] > src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] > src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_MAX(tmp, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed double-precision (64-bit) floating-point elements in "a" by
+ maximum using mask "k". Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[63:0] > src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] > src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := Cast_FP64(0xFFEFFFFFFFFFFFFF)
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_MAX(tmp, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed single-precision (32-bit) floating-point elements in "a" by
+ maximum using mask "k". Returns the maximum of all active elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[31:0] > src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] > src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 16
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := Cast_FP32(0xFF7FFFFF)
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_MAX(tmp, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 32-bit integers in "a" by maximum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[31:0] < src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] < src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 16
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := Int32(0x7FFFFFFF)
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_MIN(tmp, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed signed 64-bit integers in "a" by maximum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[63:0] < src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] < src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := Int64(0x7FFFFFFFFFFFFFFF)
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_MIN(tmp, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 32-bit integers in "a" by maximum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[31:0] < src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] < src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 16
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := 0xFFFFFFFF
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_MIN(tmp, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed unsigned 64-bit integers in "a" by minimum using mask "k".
+ Returns the minimum of all active elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[63:0] < src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] < src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := 0xFFFFFFFFFFFFFFFF
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_MIN(tmp, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed double-precision (64-bit) floating-point elements in "a" by
+ maximum using mask "k". Returns the minimum of all active elements in "a".
+ [min_float_note]
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[63:0] < src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] < src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[64*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 8
+ i := j*64
+ IF k[j]
+ tmp[i+63:i] := a[i+63:i]
+ ELSE
+ tmp[i+63:i] := Cast_FP64(0x7FEFFFFFFFFFFFFF)
+ FI
+ ENDFOR
+ dst[63:0] := REDUCE_MIN(tmp, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+ Reduce the packed single-precision (32-bit) floating-point elements in "a" by
+ maximum using mask "k". Returns the minimum of all active elements in "a".
+ [min_float_note]
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[31:0] < src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] < src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[32*len-1:0], len)
+ }
+ tmp := a
+ FOR j := 0 to 16
+ i := j*32
+ IF k[j]
+ tmp[i+31:i] := a[i+31:i]
+ ELSE
+ tmp[i+31:i] := Cast_FP32(0x7F7FFFFF)
+ FI
+ ENDFOR
+ dst[31:0] := REDUCE_MIN(tmp, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed signed 32-bit integers in "a" by maximum. Returns the maximum
+ of all elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[31:0] > src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] > src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_MAX(a, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed signed 64-bit integers in "a" by maximum. Returns the maximum
+ of all elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[63:0] > src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] > src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_MAX(a, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 32-bit integers in "a" by maximum. Returns the
+ maximum of all elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[31:0] > src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] > src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_MAX(a, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 64-bit integers in "a" by maximum. Returns the
+ maximum of all elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[63:0] > src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] > src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_MAX(a, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed double-precision (64-bit) floating-point elements in "a" by
+ maximum. Returns the maximum of all elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[63:0] > src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] > src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_MAX(a, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed single-precision (32-bit) floating-point elements in "a" by
+ maximum. Returns the maximum of all elements in "a".
+
+ DEFINE REDUCE_MAX(src, len) {
+ IF len == 2
+ RETURN (src[31:0] > src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] > src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MAX(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_MAX(a, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed signed 32-bit integers in "a" by minimum. Returns the minimum
+ of all elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[31:0] < src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] < src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_MIN(a, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed signed 64-bit integers in "a" by minimum. Returns the minimum
+ of all elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[63:0] < src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] < src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_MIN(a, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 32-bit integers in "a" by minimum. Returns the
+ minimum of all elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[31:0] < src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] < src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_MIN(a, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed unsigned 64-bit integers in "a" by minimum. Returns the
+ minimum of all elements in "a".
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[63:0] < src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] < src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_MIN(a, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed double-precision (64-bit) floating-point elements in "a" by
+ minimum. Returns the minimum of all elements in "a". [min_float_note]
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[63:0] < src[127:64] ? src[63:0] : src[127:64])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*64
+ src[i+63:i] := (src[i+63:i] < src[i+64*len+63:i+64*len] ? src[i+63:i] :
+ src[i+64*len+63:i+64*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[64*len-1:0], len)
+ }
+ dst[63:0] := REDUCE_MIN(a, 8)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+ Reduce the packed single-precision (32-bit) floating-point elements in "a" by
+ minimum. Returns the minimum of all elements in "a". [min_float_note]
+
+ DEFINE REDUCE_MIN(src, len) {
+ IF len == 2
+ RETURN (src[31:0] < src[63:32] ? src[31:0] : src[63:32])
+ FI
+ len := len / 2
+ FOR j:= 0 to (len-1)
+ i := j*32
+ src[i+31:i] := (src[i+31:i] < src[i+32*len+31:i+32*len] ? src[i+31:i] :
+ src[i+32*len+31:i+32*len])
+ ENDFOR
+ RETURN REDUCE_MIN(src[32*len-1:0], len)
+ }
+ dst[31:0] := REDUCE_MIN(a, 16)
+
+ AVX512F
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF imm8[7:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in sign bits, and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF count[i+31:i] < 32
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by the amount specified by the
+ corresponding element in "count" while shifting in zeros, and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF count[i+31:i] < 32
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Shift
+
+
+
+
+ Cast vector of type __m512d to type __m512.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m512d to type __m512i.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m512 to type __m512d.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m512 to type __m512i.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m512i to type __m512d.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Cast vector of type __m512i to type __m512.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+ AVX512F
+
+ Cast
+
+
+
+
+ Performs element-by-element conversion of the lower half of packed
+ single-precision (32-bit) floating-point elements in "v2" to packed double-precision
+ (64-bit) floating-point elements, storing the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ n := j*64
+ dst[n+63:n] := Convert_FP32_To_FP64(v2[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Performs element-by-element conversion of the lower half of packed
+ single-precision (32-bit) floating-point elements in "v2" to packed double-precision
+ (64-bit) floating-point elements, storing the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[l+63:l] := Convert_FP32_To_FP64(v2[i+31:i])
+ ELSE
+ dst[l+63:l] := src[l+63:l]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Performs element-by-element conversion of the lower half of packed 32-bit
+ integer elements in "v2" to packed double-precision (64-bit) floating-point elements,
+ storing the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ l := j*64
+ dst[l+63:l] := Convert_Int32_To_FP64(v2[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Performs element-by-element conversion of the lower half of packed 32-bit
+ integer elements in "v2" to packed double-precision (64-bit) floating-point elements,
+ storing the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ n := j*64
+ IF k[j]
+ dst[n+63:n] := Convert_Int32_To_FP64(v2[i+31:i])
+ ELSE
+ dst[n+63:n] := src[n+63:n]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Performs element-by-element conversion of the lower half of packed 32-bit
+ unsigned integer elements in "v2" to packed double-precision (64-bit) floating-point
+ elements, storing the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ n := j*64
+ dst[n+63:n] := Convert_Int32_To_FP64(v2[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Performs element-by-element conversion of the lower half of 32-bit unsigned
+ integer elements in "v2" to packed double-precision (64-bit) floating-point elements,
+ storing the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ l := j*64
+ IF k[j]
+ dst[l+63:l] := Convert_Int32_To_FP64(v2[i+31:i])
+ ELSE
+ dst[l+63:l] := src[l+63:l]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+ Performs an element-by-element conversion of packed double-precision (64-bit)
+ floating-point elements in "v2" to single-precision (32-bit) floating-point elements and
+ stores them in "dst". The elements are stored in the lower half of the results vector,
+ while the remaining upper half locations are set to 0.
+
+ FOR j := 0 to 7
+ i := j*64
+ k := j*32
+ dst[k+31:k] := Convert_FP64_To_FP32(v2[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Performs an element-by-element conversion of packed double-precision (64-bit)
+ floating-point elements in "v2" to single-precision (32-bit) floating-point elements and
+ stores them in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set). The elements are stored in the lower half of the
+ results vector, while the remaining upper half locations are set to 0.
+
+ FOR j := 0 to 7
+ i := j*64
+ l := j*32
+ IF k[j]
+ dst[l+31:l] := Convert_FP64_To_FP32(v2[i+63:i])
+ ELSE
+ dst[l+31:l] := src[l+31:l]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Stores 8 packed 64-bit integer elements located in "a" and stores them in
+ memory locations starting at location "base_addr" at packed 32-bit integer indices
+ stored in "vindex" scaled by "scale".
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+
+ Stores 8 packed 64-bit integer elements located in "a" and stores them in
+ memory locations starting at location "base_addr" at packed 32-bit integer indices
+ stored in "vindex" scaled by "scale" using writemask "k" (elements whose corresponding
+ mask bit is not set are not written to memory).
+
+ FOR j := 0 to 7
+ i := j*64
+ m := j*32
+ IF k[j]
+ addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
+ MEM[addr+63:addr] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ AVX512F
+
+ Store
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512IFMA52
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512IFMA52
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512IFMA52
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512IFMA52
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512IFMA52
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512IFMA52
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c"
+ to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the
+ intermediate result with the corresponding unsigned 64-bit integer in "a", and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
+ dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512IFMA52
+
+ Arithmetic
+
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 64-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := POPCNT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 64-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := POPCNT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+ Count the number of logical 1 bits in packed 64-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := POPCNT(a[i+63:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Count the number of logical 1 bits in packed 64-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := POPCNT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 64-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := POPCNT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+ Count the number of logical 1 bits in packed 64-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := POPCNT(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+ Count the number of logical 1 bits in packed 32-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := POPCNT(a[i+31:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 32-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := POPCNT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Count the number of logical 1 bits in packed 32-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := POPCNT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+ Count the number of logical 1 bits in packed 32-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := POPCNT(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 32-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := POPCNT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Count the number of logical 1 bits in packed 32-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := POPCNT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512VPOPCNTDQ
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 32-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := POPCNT(a[i+31:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512VPOPCNTDQ
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 32-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := POPCNT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512VPOPCNTDQ
+
+ Bit Manipulation
+
+
+
+
+
+ Count the number of logical 1 bits in packed 32-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := POPCNT(a[i+31:i])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512VPOPCNTDQ
+
+ Bit Manipulation
+
+
+
+
+ Count the number of logical 1 bits in packed 64-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := POPCNT(a[i+63:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512VPOPCNTDQ
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 64-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := POPCNT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512VPOPCNTDQ
+
+ Bit Manipulation
+
+
+
+
+
+ Count the number of logical 1 bits in packed 64-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := POPCNT(a[i+63:i])
+ ELSE
+ dst[i+63:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512VPOPCNTDQ
+
+ Bit Manipulation
+
+
+
+
+
+
+ Convert packed BF16 (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst". This
+ intrinsic neither raises any floating point exceptions nor turns sNAN into qNAN.
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*16
+ dst[i+31:i] := Convert_BF16_To_FP32(a[m+15:m])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512_BF16
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed BF16 (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This
+ intrinsic neither raises any floating point exceptions nor turns sNAN into qNAN.
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_BF16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512_BF16
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed BF16 (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). This intrinsic neither raises any floating point exceptions nor turns sNAN into
+ qNAN.
+
+ FOR j := 0 to 15
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_BF16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512_BF16
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert the BF16 (16-bit) floating-point element in "a" to a floating-point
+ element, and store the result in "dst". This intrinsic neither raises any floating point
+ exceptions nor turns sNAN into qNAN.
+
+ dst[31:0] := Convert_BF16_To_FP32(a[15:0])
+
+ AVX512_BF16
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in two vectors
+ "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in
+ single vector "dst".
+
+ FOR j := 0 to 31
+ IF j < 16
+ t := b.fp32[j]
+ ELSE
+ t := a.fp32[j-16]
+ FI
+ dst.word[j] := Convert_FP32_To_BF16(t)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BF16
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in two vectors
+ "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in
+ single vector "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF j < 16
+ t := b.fp32[j]
+ ELSE
+ t := a.fp32[j-16]
+ FI
+ dst.word[j] := Convert_FP32_To_BF16(t)
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BF16
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in two vectors
+ "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in
+ single vector "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF j < 16
+ t := b.fp32[j]
+ ELSE
+ t := a.fp32[j-16]
+ FI
+ dst.word[j] := Convert_FP32_To_BF16(t)
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BF16
+ AVX512F
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 15
+ dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BF16
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BF16
+ AVX512F
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BF16
+ AVX512F
+
+ Convert
+
+
+
+
+
+
+ Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b",
+ accumulating the intermediate single-precision (32-bit) floating-point elements with
+ elements in "src", and store the results in "dst".
+
+ DEFINE make_fp32(x[15:0]) {
+ y.fp32 := 0.0
+ y[31:16] := x[15:0]
+ RETURN y
+ }
+ dst := src
+ FOR j := 0 to 15
+ dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
+ dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BF16
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b",
+ accumulating the intermediate single-precision (32-bit) floating-point elements with
+ elements in "src", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE make_fp32(x[15:0]) {
+ y.fp32 := 0.0
+ y[31:16] := x[15:0]
+ RETURN y
+ }
+ dst := src
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
+ dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BF16
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b",
+ accumulating the intermediate single-precision (32-bit) floating-point elements with
+ elements in "src", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ DEFINE make_fp32(x[15:0]) {
+ y.fp32 := 0.0
+ y[31:16] := x[15:0]
+ RETURN y
+ }
+ dst := src
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
+ dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BF16
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Convert packed BF16 (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst". This
+ intrinsic neither raises any floating point exceptions nor turns sNAN into qNAN.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*16
+ dst[i+31:i] := Convert_BF16_To_FP32(a[m+15:m])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed BF16 (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This
+ intrinsic neither raises any floating point exceptions nor turns sNAN into qNAN.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_BF16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed BF16 (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). This intrinsic neither raises any floating point exceptions nor turns sNAN into
+ qNAN.
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_BF16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed BF16 (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst". This
+ intrinsic neither raises any floating point exceptions nor turns sNAN into qNAN.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*16
+ dst[i+31:i] := Convert_BF16_To_FP32(a[m+15:m])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed BF16 (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This
+ intrinsic neither raises any floating point exceptions nor turns sNAN into qNAN.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_BF16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed BF16 (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). This intrinsic neither raises any floating point exceptions nor turns sNAN into
+ qNAN.
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*16
+ IF k[j]
+ dst[i+31:i] := Convert_BF16_To_FP32(a[m+15:m])
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert the single-precision (32-bit) floating-point element in "a" to a BF16
+ (16-bit) floating-point element, and store the result in "dst".
+
+ dst[15:0] := Convert_FP32_To_BF16(a[31:0])
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in two vectors
+ "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in
+ single vector "dst".
+
+ FOR j := 0 to 7
+ IF j < 4
+ t := b.fp32[j]
+ ELSE
+ t := a.fp32[j-4]
+ FI
+ dst.word[j] := Convert_FP32_To_BF16(t)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in two vectors
+ "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in
+ single vector "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ IF j < 4
+ t := b.fp32[j]
+ ELSE
+ t := a.fp32[j-4]
+ FI
+ dst.word[j] := Convert_FP32_To_BF16(t)
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in two vectors
+ "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in
+ single vector "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ IF j < 4
+ t := b.fp32[j]
+ ELSE
+ t := a.fp32[j-4]
+ FI
+ dst.word[j] := Convert_FP32_To_BF16(t)
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in two vectors
+ "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in
+ single vector "dst".
+
+ FOR j := 0 to 15
+ IF j < 8
+ t := b.fp32[j]
+ ELSE
+ t := a.fp32[j-8]
+ FI
+ dst.word[j] := Convert_FP32_To_BF16(t)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in two vectors
+ "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in
+ single vector "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ IF j < 8
+ t := b.fp32[j]
+ ELSE
+ t := a.fp32[j-8]
+ FI
+ dst.word[j] := Convert_FP32_To_BF16(t)
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in two vectors
+ "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in
+ single vector "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ IF j < 8
+ t := b.fp32[j]
+ ELSE
+ t := a.fp32[j-8]
+ FI
+ dst.word[j] := Convert_FP32_To_BF16(t)
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b",
+ accumulating the intermediate single-precision (32-bit) floating-point elements with
+ elements in "src", and store the results in "dst".
+
+ DEFINE make_fp32(x[15:0]) {
+ y.fp32 := 0.0
+ y[31:16] := x[15:0]
+ RETURN y
+ }
+ dst := src
+ FOR j := 0 to 3
+ dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
+ dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b",
+ accumulating the intermediate single-precision (32-bit) floating-point elements with
+ elements in "src", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE make_fp32(x[15:0]) {
+ y.fp32 := 0.0
+ y[31:16] := x[15:0]
+ RETURN y
+ }
+ dst := src
+ FOR j := 0 to 3
+ IF k[j]
+ dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
+ dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b",
+ accumulating the intermediate single-precision (32-bit) floating-point elements with
+ elements in "src", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ DEFINE make_fp32(x[15:0]) {
+ y.fp32 := 0.0
+ y[31:16] := x[15:0]
+ RETURN y
+ }
+ dst := src
+ FOR j := 0 to 3
+ IF k[j]
+ dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
+ dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b",
+ accumulating the intermediate single-precision (32-bit) floating-point elements with
+ elements in "src", and store the results in "dst".
+
+ DEFINE make_fp32(x[15:0]) {
+ y.fp32 := 0.0
+ y[31:16] := x[15:0]
+ RETURN y
+ }
+ dst := src
+ FOR j := 0 to 7
+ dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
+ dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b",
+ accumulating the intermediate single-precision (32-bit) floating-point elements with
+ elements in "src", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ DEFINE make_fp32(x[15:0]) {
+ y.fp32 := 0.0
+ y[31:16] := x[15:0]
+ RETURN y
+ }
+ dst := src
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
+ dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b",
+ accumulating the intermediate single-precision (32-bit) floating-point elements with
+ elements in "src", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ DEFINE make_fp32(x[15:0]) {
+ y.fp32 := 0.0
+ y[31:16] := x[15:0]
+ RETURN y
+ }
+ dst := src
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
+ dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BF16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in
+ "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8
+ corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit
+ element of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR i := 0 to 3 //Qword
+ FOR j := 0 to 7 // Byte
+ IF k[i*8+j]
+ m := c.qword[i].byte[j] & 0x3F
+ dst[i*8+j] := b.qword[i].bit[m]
+ ELSE
+ dst[i*8+j] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in
+ "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8
+ corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit
+ element of "dst".
+
+ FOR i := 0 to 3 //Qword
+ FOR j := 0 to 7 // Byte
+ m := c.qword[i].byte[j] & 0x3F
+ dst[i*8+j] := b.qword[i].bit[m]
+ ENDFOR
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in
+ "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8
+ corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit
+ element of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR i := 0 to 1 //Qword
+ FOR j := 0 to 7 // Byte
+ IF k[i*8+j]
+ m := c.qword[i].byte[j] & 0x3F
+ dst[i*8+j] := b.qword[i].bit[m]
+ ELSE
+ dst[i*8+j] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:16] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in
+ "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8
+ corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit
+ element of "dst".
+
+ FOR i := 0 to 1 //Qword
+ FOR j := 0 to 7 // Byte
+ m := c.qword[i].byte[j] & 0x3F
+ dst[i*8+j] := b.qword[i].bit[m]
+ ENDFOR
+ ENDFOR
+ dst[MAX:16] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+ Count the number of logical 1 bits in packed 16-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := POPCNT(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 16-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := POPCNT(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Count the number of logical 1 bits in packed 16-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := POPCNT(a[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+ Count the number of logical 1 bits in packed 16-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := POPCNT(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 16-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := POPCNT(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Count the number of logical 1 bits in packed 16-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := POPCNT(a[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+ Count the number of logical 1 bits in packed 8-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 31
+ i := j*8
+ dst[i+7:i] := POPCNT(a[i+7:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 8-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := POPCNT(a[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Count the number of logical 1 bits in packed 8-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := POPCNT(a[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+ Count the number of logical 1 bits in packed 8-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := POPCNT(a[i+7:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 8-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := POPCNT(a[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Count the number of logical 1 bits in packed 8-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := POPCNT(a[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_BITALG
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+
+
+ Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in
+ "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8
+ corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit
+ element of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR i := 0 to 7 //Qword
+ FOR j := 0 to 7 // Byte
+ IF k[i*8+j]
+ m := c.qword[i].byte[j] & 0x3F
+ dst[i*8+j] := b.qword[i].bit[m]
+ ELSE
+ dst[i*8+j] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_BITALG
+
+ Bit Manipulation
+
+
+
+
+
+ Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in
+ "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8
+ corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit
+ element of "dst".
+
+ FOR i := 0 to 7 //Qword
+ FOR j := 0 to 7 // Byte
+ m := c.qword[i].byte[j] & 0x3F
+ dst[i*8+j] := b.qword[i].bit[m]
+ ENDFOR
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_BITALG
+
+ Bit Manipulation
+
+
+
+
+ Count the number of logical 1 bits in packed 16-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := POPCNT(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BITALG
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 16-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := POPCNT(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BITALG
+
+ Bit Manipulation
+
+
+
+
+
+ Count the number of logical 1 bits in packed 16-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := POPCNT(a[i+15:i])
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BITALG
+
+ Bit Manipulation
+
+
+
+
+ Count the number of logical 1 bits in packed 8-bit integers in "a", and store
+ the results in "dst".
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 63
+ i := j*8
+ dst[i+7:i] := POPCNT(a[i+7:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BITALG
+
+ Bit Manipulation
+
+
+
+
+
+
+ Count the number of logical 1 bits in packed 8-bit integers in "a", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := POPCNT(a[i+7:i])
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BITALG
+
+ Bit Manipulation
+
+
+
+
+
+ Count the number of logical 1 bits in packed 8-bit integers in "a", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ DEFINE POPCNT(a) {
+ count := 0
+ DO WHILE a > 0
+ count += a[0]
+ a >>= 1
+ OD
+ RETURN count
+ }
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := POPCNT(a[i+7:i])
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_BITALG
+
+ Bit Manipulation
+
+
+
+
+
+ Compute the inverse cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ACOS(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperbolic cosine of packed half-precision (16-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ACOSH(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse sine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ASIN(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperbolic sine of packed half-precision (16-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ASINH(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse tangent of packed half-precision (16-bit) floating-point
+ elements in "a" divided by packed elements in "b", and store the results in "dst"
+ expressed in radians.
+
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ATAN2(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse tangent of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ATAN(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperbolic tangent of packed half-precision (16-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ATANH(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cube root of packed half-precision (16-bit) floating-point elements
+ in "a", and store the results in "dst".
+
+ Elementary Math Functions
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := CubeRoot(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cumulative distribution function of packed half-precision (16-bit)
+ floating-point elements in "a" using the normal distribution, and store the results in
+ "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := CDFNormal(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse cumulative distribution function of packed half-precision
+ (16-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := InverseCDFNormal(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cosine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := COS(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cosine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+
+ Trigonometry
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := COSD(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := COSH(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the error function of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ERF(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the complementary error function of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := 1.0 - ERF(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse complementary error function of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := 1.0 / (1.0 - ERF(a[i+15:i]))
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse error function of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := 1.0 / ERF(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := POW(FP16(10.0), a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of 2 raised to the power of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := POW(FP16(2.0), a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := POW(FP16(e), a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", subtract one from each element,
+ and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := POW(FP16(e), a[i+15:i]) - 1.0
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the length of the hypotenous of a right triangle, with the lengths of
+ the other two sides of the triangle stored as packed half-precision (16-bit)
+ floating-point elements in "a" and "b", and store the results in "dst".
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := SQRT(POW(a[i+15:i], 2.0) + POW(b[i+15:i], 2.0))
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse cube root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := InvCubeRoot(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse square root of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := InvSQRT(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the base-10 logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := LOG(a[i+15:i]) / LOG(10.0)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the natural logarithm of one plus packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := LOG(1.0 + a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the base-2 logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := LOG(a[i+15:i]) / LOG(2.0)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the natural logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := LOG(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision floating-point number representing the integer
+ exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+
+ Elementary Math Functions
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ConvertExpFP16(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of packed half-precision (16-bit) floating-point
+ elements in "a" raised by packed elements in "b", and store the results in "dst".
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := POW(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := SIN(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine and cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", and store the cosine into
+ memory at "mem_addr".
+
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := SIN(a[i+15:i])
+ MEM[mem_addr+i+15:mem_addr+i] := COS(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+ cos_res[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+
+ Trigonometry
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := SIND(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic sine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := SINH(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed half-precision floating-point elements
+ in "dst".
+
+ Special Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := CEIL(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" down to
+ an integer value, and store the results as packed half-precision floating-point elements
+ in "dst".
+
+ Special Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := FLOOR(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" to the
+ nearest integer value, and store the results as packed half-precision floating-point
+ elements in "dst".
+
+ Special Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ROUND(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst". Note that this intrinsic is less
+ efficient than "_mm_sqrt_ps".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := SQRT(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the tangent of packed half-precision (16-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := TAN(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the tangent of packed half-precision (16-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+
+ Trigonometry
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := TAND(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic tangent of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := TANH(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Truncate the packed half-precision (16-bit) floating-point elements in "a", and
+ store the results as packed half-precision floating-point elements in "dst"
+
+ Special Math Functions
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := TRUNCATE(a[i+15:i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ACOS(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperbolic cosine of packed half-precision (16-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ACOSH(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse sine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ASIN(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperbolic sine of packed half-precision (16-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ASINH(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse tangent of packed half-precision (16-bit) floating-point
+ elements in "a" divided by packed elements in "b", and store the results in "dst"
+ expressed in radians.
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ATAN2(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse tangent of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" expressed in radians.
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ATAN(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperblic tangent of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst" expressed in radians.
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ATANH(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cube root of packed half-precision (16-bit) floating-point elements
+ in "a", and store the results in "dst".
+
+ Elementary Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := CubeRoot(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cumulative distribution function of packed half-precision (16-bit)
+ floating-point elements in "a" using the normal distribution, and store the results in
+ "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := CDFNormal(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse cumulative distribution function of packed half-precision
+ (16-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := InverseCDFNormal(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed half-precision floating-point elements
+ in "dst".
+
+ Special Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := CEIL(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cosine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := COS(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cosine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+
+ Trigonometry
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := COSD(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := COSH(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the error function of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ERF(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the complementary error function of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := 1.0 - ERF(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse complementary error function of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := 1.0 / (1.0 - ERF(a[i+15:i]))
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse error function of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := 1.0 / ERF(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := POW(FP16(10.0), a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of 2 raised to the power of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := POW(FP16(2.0), a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := POW(FP16(e), a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", subtract one from each element,
+ and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := POW(FP16(e), a[i+15:i]) - 1.0
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" down to
+ an integer value, and store the results as packed half-precision floating-point elements
+ in "dst".
+
+ Special Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := FLOOR(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the length of the hypotenous of a right triangle, with the lengths of
+ the other two sides of the triangle stored as packed half-precision (16-bit)
+ floating-point elements in "a" and "b", and store the results in "dst".
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := SQRT(POW(a[i+15:i], 2.0) + POW(b[i+15:i], 2.0))
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse square root of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := InvSQRT(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the base-10 logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := LOG(a[i+15:i]) / LOG(10.0)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the natural logarithm of one plus packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := LOG(1.0 + a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the base-2 logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := LOG(a[i+15:i]) / LOG(2.0)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the natural logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := LOG(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision floating-point number representing the integer
+ exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+
+ Elementary Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ConvertExpFP16(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ACOS(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperbolic cosine of packed half-precision (16-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ACOSH(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse sine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ASIN(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperbolic sine of packed half-precision (16-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ASINH(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse tangent of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ATAN(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperbolic tangent of packed half-precision (16-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ATANH(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cube root of packed half-precision (16-bit) floating-point elements
+ in "a", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+
+
+ Elementary Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := CubeRoot(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cumulative distribution function of packed half-precision (16-bit)
+ floating-point elements in "a" using the normal distribution, and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := CDFNormal(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse cumulative distribution function of packed half-precision
+ (16-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := InverseCDFNormal(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed half-precision floating-point elements
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+
+
+ Special Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := CEIL(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cosine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := COS(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cosine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := COSD(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := COSH(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the error function of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ERF(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the complementary error function of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := 1.0 - ERF(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse complementary error function of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := 1.0 / (1.0 - ERF(a[i+15:i]))
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse error function of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Probability/Statistics
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := 1.0 / ERF(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := POW(FP16(10.0), a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of 2 raised to the power of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := POW(FP16(2.0), a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := POW(FP16(e), a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", subtract one from each element,
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := POW(FP16(e), a[i+15:i]) - 1.0
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" down to
+ an integer value, and store the results as packed half-precision floating-point elements
+ in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+
+
+ Special Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := FLOOR(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse square root of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Elementary Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := InvSQRT(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the base-10 logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := LOG(a[i+15:i]) / LOG(10.0)
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the natural logarithm of one plus packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := LOG(1.0 + a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the base-2 logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := LOG(a[i+15:i]) / LOG(2.0)
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the natural logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := LOG(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision floating-point number representing the integer
+ exponent, and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+
+
+
+ Elementary Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ConvertExpFP16(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Rounds each packed half-precision (16-bit) floating-point element in "a" to the
+ nearest integer value and stores the results as packed half-precision floating-point
+ elements in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+
+
+ Special Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := NearbyInt(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Computes the reciprocal of packed half-precision (16-bit) floating-point
+ elements in "a", storing the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := (1.0 / a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Rounds the packed half-precision (16-bit) floating-point elements in "a" to the
+ nearest even integer value and stores the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Special Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := RoundToNearestEven(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SIN(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine and cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", store the cosine into
+ memory at "mem_addr". Elements are written to their respective locations using writemask
+ "k" (elements are copied from "sin_src" or "cos_src" when the corresponding mask bit is
+ not set).
+
+
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SIN(a[i+15:i])
+ MEM[mem_addr+i+15:mem_addr+i] := COS(a[i+15:i])
+ ELSE
+ dst[i+15:i] := sin_src[i+15:i]
+ MEM[mem_addr+i+15:mem_addr+i] := cos_src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+ cos_res[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SIND(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic sine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := SINH(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" to the
+ nearest integer value, and store the results as packed half-precision floating-point
+ elements in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+
+
+ Special Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ROUND(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the tangent of packed half-precision (16-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := TAN(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the tangent of packed half-precision (16-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := TAND(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic tangent of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := TANH(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Truncate the packed half-precision (16-bit) floating-point elements in "a", and
+ store the results as packed half-precision floating-point elements in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+
+
+ Special Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := TRUNCATE(a[i+15:i])
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Rounds each packed half-precision (16-bit) floating-point element in "a" to the
+ nearest integer value and stores the results as packed half-precision floating-point
+ elements in "dst".
+
+ Special Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := NearbyInt(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of packed half-precision (16-bit) floating-point
+ elements in "a" raised by packed elements in "b", and store the results in "dst".
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := POW(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Computes the reciprocal of packed half-precision (16-bit) floating-point
+ elements in "a", storing the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := (1.0 / a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Rounds the packed half-precision (16-bit) floating-point elements in "a" to the
+ nearest even integer value and stores the results in "dst".
+
+ Special Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := RoundToNearestEven(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := SIN(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine and cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", and store the cosine into
+ memory at "mem_addr".
+
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := SIN(a[i+15:i])
+ MEM[mem_addr+i+15:mem_addr+i] := COS(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+ cos_res[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+
+ Trigonometry
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := SIND(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic sine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := SINH(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" to the
+ nearest integer value, and store the results as packed half-precision floating-point
+ elements in "dst".
+
+ Special Math Functions
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ROUND(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the tangent of packed half-precision (16-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := TAN(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the tangent of packed half-precision (16-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+
+ Trigonometry
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := TAND(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic tangent of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := TANH(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Truncate the packed half-precision (16-bit) floating-point elements in "a", and
+ store the results as packed half-precision floating-point elements in "dst".
+
+ Special Math Functions
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := TRUNCATE(a[i+15:i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ACOS(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperbolic cosine of packed half-precision (16-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ACOSH(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse sine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ASIN(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperbolic sine of packed half-precision (16-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ASINH(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse tangent of packed half-precision (16-bit) floating-point
+ elements in "a" divided by packed elements in "b", and store the results in "dst"
+ expressed in radians.
+
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ATAN2(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse tangent of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ATAN(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse hyperbolic tangent of packed half-precision (16-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ATANH(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cube root of packed half-precision (16-bit) floating-point elements
+ in "a", and store the results in "dst".
+
+ Elementary Math Functions
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := CubeRoot(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cumulative distribution function of packed half-precision (16-bit)
+ floating-point elements in "a" using the normal distribution, and store the results in
+ "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := CDFNormal(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse cumulative distribution function of packed half-precision
+ (16-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := InverseCDFNormal(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cosine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := COS(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the cosine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+
+ Trigonometry
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := COSD(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := COSH(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the error function of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ERF(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the complementary error function of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := 1.0 - ERF(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse complementary error function of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := 1.0 / (1.0 - ERF(a[i+15:i]))
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse error function of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Probability/Statistics
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := 1.0 / ERF(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := POW(FP16(10.0), a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of 2 raised to the power of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := POW(FP16(2.0), a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := POW(FP16(e), a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ half-precision (16-bit) floating-point elements in "a", subtract one from each element,
+ and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := POW(FP16(e), a[i+15:i]) - 1.0
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the length of the hypotenous of a right triangle, with the lengths of
+ the other two sides of the triangle stored as packed half-precision (16-bit)
+ floating-point elements in "a" and "b", and store the results in "dst".
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := SQRT(POW(a[i+15:i], 2.0) + POW(b[i+15:i], 2.0))
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse cube root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := InvCubeRoot(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the inverse square root of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := InvSQRT(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the base-10 logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := LOG(a[i+15:i]) / LOG(10.0)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the natural logarithm of one plus packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := LOG(1.0 + a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the base-2 logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := LOG(a[i+15:i]) / LOG(2.0)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the natural logarithm of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := LOG(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision floating-point number representing the integer
+ exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+
+ Elementary Math Functions
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ConvertExpFP16(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the exponential value of packed half-precision (16-bit) floating-point
+ elements in "a" raised by packed elements in "b", and store the results in "dst".
+
+
+ Elementary Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := POW(a[i+15:i], b[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := SIN(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine and cosine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", and store the cosine into
+ memory at "mem_addr".
+
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := SIN(a[i+15:i])
+ MEM[mem_addr+i+15:mem_addr+i] := COS(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+ cos_res[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the sine of packed half-precision (16-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+
+ Trigonometry
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := SIND(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic sine of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := SINH(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed half-precision floating-point elements
+ in "dst".
+
+ Special Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := CEIL(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" down to
+ an integer value, and store the results as packed half-precision floating-point elements
+ in "dst".
+
+ Special Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := FLOOR(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Round the packed half-precision (16-bit) floating-point elements in "a" to the
+ nearest integer value, and store the results as packed half-precision floating-point
+ elements in "dst".
+
+ Special Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ROUND(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst". Note that this intrinsic is less
+ efficient than "_mm_sqrt_ps".
+
+ Elementary Math Functions
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := SQRT(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the tangent of packed half-precision (16-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := TAN(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the tangent of packed half-precision (16-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+
+ Trigonometry
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := TAND(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Compute the hyperbolic tangent of packed half-precision (16-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ Trigonometry
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := TANH(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+ Truncate the packed half-precision (16-bit) floating-point elements in "a", and
+ store the results as packed half-precision floating-point elements in "dst".
+
+ Special Math Functions
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := TRUNCATE(a[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst".
+
+ FOR j := 0 to 7
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using writemask "k" (elements are copied from "a" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using writemask "k" (elements are copied from "c" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst".
+
+ FOR j := 0 to 15
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using writemask "k" (elements are copied from "a" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using writemask "k" (elements are copied from "c" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+
+ FOR j := 0 to 15
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "a" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "c" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "a" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "c" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "a" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "c" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst".
+
+ FOR j := 0 to 15
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "a" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "c" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 TO 15
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+
+ FOR i := 0 TO 7
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR i := 0 TO 7
+ IF k[i]
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR i := 0 TO 7
+ IF k[i]
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+
+ FOR i := 0 TO 15
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR i := 0 TO 15
+ IF k[i]
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR i := 0 TO 15
+ IF k[i]
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := a.fp16[2*i+0]
+ dst.fp16[2*i+1] := a.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst" using writemask "k" (elements are
+ copied from "c" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := c.fp16[2*i+0]
+ dst.fp16[2*i+1] := c.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := a.fp16[2*i+0]
+ dst.fp16[2*i+1] := a.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst" using writemask "k" (elements are
+ copied from "c" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := c.fp16[2*i+0]
+ dst.fp16[2*i+1] := c.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst". Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := a.fp16[2*i+0]
+ dst.fp16[2*i+1] := a.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := c.fp16[2*i+0]
+ dst.fp16[2*i+1] := c.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 3
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst". Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := a.fp16[2*i+0]
+ dst.fp16[2*i+1] := a.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := c.fp16[2*i+0]
+ dst.fp16[2*i+1] := c.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (16-bit) floating-point elements in "a" by
+ addition. Returns the sum of all elements in "a".
+
+ tmp := a
+ FOR i := 0 to 7
+ tmp.fp16[i] := tmp.fp16[i] + tmp.fp16[i+8]
+ ENDFOR
+ FOR i := 0 to 3
+ tmp.fp16[i] := tmp.fp16[i] + tmp.fp16[i+4]
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := tmp.fp16[i] + tmp.fp16[i+2]
+ ENDFOR
+ dst.fp16[0] := tmp.fp16[0] + tmp.fp16[1]
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (316-bit) floating-point elements in "a" by
+ multiplication. Returns the product of all elements in "a".
+
+ tmp := a
+ FOR i := 0 to 7
+ tmp.fp16[i] := tmp.fp16[i] * tmp.fp16[i+8]
+ ENDFOR
+ FOR i := 0 to 3
+ tmp.fp16[i] := tmp.fp16[i] * tmp.fp16[i+4]
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := tmp.fp16[i] * tmp.fp16[i+2]
+ ENDFOR
+ dst.fp16[0] := tmp.fp16[0] * tmp.fp16[1]
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (16-bit) floating-point elements in "a" by
+ maximum. Returns the maximum of all elements in "a".
+
+ tmp := a
+ FOR i := 0 to 7
+ tmp.fp16[i] := (tmp.fp16[i] > tmp.fp16[i+8] ? tmp.fp16[i] : tmp.fp16[i+8])
+ ENDFOR
+ FOR i := 0 to 3
+ tmp.fp16[i] := (tmp.fp16[i] > tmp.fp16[i+4] ? tmp.fp16[i] : tmp.fp16[i+4])
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := (tmp.fp16[i] > tmp.fp16[i+2] ? tmp.fp16[i] : tmp.fp16[i+2])
+ ENDFOR
+ dst.fp16[0] := (tmp.fp16[0] > tmp.fp16[1] ? tmp.fp16[0] : tmp.fp16[1])
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (16-bit) floating-point elements in "a" by
+ minimum. Returns the minimum of all elements in "a".
+
+ tmp := a
+ FOR i := 0 to 7
+ tmp.fp16[i] := (tmp.fp16[i] < tmp.fp16[i+8] ? tmp.fp16[i] : tmp.fp16[i+8])
+ ENDFOR
+ FOR i := 0 to 3
+ tmp.fp16[i] := (tmp.fp16[i] < tmp.fp16[i+4] ? tmp.fp16[i] : tmp.fp16[i+4])
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := (tmp.fp16[i] < tmp.fp16[i+2] ? tmp.fp16[i] : tmp.fp16[i+2])
+ ENDFOR
+ dst.fp16[0] := (tmp.fp16[0] < tmp.fp16[1] ? tmp.fp16[0] : tmp.fp16[1])
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (16-bit) floating-point elements in "a" by
+ addition. Returns the sum of all elements in "a".
+
+ tmp := a
+ FOR i := 0 to 3
+ tmp.fp16[i] := tmp.fp16[i] + tmp.fp16[i+4]
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := tmp.fp16[i] + tmp.fp16[i+2]
+ ENDFOR
+ dst.fp16[0] := tmp.fp16[0] + tmp.fp16[1]
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (16-bit) floating-point elements in "a" by
+ multiplication. Returns the product of all elements in "a".
+
+ tmp := a
+ FOR i := 0 to 3
+ tmp.fp16[i] := tmp.fp16[i] * tmp.fp16[i+4]
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := tmp.fp16[i] * tmp.fp16[i+2]
+ ENDFOR
+ dst.fp16[0] := tmp.fp16[0] * tmp.fp16[1]
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (16-bit) floating-point elements in "a" by
+ maximum. Returns the maximum of all elements in "a".
+
+ tmp := a
+ FOR i := 0 to 3
+ tmp.fp16[i] := (tmp.fp16[i] > tmp.fp16[i+4] ? tmp.fp16[i] : tmp.fp16[i+4])
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := (tmp.fp16[i] > tmp.fp16[i+2] ? tmp.fp16[i] : tmp.fp16[i+2])
+ ENDFOR
+ dst.fp16[0] := (tmp.fp16[0] > tmp.fp16[1] ? tmp.fp16[0] : tmp.fp16[1])
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (16-bit) floating-point elements in "a" by
+ minimum. Returns the minimum of all elements in "a".
+
+ tmp := a
+ FOR i := 0 to 3
+ tmp.fp16[i] := (tmp.fp16[i] < tmp.fp16[i+4] ? tmp.fp16[i] : tmp.fp16[i+4])
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := (tmp.fp16[i] < tmp.fp16[i+2] ? tmp.fp16[i] : tmp.fp16[i+2])
+ ENDFOR
+ dst.fp16[0] := (tmp.fp16[0] < tmp.fp16[1] ? tmp.fp16[0] : tmp.fp16[1])
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Finds the absolute value of each packed half-precision (16-bit) floating-point
+ element in "v2", storing the results in "dst".
+
+ FOR j := 0 to 15
+ dst.fp16[j] := ABS(v2.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Finds the absolute value of each packed half-precision (16-bit) floating-point
+ element in "v2", storing the results in "dst".
+
+ FOR j := 0 to 7
+ dst.fp16[j] := ABS(v2.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the complex conjugates of complex numbers in "a", and store the results
+ in "dst". Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := a[i+31:i] XOR FP32(-0.0)
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+ Compute the complex conjugates of complex numbers in "a", and store the results
+ in "dst". Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[i+31:i] XOR FP32(-0.0)
+ ENDFOR
+ dst[MAX:128] := 0
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the complex conjugates of complex numbers in "a", and store the results
+ in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask
+ bit is not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR FP32(-0.0)
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the complex conjugates of complex numbers in "a", and store the results
+ in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask
+ bit is not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR FP32(-0.0)
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the complex conjugates of complex numbers in "a", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR FP32(-0.0)
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Compute the complex conjugates of complex numbers in "a", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR FP32(-0.0)
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+ AVX512_FP16
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 7
+ k[j] := (a.fp16[j] OP b.fp16[j]) ? 1 : 0
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 7
+ IF k1[j]
+ k[j] := ( a.fp16[j] OP b.fp16[j] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 15
+ k[j] := (a.fp16[j] OP b.fp16[j]) ? 1 : 0
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 15
+ IF k1[j]
+ k[j] := ( a.fp16[j] OP b.fp16[j] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Compare
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst". The upper 64 bits of "dst" are
+ zeroed out.
+
+ FOR j := 0 TO 3
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set). The upper 64 bits of
+ "dst" are zeroed out.
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). The upper 64 bits of "dst" are
+ zeroed out.
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst". The upper 64 bits of
+ "dst" are zeroed out.
+
+ FOR j := 0 TO 3
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The upper
+ 64 bits of "dst" are zeroed out.
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The upper 64 bits
+ of "dst" are zeroed out.
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst". The upper 96 bits of "dst" are
+ zeroed out.
+
+ FOR j := 0 TO 1
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set). The upper 96 bits of
+ "dst" are zeroed out.
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). The upper 96 bits of "dst" are
+ zeroed out.
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst". The upper 64 bits of "dst" are
+ zeroed out.
+
+ FOR j := 0 TO 3
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set). The upper 64 bits of
+ "dst" are zeroed out.
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). The upper 64 bits of "dst" are
+ zeroed out.
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst". The upper 96 bits of
+ "dst" are zeroed out.
+
+ FOR j := 0 TO 1
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The upper
+ 96 bits of "dst" are zeroed out.
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The upper 96 bits
+ of "dst" are zeroed out.
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst". The upper 64 bits of
+ "dst" are zeroed out.
+
+ FOR j := 0 TO 3
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The upper
+ 64 bits of "dst" are zeroed out.
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The upper 64 bits
+ of "dst" are zeroed out.
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+ The upper 96 bits of "dst" are zeroed out.
+
+ FOR j := 0 TO 1
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). The upper 96 bits of "dst" are zeroed out.
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ The upper 96 bits of "dst" are zeroed out.
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:32] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+ The upper 64 bits of "dst" are zeroed out.
+
+ FOR j := 0 TO 3
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). The upper 64 bits of "dst" are zeroed out.
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ The upper 64 bits of "dst" are zeroed out.
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+ The upper 64 bits of "dst" are zeroed out.
+
+ FOR j := 0 to 3
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). The upper 64 bits of "dst" are zeroed out.
+
+ FOR j := 0 to 3
+ IF k[j]
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ The upper 64 bits of "dst" are zeroed out.
+
+ FOR j := 0 to 3
+ IF k[j]
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 3
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 3
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 3
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 3
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 1
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 3
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 1
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 3
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 1
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 3
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 1
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 1
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 3
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 3
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 1
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ IF k[j]
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ELSE
+ dst.fp64[j] := src.fp64[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ IF k[j]
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ELSE
+ dst.fp64[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ELSE
+ dst.fp64[j] := src.fp64[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ELSE
+ dst.fp64[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ELSE
+ dst.fp32[j] := src.fp32[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ELSE
+ dst.fp32[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ELSE
+ dst.fp32[j] := src.fp32[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ELSE
+ dst.fp32[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Convert
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst". [max_float_note]
+
+ FOR j := 0 to 7
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst". [max_float_note]
+
+ FOR j := 0 to 15
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst", and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst". [max_float_note]
+
+ dst.fp16[0] := (a.fp16[0] > b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] > b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] > b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst", and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst". [sae_note][max_float_note]
+
+ dst.fp16[0] := (a.fp16[0] > b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst". [sae_note][max_float_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] > b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst". [sae_note][max_float_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] > b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst". [min_float_note]
+
+ FOR j := 0 to 7
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst". [min_float_note]
+
+ FOR j := 0 to 15
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst", and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst". [min_float_note]
+
+ dst.fp16[0] := (a.fp16[0] < b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] < b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] < b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst", and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst". [sae_note][min_float_note]
+
+ dst.fp16[0] := (a.fp16[0] < b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst". [sae_note][min_float_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] < b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst". [sae_note][min_float_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] < b.fp16[0] ? a.fp16[0] : b.fp16[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Special Math Functions
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 7
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ENDFOR
+ dest[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dest[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dest[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 15
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ENDFOR
+ dest[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dest[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dest[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR i := 0 to 7
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element.
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR i := 0 to 15
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element.
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ FOR i := 0 TO 7
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "norm" and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ FOR i := 0 TO 7
+ IF k[i]
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ FOR i := 0 TO 7
+ IF k[i]
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ FOR i := 0 TO 15
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "norm" and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ FOR i := 0 TO 15
+ IF k[i]
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ FOR i := 0 TO 15
+ IF k[i]
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 7
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 15
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 7
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 15
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Test packed half-precision (16-bit) floating-point elements in "a" for special
+ categories specified by "imm8", and store the results in mask vector "k".
+ [fpclass_note]
+ FOR i := 0 to 7
+ k[i] := CheckFPClass_FP16(a.fp16[i], imm8[7:0])
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Test packed half-precision (16-bit) floating-point elements in "a" for special
+ categories specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ [fpclass_note]
+ FOR i := 0 to 7
+ IF k1[i]
+ k[i] := CheckFPClass_FP16(a.fp16[i], imm8[7:0])
+ ELSE
+ k[i] := 0
+ FI
+ ENDFOR
+ k[MAX:8] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Test packed half-precision (16-bit) floating-point elements in "a" for special
+ categories specified by "imm8", and store the results in mask vector "k".
+ [fpclass_note]
+ FOR i := 0 to 15
+ k[i] := CheckFPClass_FP16(a.fp16[i], imm8[7:0])
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Test packed half-precision (16-bit) floating-point elements in "a" for special
+ categories specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ [fpclass_note]
+ FOR i := 0 to 15
+ IF k1[i]
+ k[i] := CheckFPClass_FP16(a.fp16[i], imm8[7:0])
+ ELSE
+ k[i] := 0
+ FI
+ ENDFOR
+ k[MAX:16] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle half-precision (16-bit) floating-point elements in "a" and "b" using
+ the corresponding selector and index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ off := idx[i+2:i]
+ dst.fp16[j] := idx[i+3] ? b.fp16[off] : a.fp16[off]
+ ENDFOR
+ dst[MAX:128] := 0
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle half-precision (16-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ off := idx[i+3:i]
+ dst.fp16[j] := idx[i+4] ? b.fp16[off] : a.fp16[off]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed half-precision (16-bit) floating-point elements from "a" and "b"
+ using control mask "k", and store the results in "dst".
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := b.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed half-precision (16-bit) floating-point elements from "a" and "b"
+ using control mask "k", and store the results in "dst".
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp16[j] := b.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle half-precision (16-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ id := idx[i+3:i]
+ dst.fp16[j] := a.fp16[id]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle half-precision (16-bit) floating-point elements in "a" using the
+ corresponding index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ id := idx[i+2:i]
+ dst.fp16[j] := a.fp16[id]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Miscellaneous
+
+
+
+
+ Compute the approximate reciprocal square root of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst". The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 7
+ dst.fp16[i] := (1.0 / SQRT(a.fp16[i]))
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set). The
+ maximum relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := (1.0 / SQRT(a.fp16[i]))
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := (1.0 / SQRT(a.fp16[i]))
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal square root of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst". The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 15
+ dst.fp16[i] := (1.0 / SQRT(a.fp16[i]))
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set). The
+ maximum relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := (1.0 / SQRT(a.fp16[i]))
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := (1.0 / SQRT(a.fp16[i]))
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR i := 0 to 7
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR i := 0 to 15
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst". The maximum relative
+ error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 7
+ dst.fp16[i] := (1.0 / a.fp16[i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := (1.0 / a.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 7
+ IF k[i]
+ dst.fp16[i] := (1.0 / a.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst". The maximum relative
+ error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 15
+ dst.fp16[i] := (1.0 / a.fp16[i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := (1.0 / a.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := (1.0 / a.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Elementary Math Functions
+
+
+
+
+ Load 256-bits (composed of 16 packed half-precision (16-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 8 packed half-precision (16-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 256-bits (composed of 16 packed half-precision (16-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[255:0] := MEM[mem_addr+255:mem_addr]
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 8 packed half-precision (16-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Store 256-bits (composed of 16 packed half-precision (16-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 8 packed half-precision (16-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 256-bits (composed of 16 packed half-precision (16-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+255:mem_addr] := a[255:0]
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 8 packed half-precision (16-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Store
+
+
+
+
+ Return vector of type __m256h with undefined elements.
+ AVX512_FP16
+ AVX512VL
+
+ General Support
+
+
+
+
+ Return vector of type __m128h with undefined elements.
+ AVX512_FP16
+ AVX512VL
+
+ General Support
+
+
+
+
+ Return vector of type __m256h with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Set
+
+
+
+
+ Return vector of type __m128h with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ AVX512_FP16
+ AVX512VL
+
+ Set
+
+
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+
+ FOR j := 0 TO 31
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 31
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add packed half-precision (16-bit) floating-point elements in "a" and "b", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] + b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Add the lower half-precision (16-bit) floating-point elements in "a" and "b",
+ store the result in the lower element of "dst", and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst".
+
+ dst.fp16[0] := a.fp16[0] + b.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Add the lower half-precision (16-bit) floating-point elements in "a" and "b",
+ store the result in the lower element of "dst", and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := a.fp16[0] + b.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add the lower half-precision (16-bit) floating-point elements in "a" and "b",
+ store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper 7 packed elements from
+ "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] + b.fp16[0]
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Add the lower half-precision (16-bit) floating-point elements in "a" and "b",
+ store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper 7 packed elements from
+ "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] + b.fp16[0]
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Add the lower half-precision (16-bit) floating-point elements in "a" and "b",
+ store the result in the lower element of "dst" using zeromask "k" (the element is zeroed
+ out when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the
+ upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] + b.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add the lower half-precision (16-bit) floating-point elements in "a" and "b",
+ store the result in the lower element of "dst" using zeromask "k" (the element is zeroed
+ out when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the
+ upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] + b.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 31
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 31
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide packed half-precision (16-bit) floating-point elements in "a" by packed
+ elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] / b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Divide the lower half-precision (16-bit) floating-point element in "a" by the
+ lower half-precision (16-bit) floating-point element in "b", store the result in the
+ lower element of "dst", and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+
+ dst.fp16[0] := a.fp16[0] / b.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide the lower half-precision (16-bit) floating-point element in "a" by the
+ lower half-precision (16-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper elements
+ of "dst".
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] / b.fp16[0]
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Divide the lower half-precision (16-bit) floating-point element in "a" by the
+ lower half-precision (16-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] / b.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Divide the lower half-precision (16-bit) floating-point element in "a" by the
+ lower half-precision (16-bit) floating-point element in "b", store the result in the
+ lower element of "dst", and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := a.fp16[0] / b.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Divide the lower half-precision (16-bit) floating-point element in "a" by the
+ lower half-precision (16-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper elements
+ of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] / b.fp16[0]
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Divide the lower half-precision (16-bit) floating-point element in "a" by the
+ lower half-precision (16-bit) floating-point element in "b", store the result in the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] / b.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst".
+
+ FOR j := 0 to 31
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using writemask "k" (elements are copied from "a" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using writemask "k" (elements are copied from "c" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 31
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using writemask "k" (elements are copied from "a" when the corresponding mask bit is not
+ set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using writemask "k" (elements are copied from "c" when the corresponding mask bit is not
+ set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the intermediate result to packed elements in "c", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst", and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "a" when mask
+ bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper elements
+ of "dst".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "c" when mask
+ bit 0 is not set), and copy the upper 7 packed elements from "c" to the upper elements
+ of "dst".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ FI
+ dst[127:16] := c[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0
+ is not set), and copy the upper 7 packed elements from "a" to the upper elements of
+ "dst".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst", and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "a" when mask
+ bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper elements
+ of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using writemask "k" (the element is copied from "c" when mask
+ bit 0 is not set), and copy the upper 7 packed elements from "c" to the upper elements
+ of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ FI
+ dst[127:16] := c[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0
+ is not set), and copy the upper 7 packed elements from "a" to the upper elements of
+ "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst".
+
+ FOR j := 0 to 31
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst".
+ [round_note]
+
+ FOR j := 0 to 31
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ add the negated intermediate result to packed elements in "c", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst", and copy the upper 7 packed elements from "a" to
+ the upper elements of "dst".
+
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper 7 packed elements from "c" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ FI
+ dst[127:16] := c[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst", and copy the upper 7 packed elements from "a" to
+ the upper elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper 7 packed elements from "c" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ FI
+ dst[127:16] := c[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) + c.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst".
+
+ FOR j := 0 to 31
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst".
+ [round_note]
+
+ FOR j := 0 to 31
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit
+ is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit
+ is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the intermediate result, and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst", and copy the upper 7 packed elements from "a" to
+ the upper elements of "dst".
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper 7 packed elements from "c" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ FI
+ dst[127:16] := c[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst", and copy the upper 7 packed elements from "a" to
+ the upper elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "a"
+ when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from "c"
+ when mask bit 0 is not set), and copy the upper 7 packed elements from "c" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ FI
+ dst[127:16] := c[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+
+ FOR j := 0 to 31
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+ [round_note]
+
+ FOR j := 0 to 31
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask
+ bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := -(a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst", and copy the upper 7 packed elements from "a"
+ to the upper elements of "dst".
+
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using writemask "k" (the element is copied from
+ "a" when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the
+ upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using writemask "k" (the element is copied from
+ "c" when mask bit 0 is not set), and copy the upper 7 packed elements from "c" to the
+ upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ FI
+ dst[127:16] := c[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using zeromask "k" (the element is zeroed out
+ when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst", and copy the upper 7 packed elements from "a"
+ to the upper elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using writemask "k" (the element is copied from
+ "a" when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the
+ upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using writemask "k" (the element is copied from
+ "c" when mask bit 0 is not set), and copy the upper 7 packed elements from "c" to the
+ upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ FI
+ dst[127:16] := c[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst" using zeromask "k" (the element is zeroed out
+ when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := -(a.fp16[0] * b.fp16[0]) - c.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst".
+
+ FOR j := 0 to 31
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "a" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "c" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 31
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "a" when
+ the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "c" when
+ the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively add and subtract packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst".
+
+ FOR j := 0 to 31
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "a" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "c" when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 31
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "a" when
+ the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using writemask "k" (elements are copied from "c" when
+ the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := c.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ alternatively subtract and add packed elements in "c" to/from the intermediate result,
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ IF ((j & 1) == 0)
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) + c.fp16[j]
+ ELSE
+ dst.fp16[j] := (a.fp16[j] * b.fp16[j]) - c.fp16[j]
+ FI
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 TO 31
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst".
+ [round_note]
+
+ FOR j := 0 TO 31
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract packed half-precision (16-bit) floating-point elements in "b" from
+ packed half-precision (16-bit) floating-point elements in "a", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+ [round_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := a.fp16[j] - b.fp16[j]
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Subtract the lower half-precision (16-bit) floating-point element in "b" from
+ the lower half-precision (16-bit) floating-point element in "a", store the result in the
+ lower element of "dst", and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+
+ dst.fp16[0] := a.fp16[0] - b.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract the lower half-precision (16-bit) floating-point element in "b" from
+ the lower half-precision (16-bit) floating-point element in "a", store the result in the
+ lower element of "dst", and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := a.fp16[0] - b.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract the lower half-precision (16-bit) floating-point element in "b" from
+ the lower half-precision (16-bit) floating-point element in "a", store the result in the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper elements
+ of "dst".
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] - b.fp16[0]
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Subtract the lower half-precision (16-bit) floating-point element in "b" from
+ the lower half-precision (16-bit) floating-point element in "a", store the result in the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper elements
+ of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] - b.fp16[0]
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Subtract the lower half-precision (16-bit) floating-point element in "b" from
+ the lower half-precision (16-bit) floating-point element in "a", store the result in the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] - b.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Subtract the lower half-precision (16-bit) floating-point element in "b" from
+ the lower half-precision (16-bit) floating-point element in "a", store the result in the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] - b.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+
+ FOR i := 0 TO 31
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+ [round_note]
+
+ FOR i := 0 TO 31
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+
+ FOR i := 0 TO 31
+ IF k[i]
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using writemask "k" (elements are copied from "src" when
+ the corresponding mask bit is not set).
+ [round_note]
+
+ FOR i := 0 TO 31
+ IF k[i]
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR i := 0 TO 31
+ IF k[i]
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+ [round_note]
+
+ FOR i := 0 TO 31
+ IF k[i]
+ dst.fp16[i] := a.fp16[i] * b.fp16[i]
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst", and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst".
+
+ dst.fp16[0] := a.fp16[0] * b.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst", and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := a.fp16[0] * b.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper 7 packed elements from
+ "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] * b.fp16[0]
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using writemask "k" (the element is
+ copied from "src" when mask bit 0 is not set), and copy the upper 7 packed elements from
+ "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] * b.fp16[0]
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using zeromask "k" (the element is
+ zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to
+ the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] * b.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower half-precision (16-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst" using zeromask "k" (the element is
+ zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to
+ the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := a.fp16[0] * b.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst", and copy the upper 6 packed elements from "a" to the upper
+ elements of "dst". Each complex number is composed of two adjacent half-precision
+ (16-bit) floating-point elements, which defines the complex number "complex =
+ vec.fp16[0] + i * vec.fp16[1]".
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst", and copy the upper 6 packed elements from "a" to the upper
+ elements of "dst". Each complex number is composed of two adjacent half-precision
+ (16-bit) floating-point elements, which defines the complex number "complex =
+ vec.fp16[0] + i * vec.fp16[1]".
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst" using writemask "k" (elements are copied from "src" when mask
+ bit 0 is not set), and copy the upper 6 packed elements from "a" to the upper elements
+ of "dst". Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ dst.fp16[1] := src.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst" using writemask "k" (elements are copied from "src" when mask
+ bit 0 is not set), and copy the upper 6 packed elements from "a" to the upper elements
+ of "dst". Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ dst.fp16[1] := src.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst" using zeromask "k" (elements are zeroed out when mask bit 0 is
+ not set), and copy the upper 6 packed elements from "a" to the upper elements of "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst" using zeromask "k" (elements are zeroed out when mask bit 0 is
+ not set), and copy the upper 6 packed elements from "a" to the upper elements of "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst", and copy the upper 6 packed elements from "a" to the upper
+ elements of "dst". Each complex number is composed of two adjacent half-precision
+ (16-bit) floating-point elements, which defines the complex number "complex =
+ vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst", and copy the upper 6 packed elements from "a" to the upper
+ elements of "dst". Each complex number is composed of two adjacent half-precision
+ (16-bit) floating-point elements, which defines the complex number "complex =
+ vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst" using writemask "k" (elements are copied from "src" when mask
+ bit 0 is not set), and copy the upper 6 packed elements from "a" to the upper elements
+ of "dst". Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ dst.fp16[1] := src.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst" using writemask "k" (elements are copied from "src" when mask
+ bit 0 is not set), and copy the upper 6 packed elements from "a" to the upper elements
+ of "dst". Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ dst.fp16[1] := src.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst" using zeromask "k" (elements are zeroed out when mask bit 0 is
+ not set), and copy the upper 6 packed elements from "a" to the upper elements of "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", and store the result in the
+ lower elements of "dst" using zeromask "k" (elements are zeroed out when mask bit 0 is
+ not set), and copy the upper 6 packed elements from "a" to the upper elements of "dst".
+ Each complex number is composed of two adjacent half-precision (16-bit) floating-point
+ elements, which defines the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := src.fp16[2*i+0]
+ dst.fp16[2*i+1] := src.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1])
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1])
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst", and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst", and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst" using
+ writemask "k" (elements are copied from "src" when mask bit 0 is not set), and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ dst.fp16[1] := src.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst" using
+ writemask "k" (elements are copied from "src" when mask bit 0 is not set), and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ dst.fp16[1] := src.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst" using
+ zeromask "k" (elements are zeroed out when mask bit 0 is not set), and copy the upper 6
+ packed elements from "a" to the upper elements of "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst" using
+ zeromask "k" (elements are zeroed out when mask bit 0 is not set), and copy the upper 6
+ packed elements from "a" to the upper elements of "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst", and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst", and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst" using
+ writemask "k" (elements are copied from "src" when mask bit 0 is not set), and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ dst.fp16[1] := src.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst" using
+ writemask "k" (elements are copied from "src" when mask bit 0 is not set), and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ dst.fp16[1] := src.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst" using
+ zeromask "k" (elements are zeroed out when mask bit 0 is not set), and copy the upper 6
+ packed elements from "a" to the upper elements of "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", and store the result in the lower elements of "dst" using
+ zeromask "k" (elements are zeroed out when mask bit 0 is not set), and copy the upper 6
+ packed elements from "a" to the upper elements of "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate
+ "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1])
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1])
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "src", and store the results in "dst" using writemask "k" (elements
+ are copied from "a" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := a.fp16[2*i+0]
+ dst.fp16[2*i+1] := a.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "src", and store the results in "dst" using writemask "k" (elements
+ are copied from "c" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := c.fp16[2*i+0]
+ dst.fp16[2*i+1] := c.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := a.fp16[2*i+0]
+ dst.fp16[2*i+1] := a.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst" using writemask "k" (elements are
+ copied from "c" when the corresponding mask bit is not set). Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := c.fp16[2*i+0]
+ dst.fp16[2*i+1] := c.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" and "b", accumulate to the corresponding
+ complex numbers in "c", and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set). Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) - (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) + (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", accumulate to the lower
+ complex number in "c", and store the result in the lower elements of "dst", and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", accumulate to the lower
+ complex number in "c", and store the result in the lower elements of "dst" using
+ writemask "k" (elements are copied from "a" when mask bit 0 is not set), and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ dst.fp16[1] := a.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" and "b", accumulate to the lower
+ complex number in "c", and store the result in the lower elements of "dst" using
+ writemask "k" (elements are copied from "c" when mask bit 0 is not set), and copy the
+ upper 6 packed elements from "c" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ dst.fp16[1] := c.fp16[1]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", accumulate to the lower
+ complex number in "c", and store the result in the lower elements of "dst" using
+ zeromask "k" (elements are zeroed out when mask bit 0 is not set), and copy the upper 6
+ packed elements from "a" to the upper elements of "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", accumulate to the lower
+ complex number in "c", and store the result in the lower elements of "dst", and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", accumulate to the lower
+ complex number in "c", and store the result in the lower elements of "dst" using
+ writemask "k" (elements are copied from "a" when mask bit 0 is not set), and copy the
+ upper 6 packed elements from "a" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ dst.fp16[1] := a.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", accumulate to the lower
+ complex number in "c", and store the result in the lower elements of "dst" using
+ writemask "k" (elements are copied from "c" when mask bit 0 is not set), and copy the
+ upper 6 packed elements from "c" to the upper elements of "dst". Each complex number is
+ composed of two adjacent half-precision (16-bit) floating-point elements, which defines
+ the complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ dst.fp16[1] := c.fp16[1]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower complex numbers in "a" and "b", accumulate to the lower
+ complex number in "c", and store the result in the lower elements of "dst" using
+ zeromask "k" (elements are zeroed out when mask bit 0 is not set), and copy the upper 6
+ packed elements from "a" to the upper elements of "dst". Each complex number is composed
+ of two adjacent half-precision (16-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp16[0] + i * vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) - (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) + (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst". Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := a.fp16[2*i+0]
+ dst.fp16[2*i+1] := a.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := c.fp16[2*i+0]
+ dst.fp16[2*i+1] := c.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst". Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using writemask "k" (elements are copied from "a" when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := a.fp16[2*i+0]
+ dst.fp16[2*i+1] := a.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using writemask "k" (elements are copied from "c" when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := c.fp16[2*i+0]
+ dst.fp16[2*i+1] := c.fp16[2*i+1]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply packed complex numbers in "a" by the complex conjugates of packed
+ complex numbers in "b", accumulate to the corresponding complex numbers in "c", and
+ store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[2*i+0] := (a.fp16[2*i+0] * b.fp16[2*i+0]) + (a.fp16[2*i+1] * b.fp16[2*i+1]) +
+ c.fp16[2*i+0]
+ dst.fp16[2*i+1] := (a.fp16[2*i+1] * b.fp16[2*i+0]) - (a.fp16[2*i+0] * b.fp16[2*i+1]) +
+ c.fp16[2*i+1]
+ ELSE
+ dst.fp16[2*i+0] := 0
+ dst.fp16[2*i+1] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", accumulate to the lower complex number in "c", and store the
+ result in the lower elements of "dst", and copy the upper 6 packed elements from "a" to
+ the upper elements of "dst". Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", accumulate to the lower complex number in "c", and store the
+ result in the lower elements of "dst" using writemask "k" (elements are copied from "a"
+ when mask bit 0 is not set), and copy the upper 6 packed elements from "a" to the upper
+ elements of "dst". Each complex number is composed of two adjacent half-precision
+ (16-bit) floating-point elements, which defines the complex number "complex =
+ vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i *
+ vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ dst.fp16[1] := a.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", accumulate to the lower complex number in "c", and store the
+ result in the lower elements of "dst" using writemask "k" (elements are copied from "c"
+ when mask bit 0 is not set), and copy the upper 6 packed elements from "c" to the upper
+ elements of "dst". Each complex number is composed of two adjacent half-precision
+ (16-bit) floating-point elements, which defines the complex number "complex =
+ vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i *
+ vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ dst.fp16[1] := c.fp16[1]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", accumulate to the lower complex number in "c", and store the
+ result in the lower elements of "dst" using zeromask "k" (elements are zeroed out when
+ mask bit 0 is not set), and copy the upper 6 packed elements from "a" to the upper
+ elements of "dst". Each complex number is composed of two adjacent half-precision
+ (16-bit) floating-point elements, which defines the complex number "complex =
+ vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i *
+ vec.fp16[1]".
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", accumulate to the lower complex number in "c", and store the
+ result in the lower elements of "dst", and copy the upper 6 packed elements from "a" to
+ the upper elements of "dst". Each complex number is composed of two adjacent
+ half-precision (16-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate =
+ vec.fp16[0] - i * vec.fp16[1]".
+ [round_note]
+
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", accumulate to the lower complex number in "c", and store the
+ result in the lower elements of "dst" using writemask "k" (elements are copied from "a"
+ when mask bit 0 is not set), and copy the upper 6 packed elements from "a" to the upper
+ elements of "dst". Each complex number is composed of two adjacent half-precision
+ (16-bit) floating-point elements, which defines the complex number "complex =
+ vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i *
+ vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := a.fp16[0]
+ dst.fp16[1] := a.fp16[1]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", accumulate to the lower complex number in "c", and store the
+ result in the lower elements of "dst" using writemask "k" (elements are copied from "c"
+ when mask bit 0 is not set), and copy the upper 6 packed elements from "c" to the upper
+ elements of "dst". Each complex number is composed of two adjacent half-precision
+ (16-bit) floating-point elements, which defines the complex number "complex =
+ vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i *
+ vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := c.fp16[0]
+ dst.fp16[1] := c.fp16[1]
+ FI
+ dst[127:32] := c[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the lower complex number in "a" by the complex conjugate of the lower
+ complex number in "b", accumulate to the lower complex number in "c", and store the
+ result in the lower elements of "dst" using zeromask "k" (elements are zeroed out when
+ mask bit 0 is not set), and copy the upper 6 packed elements from "a" to the upper
+ elements of "dst". Each complex number is composed of two adjacent half-precision
+ (16-bit) floating-point elements, which defines the complex number "complex =
+ vec.fp16[0] + i * vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i *
+ vec.fp16[1]".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := (a.fp16[0] * b.fp16[0]) + (a.fp16[1] * b.fp16[1]) + c.fp16[0]
+ dst.fp16[1] := (a.fp16[1] * b.fp16[0]) - (a.fp16[0] * b.fp16[1]) + c.fp16[1]
+ ELSE
+ dst.fp16[0] := 0
+ dst.fp16[1] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (16-bit) floating-point elements in "a" by
+ addition. Returns the sum of all elements in "a".
+
+ tmp := a
+ FOR i := 0 to 15
+ tmp.fp16[i] := tmp.fp16[i] + a.fp16[i+16]
+ ENDFOR
+ FOR i := 0 to 7
+ tmp.fp16[i] := tmp.fp16[i] + tmp.fp16[i+8]
+ ENDFOR
+ FOR i := 0 to 3
+ tmp.fp16[i] := tmp.fp16[i] + tmp.fp16[i+4]
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := tmp.fp16[i] + tmp.fp16[i+2]
+ ENDFOR
+ dst.fp16[0] := tmp.fp16[0] + tmp.fp16[1]
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (16-bit) floating-point elements in "a" by
+ multiplication. Returns the product of all elements in "a".
+
+ tmp := a
+ FOR i := 0 to 15
+ tmp.fp16[i] := tmp.fp16[i] * a.fp16[i+16]
+ ENDFOR
+ FOR i := 0 to 7
+ tmp.fp16[i] := tmp.fp16[i] * tmp.fp16[i+8]
+ ENDFOR
+ FOR i := 0 to 3
+ tmp.fp16[i] := tmp.fp16[i] * tmp.fp16[i+4]
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := tmp.fp16[i] * tmp.fp16[i+2]
+ ENDFOR
+ dst.fp16[0] := tmp.fp16[0] * tmp.fp16[1]
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (16-bit) floating-point elements in "a" by
+ maximum. Returns the maximum of all elements in "a". [max_float_note]
+
+ tmp := a
+ FOR i := 0 to 15
+ tmp.fp16[i] := (a.fp16[i] > a.fp16[i+16] ? a.fp16[i] : a.fp16[i+16])
+ ENDFOR
+ FOR i := 0 to 7
+ tmp.fp16[i] := (tmp.fp16[i] > tmp.fp16[i+8] ? tmp.fp16[i] : tmp.fp16[i+8])
+ ENDFOR
+ FOR i := 0 to 3
+ tmp.fp16[i] := (tmp.fp16[i] > tmp.fp16[i+4] ? tmp.fp16[i] : tmp.fp16[i+4])
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := (tmp.fp16[i] > tmp.fp16[i+2] ? tmp.fp16[i] : tmp.fp16[i+2])
+ ENDFOR
+ dst.fp16[0] := (tmp.fp16[0] > tmp.fp16[1] ? tmp.fp16[0] : tmp.fp16[1])
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+ Reduce the packed half-precision (16-bit) floating-point elements in "a" by
+ minimum. Returns the minimum of all elements in "a". [min_float_note]
+
+ tmp := a
+ FOR i := 0 to 15
+ tmp.fp16[i] := (a.fp16[i] < a.fp16[i+16] ? tmp.fp16[i] : a.fp16[i+16])
+ ENDFOR
+ FOR i := 0 to 7
+ tmp.fp16[i] := (tmp.fp16[i] < tmp.fp16[i+8] ? tmp.fp16[i] : tmp.fp16[i+8])
+ ENDFOR
+ FOR i := 0 to 3
+ tmp.fp16[i] := (tmp.fp16[i] < tmp.fp16[i+4] ? tmp.fp16[i] : tmp.fp16[i+4])
+ ENDFOR
+ FOR i := 0 to 1
+ tmp.fp16[i] := (tmp.fp16[i] < tmp.fp16[i+2] ? tmp.fp16[i] : tmp.fp16[i+2])
+ ENDFOR
+ dst.fp16[0] := (tmp.fp16[0] < tmp.fp16[1] ? tmp.fp16[0] : tmp.fp16[1])
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+ Finds the absolute value of each packed half-precision (16-bit) floating-point
+ element in "v2", storing the results in "dst".
+
+ FOR j := 0 to 31
+ dst.fp16[j] := ABS(v2.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+ Compute the complex conjugates of complex numbers in "a", and store the results
+ in "dst". Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := a[i+31:i] XOR FP32(-0.0)
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Compute the complex conjugates of complex numbers in "a", and store the results
+ in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask
+ bit is not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR FP32(-0.0)
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+ Compute the complex conjugates of complex numbers in "a", and store the results
+ in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is
+ not set). Each complex number is composed of two adjacent half-precision (16-bit)
+ floating-point elements, which defines the complex number "complex = vec.fp16[0] + i *
+ vec.fp16[1]", or the complex conjugate "conjugate = vec.fp16[0] - i * vec.fp16[1]".
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := a[i+31:i] XOR FP32(-0.0)
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512_FP16
+
+ Arithmetic
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 31
+ k[j] := (a.fp16[j] OP b.fp16[j]) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 31
+ IF k1[j]
+ k[j] := ( a.fp16[j] OP b.fp16[j] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k". [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 31
+ k[j] := (a.fp16[j] OP b.fp16[j]) ? 1 : 0
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit
+ is not set). [sae_note]
+ CASE (imm8[3:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ FOR j := 0 to 31
+ IF k1[j]
+ k[j] := ( a.fp16[j] OP b.fp16[j] ) ? 1 : 0
+ ELSE
+ k[j] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k".
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ k[0] := (a.fp16[0] OP b.fp16[0]) ? 1 : 0
+ k[MAX:1] := 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k". [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ k[0] := (a.fp16[0] OP b.fp16[0]) ? 1 : 0
+ k[MAX:1] := 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ IF k1[0]
+ k[0] := ( a.fp16[0] OP b.fp16[0] ) ? 1 : 0
+ ELSE
+ k[0] := 0
+ FI
+ k[MAX:1] := 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b"
+ based on the comparison operand specified by "imm8", and store the results in mask
+ vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
+ [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ IF k1[0]
+ k[0] := ( a.fp16[0] OP b.fp16[0] ) ? 1 : 0
+ ELSE
+ k[0] := 0
+ FI
+ k[MAX:1] := 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" based on the comparison operand specified by "imm8", and return the boolean result
+ (0 or 1).
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ RETURN ( a.fp16[0] OP b.fp16[0] ) ? 1 : 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" based on the comparison operand specified by "imm8", and return the boolean result
+ (0 or 1). [sae_note]
+ CASE (imm8[4:0]) OF
+ 0: OP := _CMP_EQ_OQ
+ 1: OP := _CMP_LT_OS
+ 2: OP := _CMP_LE_OS
+ 3: OP := _CMP_UNORD_Q
+ 4: OP := _CMP_NEQ_UQ
+ 5: OP := _CMP_NLT_US
+ 6: OP := _CMP_NLE_US
+ 7: OP := _CMP_ORD_Q
+ 8: OP := _CMP_EQ_UQ
+ 9: OP := _CMP_NGE_US
+ 10: OP := _CMP_NGT_US
+ 11: OP := _CMP_FALSE_OQ
+ 12: OP := _CMP_NEQ_OQ
+ 13: OP := _CMP_GE_OS
+ 14: OP := _CMP_GT_OS
+ 15: OP := _CMP_TRUE_UQ
+ 16: OP := _CMP_EQ_OS
+ 17: OP := _CMP_LT_OQ
+ 18: OP := _CMP_LE_OQ
+ 19: OP := _CMP_UNORD_S
+ 20: OP := _CMP_NEQ_US
+ 21: OP := _CMP_NLT_UQ
+ 22: OP := _CMP_NLE_UQ
+ 23: OP := _CMP_ORD_S
+ 24: OP := _CMP_EQ_US
+ 25: OP := _CMP_NGE_UQ
+ 26: OP := _CMP_NGT_UQ
+ 27: OP := _CMP_FALSE_OS
+ 28: OP := _CMP_NEQ_OS
+ 29: OP := _CMP_GE_OQ
+ 30: OP := _CMP_GT_OQ
+ 31: OP := _CMP_TRUE_US
+ ESAC
+ RETURN ( a.fp16[0] OP b.fp16[0] ) ? 1 : 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for equality, and return the boolean result (0 or 1).
+ RETURN ( a.fp16[0] !=NaN AND b.fp16[0] !=NaN AND a.fp16[0] == b.fp16[0] ) ? 1 : 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for less-than, and return the boolean result (0 or 1).
+ RETURN ( a.fp16[0] !=NaN AND b.fp16[0] !=NaN AND a.fp16[0] < b.fp16[0] ) ? 1 :
+ 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for less-than-or-equal, and return the boolean result (0 or 1).
+ RETURN ( a.fp16[0] !=NaN AND b.fp16[0] !=NaN AND a.fp16[0] <= b.fp16[0] ) ? 1
+ : 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for greater-than, and return the boolean result (0 or 1).
+ RETURN ( a.fp16[0] !=NaN AND b.fp16[0] !=NaN AND a.fp16[0] > b.fp16[0] ) ? 1 :
+ 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for greater-than-or-equal, and return the boolean result (0 or 1).
+ RETURN ( a.fp16[0] !=NaN AND b.fp16[0] !=NaN AND a.fp16[0] >= b.fp16[0] ) ? 1
+ : 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for not-equal, and return the boolean result (0 or 1).
+ RETURN ( a.fp16[0] ==NaN OR b.fp16[0] ==NaN OR a.fp16[0] != b.fp16[0] ) ? 1 : 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for equality, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a.fp16[0] !=NaN AND b.fp16[0] !=NaN AND a.fp16[0] == b.fp16[0] ) ? 1 : 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for less-than, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a.fp16[0] !=NaN AND b.fp16[0] !=NaN AND a.fp16[0] < b.fp16[0] ) ? 1 :
+ 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for less-than-or-equal, and return the boolean result (0 or 1). This instruction
+ will not signal an exception for QNaNs.
+ RETURN ( a.fp16[0] !=NaN AND b.fp16[0] !=NaN AND a.fp16[0] <= b.fp16[0] ) ? 1
+ : 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for greater-than, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a.fp16[0] !=NaN AND b.fp16[0] !=NaN AND a.fp16[0] > b.fp16[0] ) ? 1 :
+ 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for greater-than-or-equal, and return the boolean result (0 or 1). This instruction
+ will not signal an exception for QNaNs.
+ RETURN ( a.fp16[0] !=NaN AND b.fp16[0] !=NaN AND a.fp16[0] >= b.fp16[0] ) ? 1
+ : 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+
+ Compare the lower half-precision (16-bit) floating-point elements in "a" and
+ "b" for not-equal, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a.fp16[0] ==NaN OR b.fp16[0] ==NaN OR a.fp16[0] != b.fp16[0] ) ? 1 : 0
+
+
+ AVX512_FP16
+
+ Compare
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 31
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 31
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 16-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 31
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 31
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.fp16[j] := Convert_Int16_To_FP16(a.word[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 15
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 15
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 32-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.fp16[j] := Convert_Int32_To_FP16(a.dword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed signed 64-bit integers in "a" to packed half-precision (16-bit)
+ floating-point elements, and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed unsigned 64-bit integers in "a" to packed half-precision
+ (16-bit) floating-point elements, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_Int64_To_FP16(a.qword[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 7
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+ [round_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.fp16[j] := Convert_FP64_To_FP16(a.fp64[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst", and copy the upper 7 packed elements from "a" to the upper element of "dst".
+
+ dst.fp16[0] := Convert_FP64_To_FP16(b.fp64[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst", and copy the upper 7 packed elements from "a" to the upper element of "dst".
+ [round_note]
+
+ dst.fp16[0] := Convert_FP64_To_FP16(b.fp64[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper 7 packed elements from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst.fp16[0] := Convert_FP64_To_FP16(b.fp64[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper 7 packed elements from "a" to the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := Convert_FP64_To_FP16(b.fp64[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 7 packed elements from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst.fp16[0] := Convert_FP64_To_FP16(b.fp64[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 7 packed elements from "a" to the upper element of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := Convert_FP64_To_FP16(b.fp64[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 15
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 to 15
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using writemask "k" (elements are copied from "src" when the corresponding mask bit is
+ not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst"
+ using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp16[j] := Convert_FP32_To_FP16(a.fp32[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst", and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+
+ dst.fp16[0] := Convert_FP32_To_FP16(b.fp32[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst", and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := Convert_FP32_To_FP16(b.fp32[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := Convert_FP32_To_FP16(b.fp32[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := Convert_FP32_To_FP16(b.fp32[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 7 packed elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := Convert_FP32_To_FP16(b.fp32[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ half-precision (16-bit) floating-point elements, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := Convert_FP32_To_FP16(b.fp32[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 15
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst". [sae_note]
+
+ FOR j := 0 TO 15
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 32-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_Int32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 15
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 15
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst". [sae_note]
+
+ FOR j := 0 TO 15
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.dword[j] := Convert_FP16_To_UInt32_Truncate(a.fp16[j])
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 7
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst". [sae_note]
+
+ FOR j := 0 TO 7
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 64-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_Int64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 7
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 7
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst". [sae_note]
+
+ FOR j := 0 TO 7
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := src.qword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 64-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 TO 7
+ IF k[j]
+ dst.qword[j] := Convert_FP16_To_UInt64_Truncate(a.fp16[j])
+ ELSE
+ dst.qword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 31
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst".
+ [round_note]
+
+ FOR j := 0 TO 31
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 31
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst". [sae_note]
+
+ FOR j := 0 TO 31
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ 16-bit integers with truncation, and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_Int16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst".
+
+ FOR j := 0 TO 31
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst". [sae_note]
+
+ FOR j := 0 TO 31
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers, and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 TO 31
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst". [sae_note]
+
+ FOR j := 0 TO 31
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := src.word[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ unsigned 16-bit integers with truncation, and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
+
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.word[j] := Convert_FP16_To_UInt16_Truncate(a.fp16[j])
+ ELSE
+ dst.word[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst".
+ [sae_note]
+
+ FOR j := 0 to 7
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ELSE
+ dst.fp64[j] := src.fp64[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [sae_note]
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ELSE
+ dst.fp64[j] := src.fp64[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ELSE
+ dst.fp64[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ double-precision (64-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 7
+ IF k[j]
+ dst.fp64[j] := Convert_FP16_To_FP64(a.fp16[j])
+ ELSE
+ dst.fp64[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 15
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst".
+ [sae_note]
+
+ FOR j := 0 to 15
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ELSE
+ dst.fp32[j] := src.fp32[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [sae_note]
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ELSE
+ dst.fp32[j] := src.fp32[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ELSE
+ dst.fp32[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [sae_note]
+
+ FOR j := 0 to 15
+ IF k[j]
+ dst.fp32[j] := Convert_FP16_To_FP32(a.fp16[j])
+ ELSE
+ dst.fp32[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst", and copy the upper element from "a" to the upper element of "dst".
+
+ dst.fp64[0] := Convert_FP16_To_FP64(b.fp16[0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst", and copy the upper element from "a" to the upper element of "dst". [sae_note]
+
+ dst.fp64[0] := Convert_FP16_To_FP64(b.fp16[0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst.fp64[0] := Convert_FP16_To_FP64(b.fp16[0])
+ ELSE
+ dst.fp64[0] := src.fp64[0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper element from "a" to the upper element of "dst". [sae_note]
+
+ IF k[0]
+ dst.fp64[0] := Convert_FP16_To_FP64(b.fp16[0])
+ ELSE
+ dst.fp64[0] := src.fp64[0]
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper element from "a" to the upper element of "dst".
+
+ IF k[0]
+ dst.fp64[0] := Convert_FP16_To_FP64(b.fp16[0])
+ ELSE
+ dst.fp64[0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper element from "a" to the upper element of "dst". [sae_note]
+
+ IF k[0]
+ dst.fp64[0] := Convert_FP16_To_FP64(b.fp16[0])
+ ELSE
+ dst.fp64[0] := 0
+ FI
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst.fp32[0] := Convert_FP16_To_FP32(b.fp16[0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [sae_note]
+
+ dst.fp32[0] := Convert_FP16_To_FP32(b.fp16[0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp32[0] := Convert_FP16_To_FP32(b.fp16[0])
+ ELSE
+ dst.fp32[0] := src.fp32[0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not
+ set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+ [sae_note]
+
+ IF k[0]
+ dst.fp32[0] := Convert_FP16_To_FP32(b.fp16[0])
+ ELSE
+ dst.fp32[0] := src.fp32[0]
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 3 packed elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp32[0] := Convert_FP16_To_FP32(b.fp16[0])
+ ELSE
+ dst.fp32[0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 3 packed elements from "a" to the upper elements of "dst". [sae_note]
+
+ IF k[0]
+ dst.fp32[0] := Convert_FP16_To_FP32(b.fp16[0])
+ ELSE
+ dst.fp32[0] := 0
+ FI
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to a
+ 32-bit integer, and store the result in "dst".
+
+ dst.dword := Convert_FP16_To_Int32(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to a
+ 32-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst.dword := Convert_FP16_To_Int32(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to a
+ 64-bit integer, and store the result in "dst".
+
+ dst.qword := Convert_FP16_To_Int64(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to a
+ 64-bit integer, and store the result in "dst".
+ [round_note]
+
+ dst.qword := Convert_FP16_To_Int64(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to a
+ 32-bit integer with truncation, and store the result in "dst".
+
+ dst.dword := Convert_FP16_To_Int32_Truncate(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to a
+ 32-bit integer with truncation, and store the result in "dst". [sae_note]
+
+ dst.dword := Convert_FP16_To_Int32_Truncate(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to a
+ 64-bit integer with truncation, and store the result in "dst".
+
+ dst.qword := Convert_FP16_To_Int64_Truncate(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to a
+ 64-bit integer with truncation, and store the result in "dst". [sae_note]
+
+ dst.qword := Convert_FP16_To_Int64_Truncate(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to an
+ unsigned 32-bit integer, and store the result in "dst".
+
+ dst.dword := Convert_FP16_To_UInt32(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to an
+ unsigned 32-bit integer, and store the result in "dst". [sae_note]
+
+ dst.dword := Convert_FP16_To_UInt32(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to an
+ unsigned 64-bit integer, and store the result in "dst".
+
+ dst.qword := Convert_FP16_To_UInt64(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to an
+ unsigned 64-bit integer, and store the result in "dst". [round_note]
+
+ dst.qword := Convert_FP16_To_UInt64(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to an
+ unsigned 32-bit integer with truncation, and store the result in "dst".
+
+ dst.dword := Convert_FP16_To_UInt32_Truncate(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to an
+ unsigned 32-bit integer with truncation, and store the result in "dst". [sae_note]
+
+ dst.dword := Convert_FP16_To_UInt32_Truncate(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to an
+ unsigned 64-bit integer with truncation, and store the result in "dst".
+
+ dst.qword := Convert_FP16_To_UInt64_Truncate(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the lower half-precision (16-bit) floating-point element in "a" to an
+ unsigned 64-bit integer with truncation, and store the result in "dst". [sae_note]
+
+ dst.qword := Convert_FP16_To_UInt64_Truncate(a.fp16[0])
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the signed 32-bit integer "b" to a half-precision (16-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 7 packed elements from "a" to the upper elements of "dst".
+
+ dst.fp16[0] := Convert_Int32_To_FP16(b.fp32[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the signed 32-bit integer "b" to a half-precision (16-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := Convert_Int32_To_FP16(b.fp32[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the unsigned 32-bit integer "b" to a half-precision (16-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 7 packed elements from "a" to the upper elements of "dst".
+
+ dst.fp16[0] := Convert_Int32_To_FP16(b.fp32[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the unsigned 32-bit integer "b" to a half-precision (16-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := Convert_Int32_To_FP16(b.fp32[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the signed 64-bit integer "b" to a half-precision (16-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 7 packed elements from "a" to the upper elements of "dst".
+
+ dst.fp16[0] := Convert_Int64_To_FP16(b.fp64[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the signed 64-bit integer "b" to a half-precision (16-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := Convert_Int64_To_FP16(b.fp64[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Convert the unsigned 64-bit integer "b" to a half-precision (16-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 7 packed elements from "a" to the upper elements of "dst".
+
+ dst.fp16[0] := Convert_Int64_To_FP16(b.fp64[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+
+ Convert the unsigned 64-bit integer "b" to a half-precision (16-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := Convert_Int64_To_FP16(b.fp64[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Copy 16-bit integer "a" to the lower elements of "dst", and zero the upper
+ elements of "dst".
+
+ dst.fp16[0] := a.fp16[0]
+ dst[MAX:16] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Copy the lower 16-bit integer in "a" to "dst".
+
+ dst.fp16[0] := a.fp16[0]
+ dst[MAX:16] := 0
+
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Copy the lower half-precision (16-bit) floating-point element of "a" to "dst".
+
+ dst[15:0] := a.fp16[0]
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Copy the lower half-precision (16-bit) floating-point element of "a" to "dst".
+
+ dst[15:0] := a.fp16[0]
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+ Copy the lower half-precision (16-bit) floating-point element of "a" to "dst".
+
+ dst[15:0] := a.fp16[0]
+
+ AVX512_FP16
+
+ Convert
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst". [max_float_note]
+
+ FOR j := 0 to 31
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set). [max_float_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst". [sae_note][max_float_note]
+
+ FOR j := 0 to 31
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). [sae_note][max_float_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set). [sae_note][max_float_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] > b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst". [min_float_note]
+
+ FOR j := 0 to 31
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set). [min_float_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst". [sae_note] [min_float_note]
+
+ FOR j := 0 to 31
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set). [sae_note][min_float_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := src.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Compare packed half-precision (16-bit) floating-point elements in "a" and "b",
+ and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out
+ when the corresponding mask bit is not set). [sae_note][min_float_note]
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := (a.fp16[j] < b.fp16[j] ? a.fp16[j] : b.fp16[j])
+ ELSE
+ dst.fp16[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+ Extract the reduced argument of the lower half-precision (16-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst", and copy the upper 7 packed elements from "a" to
+ the upper elements of "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ dst.fp16[0] := ReduceArgumentFP16(b.fp16[0], imm8)
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower half-precision (16-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst", and copy the upper 7 packed elements from "a" to
+ the upper elements of "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ dst.fp16[0] := ReduceArgumentFP16(b.fp16[0], imm8)
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower half-precision (16-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from
+ "src" when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the
+ upper elements of "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ IF k[0]
+ dst.fp16[0] := ReduceArgumentFP16(b.fp16[0], imm8)
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower half-precision (16-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using writemask "k" (the element is copied from
+ "src" when mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the
+ upper elements of "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ IF k[0]
+ dst.fp16[0] := ReduceArgumentFP16(b.fp16[0], imm8)
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower half-precision (16-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ IF k[0]
+ dst.fp16[0] := ReduceArgumentFP16(b.fp16[0], imm8)
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+
+
+
+
+ Extract the reduced argument of the lower half-precision (16-bit)
+ floating-point element in "b" by the number of bits specified by "imm8", store the
+ result in the lower element of "dst" using zeromask "k" (the element is zeroed out when
+ mask bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ IF k[0]
+ dst.fp16[0] := ReduceArgumentFP16(b.fp16[0], imm8)
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Special Math Functions
+
+
+
+
+ Load a half-precision (16-bit) floating-point element from memory into the
+ lower element of "dst", and zero the upper elements.
+
+ dst.fp16[0] := MEM[mem_addr].fp16[0]
+ dst[MAX:16] := 0
+
+
+ AVX512_FP16
+
+ Load
+
+
+
+
+
+
+ Load a half-precision (16-bit) floating-point element from memory into the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and set the upper elements of "dst" to zero.
+
+ IF k[0]
+ dst.fp16[0] := MEM[mem_addr].fp16[0]
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[MAX:16] := 0
+
+
+ AVX512_FP16
+
+ Load
+
+
+
+
+
+ Load a half-precision (16-bit) floating-point element from memory into the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and set the upper elements of "dst" to zero.
+
+ IF k[0]
+ dst.fp16[0] := MEM[mem_addr].fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[MAX:16] := 0
+
+
+ AVX512_FP16
+
+ Load
+
+
+
+
+ Load 512-bits (composed of 32 packed half-precision (16-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Load
+
+
+
+
+ Load 512-bits (composed of 32 packed half-precision (16-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[511:0] := MEM[mem_addr+511:mem_addr]
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Load
+
+
+
+
+
+ Store the lower half-precision (16-bit) floating-point element from "a" into
+ memory.
+
+ MEM[mem_addr].fp16[0] := a.fp16[0]
+
+
+ AVX512_FP16
+
+ Store
+
+
+
+
+
+
+ Store the lower half-precision (16-bit) floating-point element from "a" into
+ memory using writemask "k".
+
+ IF k[0]
+ MEM[mem_addr].fp16[0] := a.fp16[0]
+ FI
+
+
+ AVX512_FP16
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 32 packed half-precision (16-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512_FP16
+
+ Store
+
+
+
+
+
+ Store 512-bits (composed of 32 packed half-precision (16-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+511:mem_addr] := a[511:0]
+
+
+ AVX512_FP16
+
+ Store
+
+
+
+
+
+ Move the lower half-precision (16-bit) floating-point element from "b" to the
+ lower element of "dst", and copy the upper 7 packed elements from "a" to the upper
+ elements of "dst".
+
+ dst.fp16[0] := b.fp16[0]
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Move
+
+
+
+
+
+
+
+ Move the lower half-precision (16-bit) floating-point element from "b" to the
+ lower element of "dst" using writemask "k" (the element is copied from "src" when mask
+ bit 0 is not set), and copy the upper 7 packed elements from "a" to the upper elements
+ of "dst".
+
+ IF k[0]
+ dst.fp16[0] := b.fp16[0]
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Move
+
+
+
+
+
+
+ Move the lower half-precision (16-bit) floating-point element from "b" to the
+ lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is
+ not set), and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := b.fp16[0]
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Move
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 31
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ENDFOR
+ dest[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 31
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ENDFOR
+ dest[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dest[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set). [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dest[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dest[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round packed half-precision (16-bit) floating-point elements in "a" to the
+ number of fraction bits specified by "imm8", and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := RoundScaleFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dest[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Round the lower half-precision (16-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst", and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ dst.fp16[0] := RoundScaleFP16(b.fp16[0], imm8)
+ dst[127:16] := a[127:16]
+ dest[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round the lower half-precision (16-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst", and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ dst.fp16[0] := RoundScaleFP16(b.fp16[0], imm8)
+ dst[127:16] := a[127:16]
+ dest[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Round the lower half-precision (16-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set),
+ and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ IF k[0]
+ dst.fp16[0] := RoundScaleFP16(b.fp16[0], imm8)
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dest[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Round the lower half-precision (16-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set),
+ and copy the upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ IF k[0]
+ dst.fp16[0] := RoundScaleFP16(b.fp16[0], imm8)
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dest[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Round the lower half-precision (16-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ IF k[0]
+ dst.fp16[0] := RoundScaleFP16(b.fp16[0], imm8)
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dest[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Round the lower half-precision (16-bit) floating-point element in "b" to the
+ number of fraction bits specified by "imm8", store the result in the lower element of
+ "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and
+ copy the upper 7 packed elements from "a" to the upper elements of "dst".
+ [round_imm_note][sae_note]
+
+ DEFINE RoundScaleFP16(src.fp16, imm8[7:0]) {
+ m.fp16 := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp.fp16 := POW(FP16(2.0), -m) * ROUND(POW(FP16(2.0), m) * src.fp16, imm8[3:0])
+ RETURN tmp.fp16
+ }
+ IF k[0]
+ dst.fp16[0] := RoundScaleFP16(b.fp16[0], imm8)
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dest[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR i := 0 to 31
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element. [sae_note]
+ FOR i := 0 to 31
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element.
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set). This intrinsic
+ essentially calculates "floor(log2(x))" for each element. [sae_note]
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of each packed half-precision (16-bit) floating-point
+ element in "a" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "floor(log2(x))" for each element. [sae_note]
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := ConvertExpFP16(a.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+ Convert the exponent of the lower half-precision (16-bit) floating-point
+ element in "b" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst", and copy the upper 7
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "floor(log2(x))" for the lower element.
+ dst.fp16[0] := ConvertExpFP16(b.fp16[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of the lower half-precision (16-bit) floating-point
+ element in "b" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst", and copy the upper 7
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "floor(log2(x))" for the lower element. [sae_note]
+ dst.fp16[0] := ConvertExpFP16(b.fp16[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Convert the exponent of the lower half-precision (16-bit) floating-point
+ element in "b" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using writemask "k"
+ (the element is copied from "src" when mask bit 0 is not set), and copy the upper 7
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "floor(log2(x))" for the lower element.
+ IF k[0]
+ dst.fp16[0] := ConvertExpFP16(b.fp16[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Convert the exponent of the lower half-precision (16-bit) floating-point
+ element in "b" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using writemask "k"
+ (the element is copied from "src" when mask bit 0 is not set), and copy the upper 7
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "floor(log2(x))" for the lower element. [sae_note]
+ IF k[0]
+ dst.fp16[0] := ConvertExpFP16(b.fp16[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Convert the exponent of the lower half-precision (16-bit) floating-point
+ element in "b" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for the lower element.
+ IF k[0]
+ dst.fp16[0] := ConvertExpFP16(b.fp16[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Convert the exponent of the lower half-precision (16-bit) floating-point
+ element in "b" to a half-precision (16-bit) floating-point number representing the
+ integer exponent, store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for the lower element. [sae_note]
+ IF k[0]
+ dst.fp16[0] := ConvertExpFP16(b.fp16[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ FOR i := 0 TO 31
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note][sae_note]
+ FOR i := 0 TO 31
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "norm" and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ FOR i := 0 TO 31
+ IF k[i]
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set). This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "norm" and the sign depends on "sign" and the source sign.
+ [getmant_note][sae_note]
+ FOR i := 0 TO 31
+ IF k[i]
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ FOR i := 0 TO 31
+ IF k[i]
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set). This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note][sae_note]
+ FOR i := 0 TO 31
+ IF k[i]
+ dst.fp16[i] := GetNormalizedMantissaFP16(a.fp16[i], norm, sign)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst", and copy the upper 7
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "norm" and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ dst.fp16[0] := GetNormalizedMantissaFP16(b.fp16[0], norm, sign)
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst", and copy the upper 7
+ packed elements from "a" to the upper elements of "dst". This intrinsic essentially
+ calculates "±(2^k)*|x.significand|", where "k" depends on the interval range
+ defined by "norm" and the sign depends on "sign" and the source sign.
+ [getmant_note][sae_note]
+ dst.fp16[0] := GetNormalizedMantissaFP16(b.fp16[0], norm, sign)
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ IF k[0]
+ dst.fp16[0] := GetNormalizedMantissaFP16(b.fp16[0], norm, sign)
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note][sae_note]
+ IF k[0]
+ dst.fp16[0] := GetNormalizedMantissaFP16(b.fp16[0], norm, sign)
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note]
+ IF k[0]
+ dst.fp16[0] := GetNormalizedMantissaFP16(b.fp16[0], norm, sign)
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Normalize the mantissas of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst". This intrinsic essentially calculates
+ "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "norm"
+ and the sign depends on "sign" and the source sign.
+ [getmant_note][sae_note]
+ IF k[0]
+ dst.fp16[0] := GetNormalizedMantissaFP16(b.fp16[0], norm, sign)
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 31
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst". [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 31
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set). [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Extract the reduced argument of packed half-precision (16-bit) floating-point
+ elements in "a" by the number of bits specified by "imm8", and store the results in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set). [round_imm_note][sae_note]
+
+ DEFINE ReduceArgumentFP16(src[15:0], imm8[7:0]) {
+ m[15:0] := FP16(imm8[7:4]) // number of fraction bits after the binary point to be
+ preserved
+ tmp[15:0] := POW(2.0, FP16(-m)) * ROUND(POW(2.0, FP16(m)) * src[15:0], imm8[3:0])
+ tmp[15:0] := src[15:0] - tmp[15:0]
+ IF IsInf(tmp[15:0])
+ tmp[15:0] := FP16(0.0)
+ FI
+ RETURN tmp[15:0]
+ }
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := ReduceArgumentFP16(a.fp16[i], imm8)
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 15
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst".
+ [round_note]
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 15
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ [round_note]
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed half-precision (16-bit) floating-point elements in "a" using
+ values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ [round_note]
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ FOR i := 0 to 15
+ IF k[i]
+ dst.fp16[i] := ScaleFP16(a.fp16[i], b.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst", and copy the upper 7
+ packed elements from "a" to the upper elements of "dst".
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ dst.fp16[0] := ScaleFP16(a.fp16[0], b.fp16[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst", and copy the upper 7
+ packed elements from "a" to the upper elements of "dst".
+ [round_note]
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ dst.fp16[0] := ScaleFP16(a.fp16[0], b.fp16[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst".
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ IF k[0]
+ dst.fp16[0] := ScaleFP16(a.fp16[0], b.fp16[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst".
+ [round_note]
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ IF k[0]
+ dst.fp16[0] := ScaleFP16(a.fp16[0], b.fp16[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst".
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ IF k[0]
+ dst.fp16[0] := ScaleFP16(a.fp16[0], b.fp16[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Scale the packed single-precision (32-bit) floating-point elements in "a" using
+ values from "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst".
+ [round_note]
+ DEFINE ScaleFP16(src1, src2) {
+ denormal1 := (a.exp == 0) and (a.fraction != 0)
+ denormal2 := (b.exp == 0) and (b.fraction != 0)
+ tmp1 := src1
+ tmp2 := src2
+ IF MXCSR.DAZ
+ IF denormal1
+ tmp1 := 0
+ FI
+ IF denormal2
+ tmp2 := 0
+ FI
+ FI
+ RETURN tmp1 * POW(2.0, FLOOR(tmp2))
+ }
+ IF k[0]
+ dst.fp16[0] := ScaleFP16(a.fp16[0], b.fp16[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+ Test packed half-precision (16-bit) floating-point elements in "a" for special
+ categories specified by "imm8", and store the results in mask vector "k".
+ [fpclass_note]
+ FOR i := 0 to 31
+ k[i] := CheckFPClass_FP16(a.fp16[i], imm8[7:0])
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Test packed half-precision (16-bit) floating-point elements in "a" for special
+ categories specified by "imm8", and store the results in mask vector "k" using zeromask
+ "k1" (elements are zeroed out when the corresponding mask bit is not set).
+ [fpclass_note]
+ FOR i := 0 to 31
+ IF k1[i]
+ k[i] := CheckFPClass_FP16(a.fp16[i], imm8[7:0])
+ ELSE
+ k[i] := 0
+ FI
+ ENDFOR
+ k[MAX:32] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+ Test the lower half-precision (16-bit) floating-point element in "a" for
+ special categories specified by "imm8", and store the result in mask vector "k".
+ [fpclass_note]
+ k[0] := CheckFPClass_FP16(a.fp16[0], imm8[7:0])
+ k[MAX:1] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Test the lower half-precision (16-bit) floating-point element in "a" for
+ special categories specified by "imm8", and store the result in mask vector "k" using
+ zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
+ [fpclass_note]
+ IF k1[0]
+ k[0] := CheckFPClass_FP16(a.fp16[0], imm8[7:0])
+ ELSE
+ k[0] := 0
+ FI
+ k[MAX:1] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Shuffle half-precision (16-bit) floating-point elements in "a" and "b" across
+ lanes using the corresponding selector and index in "idx", and store the results in
+ "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ off := idx[i+4:i]
+ dst.fp16[j] := idx[i+5] ? b.fp16[off] : a.fp16[off]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+
+ Blend packed half-precision (16-bit) floating-point elements from "a" and "b"
+ using control mask "k", and store the results in "dst".
+
+ FOR j := 0 to 31
+ IF k[j]
+ dst.fp16[j] := b.fp16[j]
+ ELSE
+ dst.fp16[j] := a.fp16[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+
+ Shuffle half-precision (16-bit) floating-point elements in "a" across lanes
+ using the corresponding index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ id := idx[i+4:i]
+ dst.fp16[j] := a.fp16[id]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Miscellaneous
+
+
+
+
+ Compute the approximate reciprocal square root of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst". The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 31
+ dst.fp16[i] := (1.0 / SQRT(a.fp16[i]))
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst" using writemask
+ "k" (elements are copied from "src" when the corresponding mask bit is not set). The
+ maximum relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := (1.0 / SQRT(a.fp16[i]))
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal square root of packed half-precision
+ (16-bit) floating-point elements in "a", and store the results in "dst" using zeromask
+ "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := (1.0 / SQRT(a.fp16[i]))
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal square root of the lower half-precision
+ (16-bit) floating-point element in "b", store the result in the lower element of "dst",
+ and copy the upper 7 packed elements from "a" to the upper elements of "dst". The
+ maximum relative error for this approximation is less than 1.5*2^-12.
+
+ dst.fp16[0] := (1.0 / SQRT(b.fp16[0]))
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of the lower half-precision
+ (16-bit) floating-point element in "b", store the result in the lower element of "dst"
+ using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and
+ copy the upper 7 packed elements from "a" to the upper elements of "dst". The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ IF k[0]
+ dst.fp16[0] := (1.0 / SQRT(b.fp16[0]))
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal square root of the lower half-precision
+ (16-bit) floating-point element in "b", store the result in the lower element of "dst"
+ using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the
+ upper 7 packed elements from "a" to the upper elements of "dst". The maximum relative
+ error for this approximation is less than 1.5*2^-12.
+
+ IF k[0]
+ dst.fp16[0] := (1.0 / SQRT(b.fp16[0]))
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR i := 0 to 31
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst".
+ [round_note]
+
+ FOR i := 0 to 31
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using writemask "k" (elements are copied
+ from "src" when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of packed half-precision (16-bit) floating-point
+ elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ [round_note]
+
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := SQRT(a.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the square root of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst", and copy the upper 7
+ packed elements from "a" to the upper elements of "dst".
+
+ dst.fp16[0] := SQRT(b.fp16[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst", and copy the upper 7
+ packed elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ dst.fp16[0] := SQRT(b.fp16[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the square root of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := SQRT(b.fp16[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+
+ Compute the square root of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using writemask "k" (the
+ element is copied from "src" when mask bit 0 is not set), and copy the upper 7 packed
+ elements from "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := SQRT(b.fp16[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the square root of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst".
+
+ IF k[0]
+ dst.fp16[0] := SQRT(b.fp16[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the square root of the lower half-precision (16-bit) floating-point
+ element in "b", store the result in the lower element of "dst" using zeromask "k" (the
+ element is zeroed out when mask bit 0 is not set), and copy the upper 7 packed elements
+ from "a" to the upper elements of "dst".
+ [round_note]
+
+ IF k[0]
+ dst.fp16[0] := SQRT(b.fp16[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst". The maximum relative
+ error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 31
+ dst.fp16[i] := (1.0 / a.fp16[i])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst" using writemask "k"
+ (elements are copied from "src" when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := (1.0 / a.fp16[i])
+ ELSE
+ dst.fp16[i] := src.fp16[i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal of packed half-precision (16-bit)
+ floating-point elements in "a", and store the results in "dst" using zeromask "k"
+ (elements are zeroed out when the corresponding mask bit is not set). The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR i := 0 to 31
+ IF k[i]
+ dst.fp16[i] := (1.0 / a.fp16[i])
+ ELSE
+ dst.fp16[i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the approximate reciprocal of the lower half-precision (16-bit)
+ floating-point element in "a", store the result in the lower element of "dst", and copy
+ the upper 7 packed elements from "a" to the upper elements of "dst". The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ dst.fp16[0] := (1.0 / b.fp16[0])
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+ Compute the approximate reciprocal of the lower half-precision (16-bit)
+ floating-point element in "a", store the result in the lower element of "dst" using
+ writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy
+ the upper 7 packed elements from "a" to the upper elements of "dst". The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ IF k[0]
+ dst.fp16[0] := (1.0 / b.fp16[0])
+ ELSE
+ dst.fp16[0] := src.fp16[0]
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+ Compute the approximate reciprocal of the lower half-precision (16-bit)
+ floating-point element in "a", store the result in the lower element of "dst" using
+ zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper
+ 7 packed elements from "a" to the upper elements of "dst". The maximum relative error
+ for this approximation is less than 1.5*2^-12.
+
+ IF k[0]
+ dst.fp16[0] := (1.0 / b.fp16[0])
+ ELSE
+ dst.fp16[0] := 0
+ FI
+ dst[127:16] := a[127:16]
+ dst[MAX:128] := 0
+
+
+ AVX512_FP16
+
+ Elementary Math Functions
+
+
+
+
+
+
+
+
+
+
+
+ Set packed half-precision (16-bit) floating-point elements in "dst" with the
+ supplied values.
+
+ dst.fp16[0] := e0
+ dst.fp16[1] := e1
+ dst.fp16[2] := e2
+ dst.fp16[3] := e3
+ dst.fp16[4] := e4
+ dst.fp16[5] := e5
+ dst.fp16[6] := e6
+ dst.fp16[7] := e7
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed half-precision (16-bit) floating-point elements in "dst" with the
+ supplied values.
+
+ dst.fp16[0] := e0
+ dst.fp16[1] := e1
+ dst.fp16[2] := e2
+ dst.fp16[3] := e3
+ dst.fp16[4] := e4
+ dst.fp16[5] := e5
+ dst.fp16[6] := e6
+ dst.fp16[7] := e7
+ dst.fp16[8] := e8
+ dst.fp16[9] := e9
+ dst.fp16[10] := e10
+ dst.fp16[11] := e11
+ dst.fp16[12] := e12
+ dst.fp16[13] := e13
+ dst.fp16[14] := e14
+ dst.fp16[15] := e15
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed half-precision (16-bit) floating-point elements in "dst" with the
+ supplied values.
+
+ dst.fp16[0] := e0
+ dst.fp16[1] := e1
+ dst.fp16[2] := e2
+ dst.fp16[3] := e3
+ dst.fp16[4] := e4
+ dst.fp16[5] := e5
+ dst.fp16[6] := e6
+ dst.fp16[7] := e7
+ dst.fp16[8] := e8
+ dst.fp16[9] := e9
+ dst.fp16[10] := e10
+ dst.fp16[11] := e11
+ dst.fp16[12] := e12
+ dst.fp16[13] := e13
+ dst.fp16[14] := e14
+ dst.fp16[15] := e15
+ dst.fp16[16] := e16
+ dst.fp16[17] := e17
+ dst.fp16[18] := e18
+ dst.fp16[19] := e19
+ dst.fp16[20] := e20
+ dst.fp16[21] := e21
+ dst.fp16[22] := e22
+ dst.fp16[23] := e23
+ dst.fp16[24] := e24
+ dst.fp16[25] := e25
+ dst.fp16[26] := e26
+ dst.fp16[27] := e27
+ dst.fp16[28] := e28
+ dst.fp16[29] := e29
+ dst.fp16[30] := e30
+ dst.fp16[31] := e31
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed half-precision (16-bit) floating-point elements in "dst" with the
+ supplied values in reverse order.
+
+ dst.fp16[0] := e7
+ dst.fp16[1] := e6
+ dst.fp16[2] := e5
+ dst.fp16[3] := e4
+ dst.fp16[4] := e3
+ dst.fp16[5] := e2
+ dst.fp16[6] := e1
+ dst.fp16[7] := e0
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed half-precision (16-bit) floating-point elements in "dst" with the
+ supplied values in reverse order.
+
+ dst.fp16[0] := e15
+ dst.fp16[1] := e14
+ dst.fp16[2] := e13
+ dst.fp16[3] := e12
+ dst.fp16[4] := e11
+ dst.fp16[5] := e10
+ dst.fp16[6] := e9
+ dst.fp16[7] := e8
+ dst.fp16[8] := e7
+ dst.fp16[9] := e6
+ dst.fp16[10] := e5
+ dst.fp16[11] := e4
+ dst.fp16[12] := e3
+ dst.fp16[13] := e2
+ dst.fp16[14] := e1
+ dst.fp16[15] := e0
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed half-precision (16-bit) floating-point elements in "dst" with the
+ supplied values in reverse order.
+
+ dst.fp16[0] := e31
+ dst.fp16[1] := e30
+ dst.fp16[2] := e29
+ dst.fp16[3] := e28
+ dst.fp16[4] := e27
+ dst.fp16[5] := e26
+ dst.fp16[6] := e25
+ dst.fp16[7] := e24
+ dst.fp16[8] := e23
+ dst.fp16[9] := e22
+ dst.fp16[10] := e21
+ dst.fp16[11] := e20
+ dst.fp16[12] := e19
+ dst.fp16[13] := e18
+ dst.fp16[14] := e17
+ dst.fp16[15] := e16
+ dst.fp16[16] := e15
+ dst.fp16[17] := e14
+ dst.fp16[18] := e13
+ dst.fp16[19] := e12
+ dst.fp16[20] := e11
+ dst.fp16[21] := e10
+ dst.fp16[22] := e9
+ dst.fp16[23] := e8
+ dst.fp16[24] := e7
+ dst.fp16[25] := e6
+ dst.fp16[26] := e5
+ dst.fp16[27] := e4
+ dst.fp16[28] := e3
+ dst.fp16[29] := e2
+ dst.fp16[30] := e1
+ dst.fp16[31] := e0
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+ Broadcast half-precision (16-bit) floating-point value "a" to all elements of
+ "dst".
+
+ FOR i := 0 to 7
+ dst.fp16[i] := a[15:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+ Broadcast half-precision (16-bit) floating-point value "a" to all elements of
+ "dst".
+
+ FOR i := 0 to 15
+ dst.fp16[i] := a[15:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+ Broadcast half-precision (16-bit) floating-point value "a" to all elements of
+ "dst".
+
+ FOR i := 0 to 31
+ dst.fp16[i] := a[15:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+ Broadcast half-precision (16-bit) complex floating-point value "a" to all
+ elements of "dst".
+
+ FOR i := 0 to 3
+ dst.fp16[2*i+0] := a[15:0]
+ dst.fp16[2*i+1] := a[31:16]
+ ENDFOR
+ dst[MAX:128] := 0
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+ Broadcast half-precision (16-bit) complex floating-point value "a" to all
+ elements of "dst".
+
+ FOR i := 0 to 7
+ dst.fp16[2*i+0] := a[15:0]
+ dst.fp16[2*i+1] := a[31:16]
+ ENDFOR
+ dst[MAX:256] := 0
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+ Broadcast half-precision (16-bit) complex floating-point value "a" to all
+ elements of "dst".
+
+ FOR i := 0 to 15
+ dst.fp16[2*i+0] := a[15:0]
+ dst.fp16[2*i+1] := a[31:16]
+ ENDFOR
+ dst[MAX:512] := 0
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+ Copy half-precision (16-bit) floating-point element "a" to the lower element of
+ "dst", and zero the upper 7 elements.
+
+ dst.fp16[0] := a[15:0]
+ dst[127:16] := 0
+
+ AVX512_FP16
+
+ Set
+
+
+
+ Return vector of type __m512h with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ AVX512_FP16
+
+ Set
+
+
+
+
+ Cast vector of type "__m128h" to type "__m128". This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m256h" to type "__m256". This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m512h" to type "__m512". This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m128h" to type "__m128d". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m256h" to type "__m256d". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m512h" to type "__m512d". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m128h" to type "__m128i". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m256h" to type "__m256i". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m512h" to type "__m512i". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m128" to type "__m128h". This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m256" to type "__m256h". This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m512" to type "__m512h". This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m128d" to type "__m128h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m256d" to type "__m256h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m512d" to type "__m512h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m128i" to type "__m128h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m256i" to type "__m256h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m512i" to type "__m512h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m256h" to type "__m128h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m512h" to type "__m128h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m512h" to type "__m256h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m128h" to type "__m256h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m128h" to type "__m512h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m256h" to type "__m512h". This intrinsic is only used
+ for compilation and does not generate any instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m128h" to type "__m256h"; the upper 128 bits of the
+ result are zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m128h" to type "__m512h"; the upper 128 bits of the
+ result are zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+
+ Cast vector of type "__m256h" to type "__m512h"; the upper 128 bits of the
+ result are zeroed. This intrinsic is only used for compilation and does not generate any
+ instructions, thus it has zero latency.
+ AVX512_FP16
+
+ Cast
+
+
+
+ Return vector of type __m512h with undefined elements.
+ AVX512_FP16
+
+ General Support
+
+
+
+
+
+
+
+ For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular
+ shift control within the corresponding 64-bit element of "a", and store the 8 assembled
+ bytes to the corresponding 64-bit element of "dst".
+
+ FOR i := 0 to 3
+ q := i * 64
+ FOR j := 0 to 7
+ tmp8 := 0
+ ctrl := a[q+j*8+7:q+j*8] & 63
+ FOR l := 0 to 7
+ tmp8[l] := b[q+((ctrl+l) & 63)]
+ ENDFOR
+ dst[q+j*8+7:q+j*8] := tmp8[7:0]
+ ENDFOR
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+
+ For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular
+ shift control within the corresponding 64-bit element of "a", and store the 8 assembled
+ bytes to the corresponding 64-bit element of "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR i := 0 to 3
+ q := i * 64
+ FOR j := 0 to 7
+ tmp8 := 0
+ ctrl := a[q+j*8+7:q+j*8] & 63
+ FOR l := 0 to 7
+ tmp8[l] := b[q+((ctrl+l) & 63)]
+ ENDFOR
+ IF k[i*8+j]
+ dst[q+j*8+7:q+j*8] := tmp8[7:0]
+ ELSE
+ dst[q+j*8+7:q+j*8] := src[q+j*8+7:q+j*8]
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular
+ shift control within the corresponding 64-bit element of "a", and store the 8 assembled
+ bytes to the corresponding 64-bit element of "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR i := 0 to 3
+ q := i * 64
+ FOR j := 0 to 7
+ tmp8 := 0
+ ctrl := a[q+j*8+7:q+j*8] & 63
+ FOR l := 0 to 7
+ tmp8[l] := b[q+((ctrl+l) & 63)]
+ ENDFOR
+ IF k[i*8+j]
+ dst[q+j*8+7:q+j*8] := tmp8[7:0]
+ ELSE
+ dst[q+j*8+7:q+j*8] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular
+ shift control within the corresponding 64-bit element of "a", and store the 8 assembled
+ bytes to the corresponding 64-bit element of "dst".
+
+ FOR i := 0 to 1
+ q := i * 64
+ FOR j := 0 to 7
+ tmp8 := 0
+ ctrl := a[q+j*8+7:q+j*8] & 63
+ FOR l := 0 to 7
+ tmp8[l] := b[q+((ctrl+l) & 63)]
+ ENDFOR
+ dst[q+j*8+7:q+j*8] := tmp8[7:0]
+ ENDFOR
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+
+ For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular
+ shift control within the corresponding 64-bit element of "a", and store the 8 assembled
+ bytes to the corresponding 64-bit element of "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR i := 0 to 1
+ q := i * 64
+ FOR j := 0 to 7
+ tmp8 := 0
+ ctrl := a[q+j*8+7:q+j*8] & 63
+ FOR l := 0 to 7
+ tmp8[l] := b[q+((ctrl+l) & 63)]
+ ENDFOR
+ IF k[i*8+j]
+ dst[q+j*8+7:q+j*8] := tmp8[7:0]
+ ELSE
+ dst[q+j*8+7:q+j*8] := src[q+j*8+7:q+j*8]
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+
+ For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular
+ shift control within the corresponding 64-bit element of "a", and store the 8 assembled
+ bytes to the corresponding 64-bit element of "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR i := 0 to 1
+ q := i * 64
+ FOR j := 0 to 7
+ tmp8 := 0
+ ctrl := a[q+j*8+7:q+j*8] & 63
+ FOR l := 0 to 7
+ tmp8[l] := b[q+((ctrl+l) & 63)]
+ ENDFOR
+ IF k[i*8+j]
+ dst[q+j*8+7:q+j*8] := tmp8[7:0]
+ ELSE
+ dst[q+j*8+7:q+j*8] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Bit Manipulation
+
+
+
+
+
+ Shuffle 8-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ id := idx[i+4:i]*8
+ dst[i+7:i] := a[id+7:id]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ id := idx[i+4:i]*8
+ IF k[j]
+ dst[i+7:i] := a[id+7:id]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ id := idx[i+4:i]*8
+ IF k[j]
+ dst[i+7:i] := a[id+7:id]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+ Shuffle 8-bit integers in "a" using the corresponding index in "idx", and store
+ the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ id := idx[i+3:i]*8
+ dst[i+7:i] := a[id+7:id]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" using the corresponding index in "idx", and store
+ the results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ id := idx[i+3:i]*8
+ IF k[j]
+ dst[i+7:i] := a[id+7:id]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" using the corresponding index in "idx", and store
+ the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding
+ mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ id := idx[i+3:i]*8
+ IF k[j]
+ dst[i+7:i] := a[id+7:id]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 31
+ i := j*8
+ off := 8*idx[i+4:i]
+ dst[i+7:i] := idx[i+5] ? b[off+7:off] : a[off+7:off]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ off := 8*idx[i+4:i]
+ dst[i+7:i] := idx[i+5] ? b[off+7:off] : a[off+7:off]
+ ELSE
+ dst[i+7:i] := a[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ off := 8*idx[i+4:i]
+ dst[i+7:i] := idx[i+5] ? b[off+7:off] : a[off+7:off]
+ ELSE
+ dst[i+7:i] := idx[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ off := 8*idx[i+4:i]
+ dst[i+7:i] := idx[i+5] ? b[off+7:off] : a[off+7:off]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ off := 8*idx[i+3:i]
+ dst[i+7:i] := idx[i+4] ? b[off+7:off] : a[off+7:off]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using writemask "k" (elements are copied
+ from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ off := 8*idx[i+3:i]
+ dst[i+7:i] := idx[i+4] ? b[off+7:off] : a[off+7:off]
+ ELSE
+ dst[i+7:i] := a[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using writemask "k" (elements are copied
+ from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ off := 8*idx[i+3:i]
+ dst[i+7:i] := idx[i+4] ? b[off+7:off] : a[off+7:off]
+ ELSE
+ dst[i+7:i] := idx[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" using the corresponding selector and
+ index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ off := 8*idx[i+3:i]
+ dst[i+7:i] := idx[i+4] ? b[off+7:off] : a[off+7:off]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX512_VBMI
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+
+ For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular
+ shift control within the corresponding 64-bit element of "a", and store the 8 assembled
+ bytes to the corresponding 64-bit element of "dst".
+
+ FOR i := 0 to 7
+ q := i * 64
+ FOR j := 0 to 7
+ tmp8 := 0
+ ctrl := a[q+j*8+7:q+j*8] & 63
+ FOR l := 0 to 7
+ tmp8[l] := b[q+((ctrl+l) & 63)]
+ ENDFOR
+ dst[q+j*8+7:q+j*8] := tmp8[7:0]
+ ENDFOR
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI
+
+ Bit Manipulation
+
+
+
+
+
+
+
+ For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular
+ shift control within the corresponding 64-bit element of "a", and store the 8 assembled
+ bytes to the corresponding 64-bit element of "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ FOR i := 0 to 7
+ q := i * 64
+ FOR j := 0 to 7
+ tmp8 := 0
+ ctrl := a[q+j*8+7:q+j*8] & 63
+ FOR l := 0 to 7
+ tmp8[l] := b[q+((ctrl+l) & 63)]
+ ENDFOR
+ IF k[i*8+j]
+ dst[q+j*8+7:q+j*8] := tmp8[7:0]
+ ELSE
+ dst[q+j*8+7:q+j*8] := src[q+j*8+7:q+j*8]
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI
+
+ Bit Manipulation
+
+
+
+
+
+
+ For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular
+ shift control within the corresponding 64-bit element of "a", and store the 8 assembled
+ bytes to the corresponding 64-bit element of "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR i := 0 to 7
+ q := i * 64
+ FOR j := 0 to 7
+ tmp8 := 0
+ ctrl := a[q+j*8+7:q+j*8] & 63
+ FOR l := 0 to 7
+ tmp8[l] := b[q+((ctrl+l) & 63)]
+ ENDFOR
+ IF k[i*8+j]
+ dst[q+j*8+7:q+j*8] := tmp8[7:0]
+ ELSE
+ dst[q+j*8+7:q+j*8] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI
+
+ Bit Manipulation
+
+
+
+
+
+ Shuffle 8-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ id := idx[i+5:i]*8
+ dst[i+7:i] := a[id+7:id]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using writemask "k" (elements are copied from
+ "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ id := idx[i+5:i]*8
+ IF k[j]
+ dst[i+7:i] := a[id+7:id]
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" across lanes using the corresponding index in
+ "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when
+ the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ id := idx[i+5:i]*8
+ IF k[j]
+ dst[i+7:i] := a[id+7:id]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst".
+
+ FOR j := 0 to 63
+ i := j*8
+ off := 8*idx[i+5:i]
+ dst[i+7:i] := idx[i+6] ? b[off+7:off] : a[off+7:off]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ off := 8*idx[i+5:i]
+ dst[i+7:i] := idx[i+6] ? b[off+7:off] : a[off+7:off]
+ ELSE
+ dst[i+7:i] := a[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using writemask "k"
+ (elements are copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ off := 8*idx[i+5:i]
+ dst[i+7:i] := idx[i+6] ? b[off+7:off] : a[off+7:off]
+ ELSE
+ dst[i+7:i] := idx[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI
+
+ Swizzle
+
+
+
+
+
+
+
+ Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding
+ selector and index in "idx", and store the results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ off := 8*idx[i+5:i]
+ dst[i+7:i] := idx[i+6] ? b[off+7:off] : a[off+7:off]
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+
+ AVX512_VBMI
+
+ Swizzle
+
+
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 64-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] &
+ 63)
+ ELSE
dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 64-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] &
+ 63)
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 64-bits in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] &
+ 63)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 64-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] &
+ 63)
+ ELSE
dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 64-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] &
+ 63)
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 64-bits in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] &
+ 63)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 32-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
+ ELSE
dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 32-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 32-bits in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 32-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
+ ELSE
dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 32-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 32-bits in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 16-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 16-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 16-bits in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 16-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 16-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 16-bits in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
+ ELSE
dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in
+ "dst" using writemask "k" (elements are copied from "src"" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
+ ELSE
dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF count[63:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF imm8[7:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF count[63:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF imm8[7:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF count[i+63:i] < 64
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF count[i+63:i] < 64
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[63:0] > 31
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in
+ "dst" using writemask "k" (elements are copied from "src"" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in
+ "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
+ ELSE
dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
+ ELSE
dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[63:0] > 63
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 64-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
+ dst[i+63:i] := tmp[127:64]
+ ELSE
dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 64-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
+ dst[i+63:i] := tmp[127:64]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 64-bits in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
+ dst[i+63:i] := tmp[127:64]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 64-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
+ dst[i+63:i] := tmp[127:64]
+ ELSE
dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[63:0] > 63
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 64-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
+ dst[i+63:i] := tmp[127:64]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 64-bits in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
+ dst[i+63:i] := tmp[127:64]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 32-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
+ dst[i+31:i] := tmp[63:32]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 32-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
+ dst[i+31:i] := tmp[63:32]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 32-bits in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
+ dst[i+31:i] := tmp[63:32]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 32-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
+ dst[i+31:i] := tmp[63:32]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 32-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
+ dst[i+31:i] := tmp[63:32]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 32-bits in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
+ dst[i+31:i] := tmp[63:32]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 16-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 16-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 16-bits in "dst".
+
+ FOR j := 0 to 15
+ i := j*16
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 16-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 16-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 16-bits in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
+ dst[i+63:i] := tmp[127:64]
+ ELSE
dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
+ dst[i+63:i] := tmp[127:64]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in
+ "dst").
+
+ FOR j := 0 to 3
+ i := j*64
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
+ dst[i+63:i] := tmp[127:64]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
+ dst[i+63:i] := tmp[127:64]
+ ELSE
dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 1
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
+ dst[i+63:i] := tmp[127:64]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in
+ "dst").
+
+ FOR j := 0 to 1
+ i := j*64
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
+ dst[i+63:i] := tmp[127:64]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
+ dst[i+31:i] := tmp[63:32]
+ ELSE
dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
+ dst[i+31:i] := tmp[63:32]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
+ dst[i+31:i] := tmp[63:32]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
+ dst[i+31:i] := tmp[63:32]
+ ELSE
dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 3
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
+ dst[i+31:i] := tmp[63:32]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
+ dst[i+31:i] := tmp[63:32]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in
+ "dst").
+
+ FOR j := 0 to 15
+ i := j*16
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in
+ "dst").
+
+ FOR j := 0 to 7
+ i := j*16
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Shift
+
+
+ Swizzle
+
+
+
+ Load contiguous active 16-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Load
+
+
+ Swizzle
+
+
+
+
+ Load contiguous active 16-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Load
+
+
+ Swizzle
+
+
+
+ Load contiguous active 16-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Load
+
+
+ Swizzle
+
+
+
+
+ Load contiguous active 16-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Load
+
+
+ Swizzle
+
+
+
+ Load contiguous active 8-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Load
+
+
+ Swizzle
+
+
+
+
+ Load contiguous active 8-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Load
+
+
+ Swizzle
+
+
+
+ Load contiguous active 8-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Load
+
+
+ Swizzle
+
+
+
+
+ Load contiguous active 8-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Load
+
+
+
+
+
+ Load contiguous active 16-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[m+15:m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Load contiguous active 16-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[m+15:m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+ Load contiguous active 16-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[m+15:m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Load contiguous active 16-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[m+15:m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+ Load contiguous active 8-bit integers from "a" (those with their respective bit
+ set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[m+7:m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Load contiguous active 8-bit integers from "a" (those with their respective bit
+ set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[m+7:m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+ Load contiguous active 8-bit integers from "a" (those with their respective bit
+ set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[m+7:m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Load contiguous active 8-bit integers from "a" (those with their respective bit
+ set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[m+7:m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+ Contiguously store the active 16-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 16
+ m := 0
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[m+size-1:m] := a[i+15:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := 0
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Contiguously store the active 16-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 16
+ m := 0
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ dst[m+size-1:m] := a[i+15:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := src[255:m]
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+ Contiguously store the active 16-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 16
+ m := 0
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[m+size-1:m] := a[i+15:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := 0
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Contiguously store the active 16-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 16
+ m := 0
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ dst[m+size-1:m] := a[i+15:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := src[127:m]
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+ Contiguously store the active 8-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 8
+ m := 0
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[m+size-1:m] := a[i+7:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := 0
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Contiguously store the active 8-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 8
+ m := 0
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ dst[m+size-1:m] := a[i+7:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[255:m] := src[255:m]
+ dst[MAX:256] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+ Contiguously store the active 8-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 8
+ m := 0
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[m+size-1:m] := a[i+7:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := 0
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+
+
+
+
+ Contiguously store the active 8-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 8
+ m := 0
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ dst[m+size-1:m] := a[i+7:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[127:m] := src[127:m]
+ dst[MAX:128] := 0
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Swizzle
+
+
+ Swizzle
+
+
+
+
+ Contiguously store the active 16-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 16
+ m := base_addr
+ FOR j := 0 to 15
+ i := j*16
+ IF k[j]
+ MEM[m+size-1:m] := a[i+15:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Store
+
+
+ Swizzle
+
+
+
+
+ Contiguously store the active 16-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 16
+ m := base_addr
+ FOR j := 0 to 7
+ i := j*16
+ IF k[j]
+ MEM[m+size-1:m] := a[i+15:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Store
+
+
+ Swizzle
+
+
+
+
+ Contiguously store the active 8-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 8
+ m := base_addr
+ FOR j := 0 to 31
+ i := j*8
+ IF k[j]
+ MEM[m+size-1:m] := a[i+7:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Store
+
+
+ Swizzle
+
+
+
+
+ Contiguously store the active 8-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 8
+ m := base_addr
+ FOR j := 0 to 15
+ i := j*8
+ IF k[j]
+ MEM[m+size-1:m] := a[i+7:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512_VBMI2
+ AVX512VL
+
+ Store
+
+
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 64-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] &
+ 63)
+ ELSE
dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 64-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] &
+ 63)
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 64-bits in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] &
+ 63)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 32-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 32-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 32-bits in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 16-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 16-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by the amount specified in the corresponding
+ element of "c", and store the lower 16-bits in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
+ ELSE
dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in
+ "dst" using writemask "k" (elements are copied from "src"" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "b" and "a" producing an intermediate
+ 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "b" and "a" producing an intermediate
+ 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "b" and "a" producing an intermediate
+ 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in
+ "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 64-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
+ dst[i+63:i] := tmp[127:64]
+ ELSE
dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 64-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
+ dst[i+63:i] := tmp[127:64]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 64-bits in "dst".
+
+ FOR j := 0 to 7
+ i := j*64
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
+ dst[i+63:i] := tmp[127:64]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 32-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
+ dst[i+31:i] := tmp[63:32]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 32-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
+ dst[i+31:i] := tmp[63:32]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 32-bits in "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
+ dst[i+31:i] := tmp[63:32]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 16-bits in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 16-bits in "dst" using writemask "k" (elements are
+ copied from "a" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by the amount specified in the corresponding
+ element of "c", and store the upper 16-bits in "dst".
+
+ FOR j := 0 to 31
+ i := j*16
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
+ dst[i+63:i] := tmp[127:64]
+ ELSE
dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "src", "a", and "b" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using writemask "k" at 32-bit granularity (32-bit elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- FOR h := 0 to 31
- index[2:0] := (src[i+h] << 2) OR (a[i+h] << 1) OR b[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using zeromask "k" at 32-bit granularity (32-bit elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- FOR h := 0 to 31
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst".
-
-FOR j := 0 to 7
- i := j*32
- FOR h := 0 to 31
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "src", "a", and "b" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using writemask "k" at 32-bit granularity (32-bit elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- FOR h := 0 to 31
- index[2:0] := (src[i+h] << 2) OR (a[i+h] << 1) OR b[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using zeromask "k" at 32-bit granularity (32-bit elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- FOR h := 0 to 31
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst".
-
-FOR j := 0 to 3
- i := j*32
- FOR h := 0 to 31
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "src", "a", and "b" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using writemask "k" at 64-bit granularity (64-bit elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- FOR h := 0 to 63
- index[2:0] := (src[i+h] << 2) OR (a[i+h] << 1) OR b[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using zeromask "k" at 64-bit granularity (64-bit elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- FOR h := 0 to 63
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst".
-
-FOR j := 0 to 3
- i := j*64
- FOR h := 0 to 63
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "src", "a", and "b" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using writemask "k" at 64-bit granularity (64-bit elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- FOR h := 0 to 63
- index[2:0] := (src[i+h] << 2) OR (a[i+h] << 1) OR b[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using zeromask "k" at 64-bit granularity (64-bit elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- FOR h := 0 to 63
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst".
-
-FOR j := 0 to 1
- i := j*64
- FOR h := 0 to 63
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 7
- i := j*32
- IF k1[j]
- k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 7
- i := j*32
- k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 3
- i := j*32
- IF k1[j]
- k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 3
- i := j*32
- k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 3
- i := j*64
- IF k1[j]
- k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 3
- i := j*64
- k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:4] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
-
- Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 1
- i := j*64
- IF k1[j]
- k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512VL
- AVX512F
- Compare
-
-
-
- Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 1
- i := j*64
- k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:2] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 32-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave 32-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 32-bit integers from the high half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave 32-bit integers from the high half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 64-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave 64-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 64-bit integers from the high half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave 64-bit integers from the high half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 32-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave 32-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 32-bit integers from the low half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave 32-bit integers from the low half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 64-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave 64-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave 64-bit integers from the low half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave 64-bit integers from the low half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := (1.0 / a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (1.0 / a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := (1.0 / a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := (1.0 / a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 3
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Store
-
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst.m128[0] := a.m128[imm8[0]]
-tmp_dst.m128[1] := b.m128[imm8[1]]
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst.m128[0] := a.m128[imm8[0]]
-tmp_dst.m128[1] := b.m128[imm8[1]]
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-dst.m128[0] := a.m128[imm8[0]]
-dst.m128[1] := b.m128[imm8[1]]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst.m128[0] := a.m128[imm8[0]]
-tmp_dst.m128[1] := b.m128[imm8[1]]
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst.m128[0] := a.m128[imm8[0]]
-tmp_dst.m128[1] := b.m128[imm8[1]]
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-dst.m128[0] := a.m128[imm8[0]]
-dst.m128[1] := b.m128[imm8[1]]
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst.m128[0] := a.m128[imm8[0]]
-tmp_dst.m128[1] := b.m128[imm8[1]]
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst.m128[0] := a.m128[imm8[0]]
-tmp_dst.m128[1] := b.m128[imm8[1]]
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-dst.m128[0] := a.m128[imm8[0]]
-dst.m128[1] := b.m128[imm8[1]]
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst.m128[0] := a.m128[imm8[0]]
-tmp_dst.m128[1] := b.m128[imm8[1]]
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst.m128[0] := a.m128[imm8[0]]
-tmp_dst.m128[1] := b.m128[imm8[1]]
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-dst.m128[0] := a.m128[imm8[0]]
-dst.m128[1] := b.m128[imm8[1]]
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
-tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
-tmp_dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
-tmp_dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
-tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
-tmp_dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
-tmp_dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
-tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
-tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(b[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(b[255:128], imm8[7:6])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(b[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(b[255:128], imm8[7:6])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := SQRT(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := SQRT(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := SQRT(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := SQRT(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := SQRT(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := SQRT(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := SQRT(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := SQRT(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the high half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the high half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the high half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the high half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the low half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the low half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the low half of "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512VL
- AVX512F
- Miscellaneous
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the low half of "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
- Store 512-bits (composed of 8 packed 64-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
- Store 512-bits (composed of 16 packed 32-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
- Store 256-bits (composed of 4 packed 64-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
- Store 256-bits (composed of 8 packed 32-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
- Store 128-bits (composed of 2 packed 64-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
- Store 128-bits (composed of 4 packed 32-bit integers) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
- Store 256-bits (composed of 4 packed 64-bit integers) from "a" into memory.
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
- Store 256-bits (composed of 8 packed 32-bit integers) from "a" into memory.
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+255:mem_addr] := a[255:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
- Store 128-bits (composed of 2 packed 64-bit integers) from "a" into memory.
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Store
-
-
-
- Store 128-bits (composed of 4 packed 32-bit integers) from "a" into memory.
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
- Load 512-bits (composed of 8 packed 64-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
- Load 512-bits (composed of 16 packed 32-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
- Load 256-bits (composed of 4 packed 64-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
- Load 256-bits (composed of 8 packed 32-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
- Load 128-bits (composed of 2 packed 64-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
- Load 128-bits (composed of 4 packed 32-bit integers) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
- Load 256-bits (composed of 4 packed 64-bit integers) from memory into "dst".
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
- Load 256-bits (composed of 8 packed 32-bit integers) from memory into "dst".
- "mem_addr" must be aligned on a 32-byte boundary or a general-protection exception may be generated.
-
-dst[255:0] := MEM[mem_addr+255:mem_addr]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
- Load 128-bits (composed of 2 packed 64-bit integers) from memory into "dst".
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Load
-
-
- Load 128-bits (composed of 4 packed 32-bit integers) from memory into "dst".
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
- Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
- Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
- Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
- Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
- Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
- Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
- Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VL
- AVX512F
- Logical
-
-
-
- Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- VAES
- Cryptography
-
-
-
- Perform the last round of an AES encryption flow on data (state) in "a" using the round key in "RoundKey", and store the results in "dst"."
- FOR j := 0 to 3
- i := j*128
- a[i+127:i] := ShiftRows(a[i+127:i])
- a[i+127:i] := SubBytes(a[i+127:i])
- dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- VAES
- Cryptography
-
-
-
- Perform one round of an AES encryption flow on data (state) in "a" using the round key in "RoundKey", and store the results in "dst"."
- FOR j := 0 to 3
- i := j*128
- a[i+127:i] := ShiftRows(a[i+127:i])
- a[i+127:i] := SubBytes(a[i+127:i])
- a[i+127:i] := MixColumns(a[i+127:i])
- dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- VAES
- Cryptography
-
-
-
- Perform the last round of an AES decryption flow on data (state) in "a" using the round key in "RoundKey", and store the results in "dst".
- FOR j := 0 to 3
- i := j*128
- a[i+127:i] := InvShiftRows(a[i+127:i])
- a[i+127:i] := InvSubBytes(a[i+127:i])
- dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- VAES
- Cryptography
-
-
-
- Perform one round of an AES decryption flow on data (state) in "a" using the round key in "RoundKey", and store the results in "dst".
- FOR j := 0 to 3
- i := j*128
- a[i+127:i] := InvShiftRows(a[i+127:i])
- a[i+127:i] := InvSubBytes(a[i+127:i])
- a[i+127:i] := InvMixColumns(a[i+127:i])
- dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise AND of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := a[15:0] AND b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise NOT of 16-bit masks "a" and then AND with "b", and store the result in "k".
-
-k[15:0] := (NOT a[15:0]) AND b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
- Compute the bitwise NOT of 16-bit mask "a", and store the result in "k".
-
-k[15:0] := NOT a[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise OR of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := a[15:0] OR b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise XNOR of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := NOT (a[15:0] XOR b[15:0])
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise XOR of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := a[15:0] XOR b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Shift the bits of 16-bit mask "a" left by "count" while shifting in zeros, and store the least significant 16 bits of the result in "k".
-
-k[MAX:0] := 0
-IF count[7:0] <= 15
- k[15:0] := a[15:0] << count[7:0]
-FI
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Shift the bits of 16-bit mask "a" right by "count" while shifting in zeros, and store the least significant 16 bits of the result in "k".
-
-k[MAX:0] := 0
-IF count[7:0] <= 15
- k[15:0] := a[15:0] >> count[7:0]
-FI
-
-
-
-
-
- Mask
- AVX512F
- Load
-
-
- Load 16-bit mask from memory into "k".
-
-k[15:0] := MEM[mem_addr+15:mem_addr]
-
-
-
-
-
- Mask
- AVX512F
- Store
-
-
-
- Store 16-bit mask from "a" into memory.
-
-MEM[mem_addr+15:mem_addr] := a[15:0]
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
-
- Compute the bitwise OR of 16-bit masks "a" and "b". If the result is all zeros, store 1 in "dst", otherwise store 0 in "dst". If the result is all ones, store 1 in "all_ones", otherwise store 0 in "all_ones".
-
-tmp[15:0] := a[15:0] OR b[15:0]
-IF tmp[15:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-IF tmp[15:0] == 0xFFFF
- MEM[all_ones+7:all_ones] := 1
-ELSE
- MEM[all_ones+7:all_ones] := 0
-FI
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise OR of 16-bit masks "a" and "b". If the result is all zeroes, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[15:0] := a[15:0] OR b[15:0]
-IF tmp[15:0] == 0x0
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise OR of 16-bit masks "a" and "b". If the result is all ones, store 1 in "dst", otherwise store 0 in "dst".
-
-tmp[15:0] := a[15:0] OR b[15:0]
-IF tmp[15:0] == 0xFFFF
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- AVX512F
- Mask
-
-
- Convert 16-bit mask "a" into an integer value, and store the result in "dst".
-
-dst := ZeroExtend32(a[15:0])
-
-
-
-
-
- AVX512F
- Mask
-
-
- Convert integer value "a" into an 16-bit mask, and store the result in "k".
-
-k := ZeroExtend16(a[15:0])
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise NOT of 16-bit masks "a" and then AND with "b", and store the result in "k".
-
-k[15:0] := (NOT a[15:0]) AND b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise AND of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := a[15:0] AND b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
- Copy 16-bit mask "a" to "k".
-
-k[15:0] := a[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
- Compute the bitwise NOT of 16-bit mask "a", and store the result in "k".
-
-k[15:0] := NOT a[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise OR of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := a[15:0] OR b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Unpack and interleave 8 bits from masks "a" and "b", and store the 16-bit result in "k".
-
-k[7:0] := b[7:0]
-k[15:8] := a[7:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise XNOR of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := NOT (a[15:0] XOR b[15:0])
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Compute the bitwise XOR of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := a[15:0] XOR b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Add the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := a[63:0] + b[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Add the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := a[63:0] + b[63:0]
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Add the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := a[63:0] + b[63:0]
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Add the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := a[63:0] + b[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Add the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := a[63:0] + b[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Add the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := a[31:0] + b[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Add the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := a[31:0] + b[31:0]
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Add the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := a[31:0] + b[31:0]
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Add the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := a[31:0] + b[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Add the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := a[31:0] + b[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Miscellaneous
-
-
-
-
-
- Concatenate "a" and "b" into a 128-byte immediate result, shift the result right by "imm8" 32-bit elements, and stores the low 64 bytes (16 elements) in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-temp[1023:512] := a[511:0]
-temp[511:0] := b[511:0]
-temp[1023:0] := temp[1023:0] >> (32*imm8[3:0])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := temp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Miscellaneous
-
-
-
-
- Concatenate "a" and "b" into a 128-byte immediate result, shift the result right by "imm8" 64-bit elements, and store the low 64 bytes (8 elements) in "dst".
-
-temp[1023:512] := a[511:0]
-temp[511:0] := b[511:0]
-temp[1023:0] := temp[1023:0] >> (64*imm8[2:0])
-dst[511:0] := temp[511:0]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Concatenate "a" and "b" into a 128-byte immediate result, shift the result right by "imm8" 64-bit elements, and store the low 64 bytes (8 elements) in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-temp[1023:512] := a[511:0]
-temp[511:0] := b[511:0]
-temp[1023:0] := temp[1023:0] >> (64*imm8[2:0])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := temp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Miscellaneous
-
-
-
-
-
- Concatenate "a" and "b" into a 128-byte immediate result, shift the result right by "imm8" 64-bit elements, and stores the low 64 bytes (8 elements) in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-temp[1023:512] := a[511:0]
-temp[511:0] := b[511:0]
-temp[1023:0] := temp[1023:0] >> (64*imm8[2:0])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := temp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
- Broadcast the 4 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst".
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 4)*32
- dst[i+31:i] := a[n+31:n]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Broadcast the 4 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 4)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Broadcast the 4 packed single-precision (32-bit) floating-point elements from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 4)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
- Broadcast the 4 packed double-precision (64-bit) floating-point elements from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 4)*64
- dst[i+63:i] := a[n+63:n]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Broadcast the 4 packed double-precision (64-bit) floating-point elements from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 4)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Broadcast the 4 packed double-precision (64-bit) floating-point elements from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 4)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
- Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst".
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 4)*32
- dst[i+31:i] := a[n+31:n]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 4)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Broadcast the 4 packed 32-bit integers from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- n := (j % 4)*32
- IF k[j]
- dst[i+31:i] := a[n+31:n]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
- Broadcast the 4 packed 64-bit integers from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 4)*64
- dst[i+63:i] := a[n+63:n]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Broadcast the 4 packed 64-bit integers from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 4)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Broadcast the 4 packed 64-bit integers from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- n := (j % 4)*64
- IF k[j]
- dst[i+63:i] := a[n+63:n]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
- Broadcast the low double-precision (64-bit) floating-point element from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Broadcast the low double-precision (64-bit) floating-point element from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Broadcast the low double-precision (64-bit) floating-point element from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
- Broadcast the low single-precision (32-bit) floating-point element from "a" to all elements of "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Broadcast the low single-precision (32-bit) floating-point element from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Broadcast the low single-precision (32-bit) floating-point element from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F
- Compare
-
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", and store the result in mask vector "k". [sae_note]
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-k[0] := ( a[63:0] OP b[63:0] ) ? 1 : 0
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", and store the result in mask vector "k".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-k[0] := ( a[63:0] OP b[63:0] ) ? 1 : 0
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F
- Compare
-
-
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", and store the result in mask vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set). [sae_note]
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-IF k1[0]
- k[0] := ( a[63:0] OP b[63:0] ) ? 1 : 0
-ELSE
- k[0] := 0
-FI
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F
- Compare
-
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", and store the result in mask vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-IF k1[0]
- k[0] := ( a[63:0] OP b[63:0] ) ? 1 : 0
-ELSE
- k[0] := 0
-FI
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F
- Compare
-
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", and store the result in mask vector "k". [sae_note]
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-k[0] := ( a[31:0] OP b[31:0] ) ? 1 : 0
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", and store the result in mask vector "k".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-k[0] := ( a[31:0] OP b[31:0] ) ? 1 : 0
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F
- Compare
-
-
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", and store the result in mask vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set). [sae_note]
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-IF k1[0]
- k[0] := ( a[31:0] OP b[31:0] ) ? 1 : 0
-ELSE
- k[0] := 0
-FI
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F
- Compare
-
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", and store the result in mask vector "k" using zeromask "k1" (the element is zeroed out when mask bit 0 is not set).
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-IF k1[0]
- k[0] := ( a[31:0] OP b[31:0] ) ? 1 : 0
-ELSE
- k[0] := 0
-FI
-k[MAX:1] := 0
-
-
-
-
-
- Floating Point
- Flag
- AVX512F
- Compare
-
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", and return the boolean result (0 or 1). [sae_note]
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-RETURN ( a[63:0] OP b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- AVX512F
- Compare
-
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" based on the comparison operand specified by "imm8", and return the boolean result (0 or 1). [sae_note]
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-RETURN ( a[31:0] OP b[31:0] ) ? 1 : 0
-
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Contiguously store the active double-precision (64-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 64
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := src[511:m]
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Store
- Swizzle
-
-
-
-
- Contiguously store the active double-precision (64-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 64
-m := base_addr
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- MEM[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Contiguously store the active double-precision (64-bit) floating-point elements in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 64
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := 0
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Contiguously store the active single-precision (32-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 32
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := src[511:m]
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Store
- Swizzle
-
-
-
-
- Contiguously store the active single-precision (32-bit) floating-point elements in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 32
-m := base_addr
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- MEM[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Contiguously store the active single-precision (32-bit) floating-point elements in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 32
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := 0
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- IF k[j]
- dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
- ELSE
- dst[m+63:m] := src[m+63:m]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- IF k[j]
- dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
- ELSE
- dst[m+63:m] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_Int32(a[k+63:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_Int32(a[k+63:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_FP32(a[k+63:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_FP32(a[k+63:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_FP32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_UInt32(a[k+63:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_UInt32(a[k+63:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- l := j*64
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- m := j*16
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- m := j*16
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- m := j*16
- IF k[j]
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- m := j*16
- IF k[j]
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- m := j*16
- IF k[j]
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- m := j*16
- IF k[j]
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 7
- i := 64*j
- k := 32*j
- dst[i+63:i] := Convert_FP32_To_FP64(a[k+31:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 32*j
- dst[i+63:i] := Convert_FP32_To_FP64(a[k+31:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_FP64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_FP64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_FP64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := Convert_FP32_To_FP64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 15
- i := 16*j
- l := 32*j
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 15
- i := 16*j
- l := 32*j
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := 16*j
- l := 32*j
- IF k[j]
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_UInt32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 32-bit integer, and store the result in "dst".
- [round_note]
-
-dst[31:0] := Convert_FP64_To_Int32(a[63:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 64-bit integer, and store the result in "dst".
- [round_note]
-
-dst[63:0] := Convert_FP64_To_Int64(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 32-bit integer, and store the result in "dst".
- [round_note]
-
-dst[31:0] := Convert_FP64_To_Int32(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 64-bit integer, and store the result in "dst".
- [round_note]
-
-dst[63:0] := Convert_FP64_To_Int64(a[63:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 32-bit integer, and store the result in "dst".
-
-dst[31:0] := Convert_FP64_To_Int32(a[63:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 64-bit integer, and store the result in "dst".
-
-dst[63:0] := Convert_FP64_To_Int64(a[63:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := Convert_FP64_To_FP32(b[63:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := Convert_FP64_To_FP32(b[63:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := Convert_FP64_To_FP32(b[63:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := Convert_FP64_To_FP32(b[63:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := Convert_FP64_To_FP32(b[63:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to an unsigned 32-bit integer, and store the result in "dst".
- [round_note]
-
-dst[31:0] := Convert_FP64_To_UInt32(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to an unsigned 64-bit integer, and store the result in "dst".
- [round_note]
-
-dst[63:0] := Convert_FP64_To_UInt64(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to an unsigned 32-bit integer, and store the result in "dst".
-
-dst[31:0] := Convert_FP64_To_UInt32(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to an unsigned 64-bit integer, and store the result in "dst".
-
-dst[63:0] := Convert_FP64_To_UInt64(a[63:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert the signed 64-bit integer "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := Convert_Int64_To_FP64(b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert the signed 64-bit integer "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := Convert_Int64_To_FP64(b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the signed 32-bit integer "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := Convert_Int32_To_FP64(b[31:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the signed 64-bit integer "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := Convert_Int64_To_FP64(b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert the signed 32-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := Convert_Int32_To_FP32(b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert the signed 64-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := Convert_Int64_To_FP32(b[63:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert the signed 32-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := Convert_Int32_To_FP32(b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert the signed 64-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := Convert_Int64_To_FP32(b[63:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the signed 32-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := Convert_Int32_To_FP32(b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the signed 64-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := Convert_Int64_To_FP32(b[63:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [sae_note]
-
-dst[63:0] := Convert_FP32_To_FP64(b[31:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [sae_note]
-
-IF k[0]
- dst[63:0] := Convert_FP32_To_FP64(b[31:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := Convert_FP32_To_FP64(b[31:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [sae_note]
-
-IF k[0]
- dst[63:0] := Convert_FP32_To_FP64(b[31:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := Convert_FP32_To_FP64(b[31:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer, and store the result in "dst".
- [round_note]
-
-dst[31:0] := Convert_FP32_To_Int32(a[31:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 64-bit integer, and store the result in "dst".
- [round_note]
-
-dst[63:0] := Convert_FP32_To_Int64(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer, and store the result in "dst".
- [round_note]
-
-dst[31:0] := Convert_FP32_To_Int32(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 64-bit integer, and store the result in "dst".
- [round_note]
-
-dst[63:0] := Convert_FP32_To_Int64(a[31:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer, and store the result in "dst".
-
-dst[31:0] := Convert_FP32_To_Int32(a[31:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 64-bit integer, and store the result in "dst".
-
-dst[63:0] := Convert_FP32_To_Int64(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to an unsigned 32-bit integer, and store the result in "dst".
- [round_note]
-
-dst[31:0] := Convert_FP32_To_UInt32(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to an unsigned 64-bit integer, and store the result in "dst".
- [round_note]
-
-dst[63:0] := Convert_FP32_To_UInt64(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to an unsigned 32-bit integer, and store the result in "dst".
-
-dst[31:0] := Convert_FP32_To_UInt32(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to an unsigned 64-bit integer, and store the result in "dst".
-
-dst[63:0] := Convert_FP32_To_UInt64(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 7
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[k+63:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[k+63:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 7
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[k+63:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[k+63:k])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 32*j
- l := 64*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[l+63:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst". [sae_note]
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed double-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP32_To_UInt32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed double-precision (32-bit) floating-point elements in "a" to packed unsigned 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_FP64_To_UInt32_Truncate(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 32-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[31:0] := Convert_FP64_To_Int32_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 64-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 32-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[31:0] := Convert_FP64_To_Int32_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 64-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 32-bit integer with truncation, and store the result in "dst".
-
-dst[31:0] := Convert_FP64_To_Int32_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 64-bit integer with truncation, and store the result in "dst".
-
-dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to an unsigned 32-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[31:0] := Convert_FP64_To_UInt32_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to an unsigned 64-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[63:0] := Convert_FP64_To_UInt64_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to an unsigned 32-bit integer with truncation, and store the result in "dst".
-
-dst[31:0] := Convert_FP64_To_UInt32_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to an unsigned 64-bit integer with truncation, and store the result in "dst".
-
-dst[63:0] := Convert_FP64_To_UInt64_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 64-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[63:0] := Convert_FP32_To_Int64_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 64-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[63:0] := Convert_FP32_To_Int64_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer with truncation, and store the result in "dst".
-
-dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 64-bit integer with truncation, and store the result in "dst".
-
-dst[63:0] := Convert_FP32_To_Int64_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to an unsigned 32-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[31:0] := Convert_FP32_To_UInt32_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to an unsigned 64-bit integer with truncation, and store the result in "dst".
- [sae_note]
-
-dst[63:0] := Convert_FP32_To_UInt64_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to an unsigned 32-bit integer with truncation, and store the result in "dst".
-
-dst[31:0] := Convert_FP32_To_UInt32_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to an unsigned 64-bit integer with truncation, and store the result in "dst".
-
-dst[63:0] := Convert_FP32_To_UInt64_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed unsigned 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[i+63:i] := Convert_Int64_To_FP64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
- Convert packed unsigned 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert the unsigned 64-bit integer "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := Convert_Int64_To_FP64(b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the unsigned 32-bit integer "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := Convert_Int32_To_FP64(b[31:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the unsigned 64-bit integer "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := Convert_Int64_To_FP64(b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert the unsigned 32-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := Convert_Int32_To_FP32(b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert the unsigned 64-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := Convert_Int64_To_FP32(b[63:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the unsigned 32-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := Convert_Int32_To_FP32(b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F
- Convert
-
-
-
- Convert the unsigned 64-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := Convert_Int64_To_FP32(b[63:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", =and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := 64*j
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- IF k[j]
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := 64*j
- IF k[j]
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- IF k[j]
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := 64*j
- IF k[j]
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Divide the lower double-precision (64-bit) floating-point element in "a" by the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := a[63:0] / b[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Divide the lower double-precision (64-bit) floating-point element in "a" by the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := a[63:0] / b[63:0]
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide the lower double-precision (64-bit) floating-point element in "a" by the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := a[63:0] / b[63:0]
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide the lower double-precision (64-bit) floating-point element in "a" by the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := a[63:0] / b[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Divide the lower double-precision (64-bit) floating-point element in "a" by the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := a[63:0] / b[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Divide the lower single-precision (32-bit) floating-point element in "a" by the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := a[31:0] / b[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Divide the lower single-precision (32-bit) floating-point element in "a" by the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := a[31:0] / b[31:0]
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide the lower single-precision (32-bit) floating-point element in "a" by the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := a[31:0] / b[31:0]
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide the lower single-precision (32-bit) floating-point element in "a" by the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := a[31:0] / b[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Divide the lower single-precision (32-bit) floating-point element in "a" by the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := a[31:0] / b[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
- Swizzle
-
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
- Swizzle
-
-
-
- Load contiguous active double-precision (64-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
- Swizzle
-
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
- Swizzle
-
-
-
- Load contiguous active single-precision (32-bit) floating-point elements from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[1:0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-2: dst[127:0] := a[383:256]
-3: dst[127:0] := a[511:384]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[1:0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-2: tmp[127:0] := a[383:256]
-3: tmp[127:0] := a[511:384]
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Extract 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[1:0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-2: tmp[127:0] := a[383:256]
-3: tmp[127:0] := a[511:384]
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Extract 256 bits (composed of 4 packed double-precision (64-bit) floating-point elements) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[255:0] := a[255:0]
-1: dst[255:0] := a[511:256]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Extract 256 bits (composed of 4 packed double-precision (64-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[255:0] := a[255:0]
-1: tmp[255:0] := a[511:256]
-ESAC
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Extract 256 bits (composed of 4 packed double-precision (64-bit) floating-point elements) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[255:0] := a[255:0]
-1: tmp[255:0] := a[511:256]
-ESAC
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[1:0] OF
-0: dst[127:0] := a[127:0]
-1: dst[127:0] := a[255:128]
-2: dst[127:0] := a[383:256]
-3: dst[127:0] := a[511:384]
-ESAC
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[1:0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-2: tmp[127:0] := a[383:256]
-3: tmp[127:0] := a[511:384]
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Extract 128 bits (composed of 4 packed 32-bit integers) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[1:0] OF
-0: tmp[127:0] := a[127:0]
-1: tmp[127:0] := a[255:128]
-2: tmp[127:0] := a[383:256]
-3: tmp[127:0] := a[511:384]
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Extract 256 bits (composed of 4 packed 64-bit integers) from "a", selected with "imm8", and store the result in "dst".
-
-CASE imm8[0] OF
-0: dst[255:0] := a[255:0]
-1: dst[255:0] := a[511:256]
-ESAC
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Extract 256 bits (composed of 4 packed 64-bit integers) from "a", selected with "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[255:0] := a[255:0]
-1: tmp[255:0] := a[511:256]
-ESAC
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Extract 256 bits (composed of 4 packed 64-bit integers) from "a", selected with "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-CASE imm8[0] OF
-0: tmp[255:0] := a[255:0]
-1: tmp[255:0] := a[511:256]
-ESAC
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst". "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Fix up packed double-precision (64-bit) floating-point elements in "a" and "b" using packed 64-bit integers in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := FIXUPIMMPD(a[i+63:i], b[i+63:i], c[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst". "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Fix up packed single-precision (32-bit) floating-point elements in "a" and "b" using packed 32-bit integers in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := FIXUPIMMPD(a[i+31:i], b[i+31:i], c[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up the lower double-precision (64-bit) floating-point elements in "a" and "b" using the lower 64-bit integer in "c", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Fix up the lower double-precision (64-bit) floating-point elements in "a" and "b" using the lower 64-bit integer in "c", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Fix up the lower double-precision (64-bit) floating-point elements in "a" and "b" using the lower 64-bit integer in "c", store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-IF k[0]
- dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
-ELSE
- dst[63:0] := a[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up the lower double-precision (64-bit) floating-point elements in "a" and "b" using the lower 64-bit integer in "c", store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-IF k[0]
- dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
-ELSE
- dst[63:0] := a[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Fix up the lower double-precision (64-bit) floating-point elements in "a" and "b" using the lower 64-bit integer in "c", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-IF k[0]
- dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up the lower double-precision (64-bit) floating-point elements in "a" and "b" using the lower 64-bit integer in "c", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[63:0], src2[63:0], src3[63:0], imm8[7:0]) {
- tsrc[63:0] := ((src2[62:52] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[63:0]
- CASE(tsrc[63:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[63:0] := src1[63:0]
- 1 : dest[63:0] := tsrc[63:0]
- 2 : dest[63:0] := QNaN(tsrc[63:0])
- 3 : dest[63:0] := QNAN_Indefinite
- 4 : dest[63:0] := -INF
- 5 : dest[63:0] := +INF
- 6 : dest[63:0] := tsrc.sign? -INF : +INF
- 7 : dest[63:0] := -0
- 8 : dest[63:0] := +0
- 9 : dest[63:0] := -1
- 10: dest[63:0] := +1
- 11: dest[63:0] := 1/2
- 12: dest[63:0] := 90.0
- 13: dest[63:0] := PI/2
- 14: dest[63:0] := MAX_FLOAT
- 15: dest[63:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[63:0]
-}
-IF k[0]
- dst[63:0] := FIXUPIMMPD(a[63:0], b[63:0], c[63:0], imm8[7:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up the lower single-precision (32-bit) floating-point elements in "a" and "b" using the lower 32-bit integer in "c", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Fix up the lower single-precision (32-bit) floating-point elements in "a" and "b" using the lower 32-bit integer in "c", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Fix up the lower single-precision (32-bit) floating-point elements in "a" and "b" using the lower 32-bit integer in "c", store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-IF k[0]
- dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
-ELSE
- dst[31:0] := a[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up the lower single-precision (32-bit) floating-point elements in "a" and "b" using the lower 32-bit integer in "c", store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-IF k[0]
- dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
-ELSE
- dst[31:0] := a[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Fix up the lower single-precision (32-bit) floating-point elements in "a" and "b" using the lower 32-bit integer in "c", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". "imm8" is used to set the required flags reporting.
- [sae_note]
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-IF k[0]
- dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Fix up the lower single-precision (32-bit) floating-point elements in "a" and "b" using the lower 32-bit integer in "c", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". "imm8" is used to set the required flags reporting.
- enum TOKEN_TYPE {
- QNAN_TOKEN := 0, \
- SNAN_TOKEN := 1, \
- ZERO_VALUE_TOKEN := 2, \
- ONE_VALUE_TOKEN := 3, \
- NEG_INF_TOKEN := 4, \
- POS_INF_TOKEN := 5, \
- NEG_VALUE_TOKEN := 6, \
- POS_VALUE_TOKEN := 7
-}
-DEFINE FIXUPIMMPD(src1[31:0], src2[31:0], src3[31:0], imm8[7:0]) {
- tsrc[31:0] := ((src2[30:23] == 0) AND (MXCSR.DAZ == 1)) ? 0.0 : src2[31:0]
- CASE(tsrc[31:0]) OF
- QNAN_TOKEN:j := 0
- SNAN_TOKEN:j := 1
- ZERO_VALUE_TOKEN: j := 2
- ONE_VALUE_TOKEN: j := 3
- NEG_INF_TOKEN: j := 4
- POS_INF_TOKEN: j := 5
- NEG_VALUE_TOKEN: j := 6
- POS_VALUE_TOKEN: j := 7
- ESAC
-
- token_response[3:0] := src3[3+4*j:4*j]
-
- CASE(token_response[3:0]) OF
- 0 : dest[31:0] := src1[31:0]
- 1 : dest[31:0] := tsrc[31:0]
- 2 : dest[31:0] := QNaN(tsrc[31:0])
- 3 : dest[31:0] := QNAN_Indefinite
- 4 : dest[31:0] := -INF
- 5 : dest[31:0] := +INF
- 6 : dest[31:0] := tsrc.sign? -INF : +INF
- 7 : dest[31:0] := -0
- 8 : dest[31:0] := +0
- 9 : dest[31:0] := -1
- 10: dest[31:0] := +1
- 11: dest[31:0] := 1/2
- 12: dest[31:0] := 90.0
- 13: dest[31:0] := PI/2
- 14: dest[31:0] := MAX_FLOAT
- 15: dest[31:0] := -MAX_FLOAT
- ESAC
-
- CASE(tsrc[31:0]) OF
- ZERO_VALUE_TOKEN:
- IF (imm8[0]) #ZE; FI
- ZERO_VALUE_TOKEN:
- IF (imm8[1]) #IE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[2]) #ZE; FI
- ONE_VALUE_TOKEN:
- IF (imm8[3]) #IE; FI
- SNAN_TOKEN:
- IF (imm8[4]) #IE; FI
- NEG_INF_TOKEN:
- IF (imm8[5]) #IE; FI
- NEG_VALUE_TOKEN:
- IF (imm8[6]) #IE; FI
- POS_INF_TOKEN:
- IF (imm8[7]) #IE; FI
- ESAC
- RETURN dest[31:0]
-}
-IF k[0]
- dst[31:0] := FIXUPIMMPD(a[31:0], b[31:0], c[31:0], imm8[7:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "a" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper element from "c" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := c[63:0]
-FI
-dst[127:64] := c[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper element from "c" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := c[63:0]
-FI
-dst[127:64] := c[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := a[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := a[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := c[31:0]
-FI
-dst[127:32] := c[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := c[31:0]
-FI
-dst[127:32] := c[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := a[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := a[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 7
+ i := j*64
+ IF k[j]
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
+ dst[i+63:i] := tmp[127:64]
+ ELSE
+ dst[i+63:i] := src[i+63:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 64-bit integers in "a" and "b" producing an intermediate
+ 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in
+ "dst").
+
+ FOR j := 0 to 7
+ i := j*64
+ tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
+ dst[i+63:i] := tmp[127:64]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
+ dst[i+31:i] := tmp[63:32]
+ ELSE
+ dst[i+31:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 15
+ i := j*32
+ IF k[j]
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
+ dst[i+31:i] := tmp[63:32]
+ ELSE
+ dst[i+31:i] := src[i+31:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 32-bit integers in "a" and "b" producing an intermediate
+ 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*32
+ tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
+ dst[i+31:i] := tmp[63:32]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in
+ "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not
+ set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in
+ "dst" using writemask "k" (elements are copied from "src" when the corresponding mask
+ bit is not set).
+
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
+ dst[i+15:i] := tmp[31:16]
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+
+
+
+
+ Concatenate packed 16-bit integers in "a" and "b" producing an intermediate
+ 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in
+ "dst").
+
+ FOR j := 0 to 31
+ i := j*16
+ tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Shift
+
+
+ Swizzle
+
+
+
+ Load contiguous active 16-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Load
+
+
+ Swizzle
+
+
+
+
+ Load contiguous active 16-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Load
+
+
+ Swizzle
+
+
+
+ Load contiguous active 8-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Load
+
+
+ Swizzle
+
+
+
+
+ Load contiguous active 8-bit integers from unaligned memory at "mem_addr"
+ (those with their respective bit set in mask "k"), and store the results in "dst" using
+ writemask "k" (elements are copied from "src" when the corresponding mask bit is not
+ set).
+
+ m := 0
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Load
+
+
+
+
+
+ Load contiguous active 16-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are
+ zeroed out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[m+15:m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Swizzle
+
+
+
+
+
+
+ Load contiguous active 16-bit integers from "a" (those with their respective
+ bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[i+15:i] := a[m+15:m]
+ m := m + 16
+ ELSE
+ dst[i+15:i] := src[i+15:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Swizzle
+
+
+
+
+
+ Load contiguous active 8-bit integers from "a" (those with their respective bit
+ set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[m+7:m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Swizzle
+
+
+
+
+
+
+ Load contiguous active 8-bit integers from "a" (those with their respective bit
+ set in mask "k"), and store the results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+
+ m := 0
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[i+7:i] := a[m+7:m]
+ m := m + 8
+ ELSE
+ dst[i+7:i] := src[i+7:i]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Swizzle
+
+
+
+
+
+ Contiguously store the active 16-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 16
+ m := 0
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[m+size-1:m] := a[i+15:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := 0
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Swizzle
+
+
+
+
+
+
+ Contiguously store the active 16-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 16
+ m := 0
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ dst[m+size-1:m] := a[i+15:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := src[511:m]
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Swizzle
+
+
+
+
+
+ Contiguously store the active 8-bit integers in "a" (those with their
+ respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
+
+ size := 8
+ m := 0
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[m+size-1:m] := a[i+7:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := 0
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Swizzle
+
+
+
+
+
+
+ Contiguously store the active 8-bit integers in "a" (those with their
+ respective bit set in writemask "k") to "dst", and pass through the remaining elements
+ from "src".
+
+ size := 8
+ m := 0
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ dst[m+size-1:m] := a[i+7:i]
+ m := m + size
+ FI
+ ENDFOR
+ dst[511:m] := src[511:m]
+ dst[MAX:512] := 0
+
+
+ AVX512_VBMI2
+
+ Swizzle
+
+
+ Swizzle
+
+
+
+
+ Contiguously store the active 16-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 16
+ m := base_addr
+ FOR j := 0 to 31
+ i := j*16
+ IF k[j]
+ MEM[m+size-1:m] := a[i+15:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512_VBMI2
+
+ Store
+
+
+ Swizzle
+
+
+
+
+ Contiguously store the active 8-bit integers in "a" (those with their
+ respective bit set in writemask "k") to unaligned memory at "base_addr".
+
+ size := 8
+ m := base_addr
+ FOR j := 0 to 63
+ i := j*8
+ IF k[j]
+ MEM[m+size-1:m] := a[i+7:i]
+ m := m + size
+ FI
+ ENDFOR
+
+
+ AVX512_VBMI2
+
+ Store
+
+
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 7
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 3
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX512_VNNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 15
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst".
+
+ FOR j := 0 to 15
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements
+ are zeroed out when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements
+ are copied from "src" when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 15
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ELSE
+ dst.dword[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src"
+ when the corresponding mask bit is not set).
+
+ FOR j := 0 to 15
+ IF k[j]
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ELSE
+ dst.dword[j] := src.dword[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst".
+
+ FOR j := 0 to 15
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ AVX512_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+
+
+
+ Compute intersection of packed 32-bit integer vectors "a" and "b", and store
+ indication of match in the corresponding bit of two mask registers specified by "k1" and
+ "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the
+ corresponding bit of the mask registers.
+
+ MEM[k1+15:k1] := 0
+ MEM[k2+15:k2] := 0
+ FOR i := 0 TO 15
+ FOR j := 0 TO 15
+ match := (a.dword[i] == b.dword[j] ? 1 : 0)
+ MEM[k1+15:k1].bit[i] |= match
+ MEM[k2+15:k2].bit[j] |= match
+ ENDFOR
+ ENDFOR
+
+
+ AVX512_VP2INTERSECT
+ AVX512F
+
+ Mask
+
+
+
+
+
+
+
+ Compute intersection of packed 64-bit integer vectors "a" and "b", and store
+ indication of match in the corresponding bit of two mask registers specified by "k1" and
+ "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the
+ corresponding bit of the mask registers.
+
+ MEM[k1+7:k1] := 0
+ MEM[k2+7:k2] := 0
+ FOR i := 0 TO 7
+ FOR j := 0 TO 7
+ match := (a.qword[i] == b.qword[j] ? 1 : 0)
+ MEM[k1+7:k1].bit[i] |= match
+ MEM[k2+7:k2].bit[j] |= match
+ ENDFOR
+ ENDFOR
+
+
+ AVX512_VP2INTERSECT
+ AVX512F
+
+ Mask
+
+
+
+
+
+
+
+
+
+ Compute intersection of packed 32-bit integer vectors "a" and "b", and store
+ indication of match in the corresponding bit of two mask registers specified by "k1" and
+ "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the
+ corresponding bit of the mask registers.
+
+ MEM[k1+7:k1] := 0
+ MEM[k2+7:k2] := 0
+ FOR i := 0 TO 3
+ FOR j := 0 TO 3
+ match := (a.dword[i] == b.dword[j] ? 1 : 0)
+ MEM[k1+7:k1].bit[i] |= match
+ MEM[k2+7:k2].bit[j] |= match
+ ENDFOR
+ ENDFOR
+
+
+ AVX512_VP2INTERSECT
+ AVX512VL
+
+ Mask
+
+
+
+
+
+
+
+ Compute intersection of packed 32-bit integer vectors "a" and "b", and store
+ indication of match in the corresponding bit of two mask registers specified by "k1" and
+ "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the
+ corresponding bit of the mask registers.
+
+ MEM[k1+7:k1] := 0
+ MEM[k2+7:k2] := 0
+ FOR i := 0 TO 7
+ FOR j := 0 TO 7
+ match := (a.dword[i] == b.dword[j] ? 1 : 0)
+ MEM[k1+7:k1].bit[i] |= match
+ MEM[k2+7:k2].bit[j] |= match
+ ENDFOR
+ ENDFOR
+
+
+ AVX512_VP2INTERSECT
+ AVX512VL
+
+ Mask
+
+
+
+
+
+
+
+ Compute intersection of packed 64-bit integer vectors "a" and "b", and store
+ indication of match in the corresponding bit of two mask registers specified by "k1" and
+ "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the
+ corresponding bit of the mask registers.
+
+ MEM[k1+7:k1] := 0
+ MEM[k2+7:k2] := 0
+ FOR i := 0 TO 1
+ FOR j := 0 TO 1
+ match := (a.qword[i] == b.qword[j] ? 1 : 0)
+ MEM[k1+7:k1].bit[i] |= match
+ MEM[k2+7:k2].bit[j] |= match
+ ENDFOR
+ ENDFOR
+
+
+ AVX512_VP2INTERSECT
+ AVX512VL
+
+ Mask
+
+
+
+
+
+
+
+ Compute intersection of packed 64-bit integer vectors "a" and "b", and store
+ indication of match in the corresponding bit of two mask registers specified by "k1" and
+ "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the
+ corresponding bit of the mask registers.
+
+ MEM[k1+7:k1] := 0
+ MEM[k2+7:k2] := 0
+ FOR i := 0 TO 3
+ FOR j := 0 TO 3
+ match := (a.qword[i] == b.qword[j] ? 1 : 0)
+ MEM[k1+7:k1].bit[i] |= match
+ MEM[k2+7:k2].bit[j] |= match
+ ENDFOR
+ ENDFOR
+
+
+ AVX512_VP2INTERSECT
+ AVX512VL
+
+ Mask
+
+
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "__Y" and
+ "__Z" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from
+ the intermediate result with the corresponding unsigned 64-bit integer in "__X", and
+ store the results in "dst".
+
+
+ FOR j := 0 to 3
+ i := j*64
+ tmp[127:0] := ZeroExtend64(__Y[i+51:i]) * ZeroExtend64(__Z[i+51:i])
+ dst[i+63:i] := __X[i+63:i] + ZeroExtend64(tmp[103:52])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX_IFMA
+
+ Arithmetic
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "__Y" and
+ "__Z" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from
+ the intermediate result with the corresponding unsigned 64-bit integer in "__X", and
+ store the results in "dst".
+
+
+ FOR j := 0 to 3
+ i := j*64
+ tmp[127:0] := ZeroExtend64(__Y[i+51:i]) * ZeroExtend64(__Z[i+51:i])
+ dst[i+63:i] := __X[i+63:i] + ZeroExtend64(tmp[51:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX_IFMA
+
+ Arithmetic
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "__Y" and
+ "__Z" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from
+ the intermediate result with the corresponding unsigned 64-bit integer in "__X", and
+ store the results in "dst".
+
+
+ FOR j := 0 to 1
+ i := j*64
+ tmp[127:0] := ZeroExtend64(__Y[i+51:i]) * ZeroExtend64(__Z[i+51:i])
+ dst[i+63:i] := __X[i+63:i] + ZeroExtend64(tmp[103:52])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX_IFMA
+
+ Arithmetic
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "__Y" and
+ "__Z" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from
+ the intermediate result with the corresponding unsigned 64-bit integer in "__X", and
+ store the results in "dst".
+
+
+ FOR j := 0 to 1
+ i := j*64
+ tmp[127:0] := ZeroExtend64(__Y[i+51:i]) * ZeroExtend64(__Z[i+51:i])
+ dst[i+63:i] := __X[i+63:i] + ZeroExtend64(tmp[51:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX_IFMA
+
+ Arithmetic
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "__Y" and
+ "__Z" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from
+ the intermediate result with the corresponding unsigned 64-bit integer in "__X", and
+ store the results in "dst".
+
+
+ FOR j := 0 to 3
+ i := j*64
+ tmp[127:0] := ZeroExtend64(__Y[i+51:i]) * ZeroExtend64(__Z[i+51:i])
+ dst[i+63:i] := __X[i+63:i] + ZeroExtend64(tmp[103:52])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX_IFMA
+
+ Arithmetic
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "__Y" and
+ "__Z" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from
+ the intermediate result with the corresponding unsigned 64-bit integer in "__X", and
+ store the results in "dst".
+
+
+ FOR j := 0 to 3
+ i := j*64
+ tmp[127:0] := ZeroExtend64(__Y[i+51:i]) * ZeroExtend64(__Z[i+51:i])
+ dst[i+63:i] := __X[i+63:i] + ZeroExtend64(tmp[51:0])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX_IFMA
+
+ Arithmetic
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "__Y" and
+ "__Z" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from
+ the intermediate result with the corresponding unsigned 64-bit integer in "__X", and
+ store the results in "dst".
+
+
+ FOR j := 0 to 1
+ i := j*64
+ tmp[127:0] := ZeroExtend64(__Y[i+51:i]) * ZeroExtend64(__Z[i+51:i])
+ dst[i+63:i] := __X[i+63:i] + ZeroExtend64(tmp[103:52])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX_IFMA
+
+ Arithmetic
+
+
+
+ Multiply packed unsigned 52-bit integers in each 64-bit element of "__Y" and
+ "__Z" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from
+ the intermediate result with the corresponding unsigned 64-bit integer in "__X", and
+ store the results in "dst".
+
+
+ FOR j := 0 to 1
+ i := j*64
+ tmp[127:0] := ZeroExtend64(__Y[i+51:i]) * ZeroExtend64(__Z[i+51:i])
+ dst[i+63:i] := __X[i+63:i] + ZeroExtend64(tmp[51:0])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX_IFMA
+
+ Arithmetic
+
+
+
+
+ Convert scalar BF16 (16-bit) floating-point element stored at memory locations
+ starting at location "__A" to a single-precision (32-bit) floating-point, broadcast it
+ to packed single-precision (32-bit) floating-point elements, and store the results in
+ "dst".
+
+
+ b := Convert_BF16_To_FP32(MEM[__A+15:__A])
+ FOR j := 0 to 7
+ m := j*32
+ dst[m+31:m] := b
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert scalar half-precision (16-bit) floating-point element stored at memory
+ locations starting at location "__A" to a single-precision (32-bit) floating-point,
+ broadcast it to packed single-precision (32-bit) floating-point elements, and store the
+ results in "dst".
+
+
+ b := Convert_FP16_To_FP32(MEM[__A+15:__A])
+ FOR j := 0 to 7
+ m := j*32
+ dst[m+31:m] := b
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed BF16 (16-bit) floating-point even-indexed elements stored at
+ memory locations starting at location "__A" to packed single-precision (32-bit)
+ floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 7
+ m := j*32
+ dst[m+31:m] := Convert_BF16_To_FP32(MEM[__A+m+15:__A+m])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed half-precision (16-bit) floating-point even-indexed elements
+ stored at memory locations starting at location "__A" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 7
+ m := j*32
+ dst[m+31:m] := Convert_FP16_To_FP32(MEM[__A+m+15:__A+m])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed BF16 (16-bit) floating-point odd-indexed elements stored at
+ memory locations starting at location "__A" to packed single-precision (32-bit)
+ floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 7
+ m := j*32
+ dst[m+31:m] := Convert_BF16_To_FP32(MEM[__A+m+31:__A+m+16])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed half-precision (16-bit) floating-point odd-indexed elements
+ stored at memory locations starting at location "__A" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 7
+ m := j*32
+ dst[m+31:m] := Convert_FP16_To_FP32(MEM[__A+m+31:__A+m+16])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "__A" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 7
+ dst.word[j] := Convert_FP32_To_BF16(__A.fp32[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert scalar BF16 (16-bit) floating-point element stored at memory locations
+ starting at location "__A" to a single-precision (32-bit) floating-point, broadcast it
+ to packed single-precision (32-bit) floating-point elements, and store the results in
+ "dst".
+
+
+ b := Convert_BF16_To_FP32(MEM[__A+15:__A])
+ FOR j := 0 to 3
+ m := j*32
+ dst[m+31:m] := b
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert scalar half-precision (16-bit) floating-point element stored at memory
+ locations starting at location "__A" to a single-precision (32-bit) floating-point,
+ broadcast it to packed single-precision (32-bit) floating-point elements, and store the
+ results in "dst".
+
+
+ b := Convert_FP16_To_FP32(MEM[__A+15:__A])
+ FOR j := 0 to 3
+ m := j*32
+ dst[m+31:m] := b
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed BF16 (16-bit) floating-point even-indexed elements stored at
+ memory locations starting at location "__A" to packed single-precision (32-bit)
+ floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 3
+ m := j*32
+ dst[m+31:m] := Convert_BF16_To_FP32(MEM[__A+m+15:__A+m])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed half-precision (16-bit) floating-point even-indexed elements
+ stored at memory locations starting at location "__A" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 3
+ m := j*32
+ dst[m+31:m] := Convert_FP16_To_FP32(MEM[__A+m+15:__A+m])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed BF16 (16-bit) floating-point odd-indexed elements stored at
+ memory locations starting at location "__A" to packed single-precision (32-bit)
+ floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 3
+ m := j*32
+ dst[m+31:m] := Convert_BF16_To_FP32(MEM[__A+m+31:__A+m+16])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed half-precision (16-bit) floating-point odd-indexed elements
+ stored at memory locations starting at location "__A" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 3
+ m := j*32
+ dst[m+31:m] := Convert_FP16_To_FP32(MEM[__A+m+31:__A+m+16])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "__A" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 3
+ dst.word[j] := Convert_FP32_To_BF16(__A.fp32[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "__A" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 7
+ dst.word[j] := Convert_FP32_To_BF16(__A.fp32[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "__A" to
+ packed BF16 (16-bit) floating-point elements, and store the results in "dst".
+
+
+ FOR j := 0 to 3
+ dst.word[j] := Convert_FP32_To_BF16(__A.fp32[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_NE_CONVERT
+
+ Convert
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 7
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src", and store
+ the packed 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with
+ corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
+ tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
+ tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
+ tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed
+ 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := src.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with
+ corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results.
+ Sum these 2 results with the corresponding 32-bit integer in "src" using signed
+ saturation, and store the packed 32-bit results in "dst".
+
+ FOR j := 0 to 3
+ tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
+ tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
+ dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ AVX_VNNI
+
+ Arithmetic
+
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "__A" with
+ corresponding unsigned 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.dword := SignExtend32(__A.word[2*j]) * ZeroExtend32(__B.word[2*j])
+ tmp2.dword := SignExtend32(__A.word[2*j+1]) * ZeroExtend32(__B.word[2*j+1])
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "__A" with
+ corresponding unsigned 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W" with signed
+ saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.dword := SignExtend32(__A.word[2*j]) * ZeroExtend32(__B.word[2*j])
+ tmp2.dword := SignExtend32(__A.word[2*j+1]) * ZeroExtend32(__B.word[2*j+1])
+ dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 2 adjacent pairs of unsigned 16-bit integers in "__A" with
+ corresponding signed 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.dword := ZeroExtend32(__A.word[2*j]) * SignExtend32(__B.word[2*j])
+ tmp2.dword := ZeroExtend32(__A.word[2*j+1]) * SignExtend32(__B.word[2*j+1])
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 2 adjacent pairs of unsigned 16-bit integers in "__A" with
+ corresponding signed 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W" with signed
+ saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.dword := ZeroExtend32(__A.word[2*j]) * SignExtend32(__B.word[2*j])
+ tmp2.dword := ZeroExtend32(__A.word[2*j+1]) * SignExtend32(__B.word[2*j+1])
+ dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 2 adjacent pairs of unsigned 16-bit integers in "__A" with
+ corresponding unsigned 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.dword := ZeroExtend32(__A.word[2*j]) * ZeroExtend32(__B.word[2*j])
+ tmp2.dword := ZeroExtend32(__A.word[2*j+1]) * ZeroExtend32(__B.word[2*j+1])
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 2 adjacent pairs of unsigned 16-bit integers in "__A" with
+ corresponding unsigned 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W" with signed
+ saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.dword := ZeroExtend32(__A.word[2*j]) * ZeroExtend32(__B.word[2*j])
+ tmp2.dword := ZeroExtend32(__A.word[2*j+1]) * ZeroExtend32(__B.word[2*j+1])
+ dst.dword[j] := UNSIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "__A" with
+ corresponding unsigned 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.dword := SignExtend32(__A.word[2*j]) * ZeroExtend32(__B.word[2*j])
+ tmp2.dword := SignExtend32(__A.word[2*j+1]) * ZeroExtend32(__B.word[2*j+1])
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 2 adjacent pairs of signed 16-bit integers in "__A" with
+ corresponding unsigned 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W" with signed
+ saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.dword := SignExtend32(__A.word[2*j]) * ZeroExtend32(__B.word[2*j])
+ tmp2.dword := SignExtend32(__A.word[2*j+1]) * ZeroExtend32(__B.word[2*j+1])
+ dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 2 adjacent pairs of unsigned 16-bit integers in "__A" with
+ corresponding signed 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.dword := ZeroExtend32(__A.word[2*j]) * SignExtend32(__B.word[2*j])
+ tmp2.dword := ZeroExtend32(__A.word[2*j+1]) * SignExtend32(__B.word[2*j+1])
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 2 adjacent pairs of unsigned 16-bit integers in "__A" with
+ corresponding signed 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W" with signed
+ saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.dword := ZeroExtend32(__A.word[2*j]) * SignExtend32(__B.word[2*j])
+ tmp2.dword := ZeroExtend32(__A.word[2*j+1]) * SignExtend32(__B.word[2*j+1])
+ dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 2 adjacent pairs of unsigned 16-bit integers in "__A" with
+ corresponding unsigned 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.dword := ZeroExtend32(__A.word[2*j]) * ZeroExtend32(__B.word[2*j])
+ tmp2.dword := ZeroExtend32(__A.word[2*j+1]) * ZeroExtend32(__B.word[2*j+1])
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 2 adjacent pairs of unsigned 16-bit integers in "__A" with
+ corresponding unsigned 16-bit integers in "__B", producing 2 intermediate signed 32-bit
+ results. Sum these 2 results with the corresponding 32-bit integer in "__W" with signed
+ saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.dword := ZeroExtend32(__A.word[2*j]) * ZeroExtend32(__B.word[2*j])
+ tmp2.dword := ZeroExtend32(__A.word[2*j+1]) * ZeroExtend32(__B.word[2*j+1])
+ dst.dword[j] := UNSIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX_VNNI_INT16
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "__A" with
+ corresponding signed 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.word := SignExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])
+ tmp2.word := SignExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])
+ tmp3.word := SignExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])
+ tmp4.word := SignExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "__A" with
+ corresponding signed 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W" with signed
+ saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.word := SignExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])
+ tmp2.word := SignExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])
+ tmp3.word := SignExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])
+ tmp4.word := SignExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])
+ dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "__A" with
+ corresponding unsigned 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.word := Signed(SignExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j]))
+ tmp2.word := Signed(SignExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1]))
+ tmp3.word := Signed(SignExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2]))
+ tmp4.word := Signed(SignExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3]))
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "__A" with
+ corresponding unsigned 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W" with signed
+ saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.word := Signed(SignExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j]))
+ tmp2.word := Signed(SignExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1]))
+ tmp3.word := Signed(SignExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2]))
+ tmp4.word := Signed(SignExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3]))
+ dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "__A" with
+ corresponding unsigned 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.word := ZeroExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j])
+ tmp2.word := ZeroExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1])
+ tmp3.word := ZeroExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2])
+ tmp4.word := ZeroExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3])
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "__A" with
+ corresponding unsigned 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W" with
+ unsigned saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 7
+ tmp1.word := ZeroExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j])
+ tmp2.word := ZeroExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1])
+ tmp3.word := ZeroExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2])
+ tmp4.word := ZeroExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3])
+ dst.dword[j] := UNSIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "__A" with
+ corresponding signed 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.word := SignExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])
+ tmp2.word := SignExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])
+ tmp3.word := SignExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])
+ tmp4.word := SignExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "__A" with
+ corresponding signed 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W" with signed
+ saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.word := SignExtend16(__A.byte[4*j]) * SignExtend16(__B.byte[4*j])
+ tmp2.word := SignExtend16(__A.byte[4*j+1]) * SignExtend16(__B.byte[4*j+1])
+ tmp3.word := SignExtend16(__A.byte[4*j+2]) * SignExtend16(__B.byte[4*j+2])
+ tmp4.word := SignExtend16(__A.byte[4*j+3]) * SignExtend16(__B.byte[4*j+3])
+ dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "__A" with
+ corresponding unsigned 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.word := Signed(SignExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j]))
+ tmp2.word := Signed(SignExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1]))
+ tmp3.word := Signed(SignExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2]))
+ tmp4.word := Signed(SignExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3]))
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of signed 8-bit integers in "__A" with
+ corresponding unsigned 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W" with signed
+ saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.word := Signed(SignExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j]))
+ tmp2.word := Signed(SignExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1]))
+ tmp3.word := Signed(SignExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2]))
+ tmp4.word := Signed(SignExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3]))
+ dst.dword[j] := SIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "__A" with
+ corresponding unsigned 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W", and store
+ the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.word := ZeroExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j])
+ tmp2.word := ZeroExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1])
+ tmp3.word := ZeroExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2])
+ tmp4.word := ZeroExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3])
+ dst.dword[j] := __W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+ Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "__A" with
+ corresponding unsigned 8-bit integers in "__B", producing 4 intermediate signed 16-bit
+ results. Sum these 4 results with the corresponding 32-bit integer in "__W" with
+ unsigned saturation, and store the packed 32-bit results in "dst".
+
+
+ FOR j := 0 to 3
+ tmp1.word := ZeroExtend16(__A.byte[4*j]) * ZeroExtend16(__B.byte[4*j])
+ tmp2.word := ZeroExtend16(__A.byte[4*j+1]) * ZeroExtend16(__B.byte[4*j+1])
+ tmp3.word := ZeroExtend16(__A.byte[4*j+2]) * ZeroExtend16(__B.byte[4*j+2])
+ tmp4.word := ZeroExtend16(__A.byte[4*j+3]) * ZeroExtend16(__B.byte[4*j+3])
+ dst.dword[j] := UNSIGNED_DWORD_SATURATE(__W.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+ AVX_VNNI_INT8
+
+ Arithmetic
+
+
+
+
+
+
+
+ Extract contiguous bits from unsigned 32-bit integer "a", and store the result
+ in "dst". Extract the number of bits specified by "len", starting at the bit specified
+ by "start".
+
+ tmp[511:0] := a
+ dst[31:0] := ZeroExtend32(tmp[(start[7:0] + len[7:0] - 1):start[7:0]])
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+
+ Extract contiguous bits from unsigned 32-bit integer "a", and store the result
+ in "dst". Extract the number of bits specified by bits 15:8 of "control", starting at
+ the bit specified by bits 0:7 of "control".
+
+ start := control[7:0]
+ len := control[15:8]
+ tmp[511:0] := a
+ dst[31:0] := ZeroExtend32(tmp[(start[7:0] + len[7:0] - 1):start[7:0]])
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+
+
+ Extract contiguous bits from unsigned 64-bit integer "a", and store the result
+ in "dst". Extract the number of bits specified by "len", starting at the bit specified
+ by "start".
+
+ tmp[511:0] := a
+ dst[63:0] := ZeroExtend64(tmp[(start[7:0] + len[7:0] - 1):start[7:0]])
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+
+ Extract contiguous bits from unsigned 64-bit integer "a", and store the result
+ in "dst". Extract the number of bits specified by bits 15:8 of "control", starting at
+ the bit specified by bits 0:7 of "control"..
+
+ start := control[7:0]
+ len := control[15:8]
+ tmp[511:0] := a
+ dst[63:0] := ZeroExtend64(tmp[(start[7:0] + len[7:0] - 1):start[7:0]])
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+ Extract the lowest set bit from unsigned 32-bit integer "a" and set the
+ corresponding bit in "dst". All other bits in "dst" are zeroed, and all bits are zeroed
+ if no bits are set in "a".
+
+ dst := (-a) AND a
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+ Extract the lowest set bit from unsigned 64-bit integer "a" and set the
+ corresponding bit in "dst". All other bits in "dst" are zeroed, and all bits are zeroed
+ if no bits are set in "a".
+
+ dst := (-a) AND a
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+ Set all the lower bits of "dst" up to and including the lowest set bit in
+ unsigned 32-bit integer "a".
+
+ dst := (a - 1) XOR a
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+ Set all the lower bits of "dst" up to and including the lowest set bit in
+ unsigned 64-bit integer "a".
+
+ dst := (a - 1) XOR a
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+ Copy all bits from unsigned 32-bit integer "a" to "dst", and reset (set to 0)
+ the bit in "dst" that corresponds to the lowest set bit in "a".
+
+ dst := (a - 1) AND a
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+ Copy all bits from unsigned 64-bit integer "a" to "dst", and reset (set to 0)
+ the bit in "dst" that corresponds to the lowest set bit in "a".
+
+ dst := (a - 1) AND a
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+
+ Compute the bitwise NOT of 32-bit integer "a" and then AND with b, and store
+ the results in dst.
+
+ dst[31:0] := ((NOT a[31:0]) AND b[31:0])
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+
+ Compute the bitwise NOT of 64-bit integer "a" and then AND with b, and store
+ the results in dst.
+
+ dst[63:0] := ((NOT a[63:0]) AND b[63:0])
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+ Count the number of trailing zero bits in unsigned 16-bit integer "a", and
+ return that count in "dst".
+
+ tmp := 0
+ dst := 0
+ DO WHILE ((tmp < 16) AND a[tmp] == 0)
+ tmp := tmp + 1
+ dst := dst + 1
+ OD
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+ Count the number of trailing zero bits in unsigned 32-bit integer "a", and
+ return that count in "dst".
+
+ tmp := 0
+ dst := 0
+ DO WHILE ((tmp < 32) AND a[tmp] == 0)
+ tmp := tmp + 1
+ dst := dst + 1
+ OD
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+ Count the number of trailing zero bits in unsigned 64-bit integer "a", and
+ return that count in "dst".
+
+ tmp := 0
+ dst := 0
+ DO WHILE ((tmp < 64) AND a[tmp] == 0)
+ tmp := tmp + 1
+ dst := dst + 1
+ OD
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+ Count the number of trailing zero bits in unsigned 32-bit integer "a", and
+ return that count in "dst".
+
+ tmp := 0
+ dst := 0
+ DO WHILE ((tmp < 32) AND a[tmp] == 0)
+ tmp := tmp + 1
+ dst := dst + 1
+ OD
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+ Count the number of trailing zero bits in unsigned 64-bit integer "a", and
+ return that count in "dst".
+
+ tmp := 0
+ dst := 0
+ DO WHILE ((tmp < 64) AND a[tmp] == 0)
+ tmp := tmp + 1
+ dst := dst + 1
+ OD
+
+
+ BMI1
+
+ Bit Manipulation
+
+
+
+
+
+
+
+ Copy all bits from unsigned 32-bit integer "a" to "dst", and reset (set to 0)
+ the high bits in "dst" starting at "index".
+
+ n := index[7:0]
+ dst := a
+ IF (n < 32)
+ dst[31:n] := 0
+ FI
+
+
+ BMI2
+
+ Bit Manipulation
+
+
+
+
+
+ Copy all bits from unsigned 64-bit integer "a" to "dst", and reset (set to 0)
+ the high bits in "dst" starting at "index".
+
+ n := index[7:0]
+ dst := a
+ IF (n < 64)
+ dst[63:n] := 0
+ FI
+
+
+ BMI2
+
+ Bit Manipulation
+
+
+
+
+
+ Deposit contiguous low bits from unsigned 32-bit integer "a" to "dst" at the
+ corresponding bit locations specified by "mask"; all other bits in "dst" are set to
+ zero.
+
+ tmp := a
+ dst := 0
+ m := 0
+ k := 0
+ DO WHILE m < 32
+ IF mask[m] == 1
+ dst[m] := tmp[k]
+ k := k + 1
+ FI
+ m := m + 1
+ OD
+
+
+ BMI2
+
+ Bit Manipulation
+
+
+
+
+
+ Deposit contiguous low bits from unsigned 64-bit integer "a" to "dst" at the
+ corresponding bit locations specified by "mask"; all other bits in "dst" are set to
+ zero.
+
+ tmp := a
+ dst := 0
+ m := 0
+ k := 0
+ DO WHILE m < 64
+ IF mask[m] == 1
+ dst[m] := tmp[k]
+ k := k + 1
+ FI
+ m := m + 1
+ OD
+
+
+ BMI2
+
+ Bit Manipulation
+
+
+
+
+
+ Extract bits from unsigned 32-bit integer "a" at the corresponding bit
+ locations specified by "mask" to contiguous low bits in "dst"; the remaining upper bits
+ in "dst" are set to zero.
+
+ tmp := a
+ dst := 0
+ m := 0
+ k := 0
+ DO WHILE m < 32
+ IF mask[m] == 1
+ dst[k] := tmp[m]
+ k := k + 1
+ FI
+ m := m + 1
+ OD
+
+
+ BMI2
+
+ Bit Manipulation
+
+
+
+
+
+ Extract bits from unsigned 64-bit integer "a" at the corresponding bit
+ locations specified by "mask" to contiguous low bits in "dst"; the remaining upper bits
+ in "dst" are set to zero.
+
+ tmp := a
+ dst := 0
+ m := 0
+ k := 0
+ DO WHILE m < 64
+ IF mask[m] == 1
+ dst[k] := tmp[m]
+ k := k + 1
+ FI
+ m := m + 1
+ OD
+
+
+ BMI2
+
+ Bit Manipulation
+
+
+
+
+
+
+ Multiply unsigned 32-bit integers "a" and "b", store the low 32-bits of the
+ result in "dst", and store the high 32-bits in "hi". This does not read or write
+ arithmetic flags.
+
+ dst[31:0] := (a * b)[31:0]
+ MEM[hi+31:hi] := (a * b)[63:32]
+
+
+ BMI2
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply unsigned 64-bit integers "a" and "b", store the low 64-bits of the
+ result in "dst", and store the high 64-bits in "hi". This does not read or write
+ arithmetic flags.
+
+ dst[63:0] := (a * b)[63:0]
+ MEM[hi+63:hi] := (a * b)[127:64]
+
+
+ BMI2
+
+ Arithmetic
+
+
+
+
+
+
+ Increment the shadow stack pointer by 4 times the value specified in bits [7:0]
+ of "a".
+
+ SSP := SSP + a[7:0] * 4
+
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+ Increment the shadow stack pointer by 8 times the value specified in bits [7:0]
+ of "a".
+
+ SSP := SSP + a[7:0] * 8
+
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+ Read the low 32-bits of the current shadow stack pointer, and store the result
+ in "dst".
+ dst := SSP[31:0]
+
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+ Read the current shadow stack pointer, and store the result in "dst".
+ dst := SSP[63:0]
+
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+ Save the previous shadow stack pointer context.
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+ Restore the saved shadow stack pointer from the shadow stack restore token
+ previously created on shadow stack by saveprevssp.
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+
+ Write 32-bit value in "val" to a shadow stack page in memory specified by "p".
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+
+ Write 64-bit value in "val" to a shadow stack page in memory specified by "p".
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+
+ Write 32-bit value in "val" to a user shadow stack page in memory specified by
+ "p".
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+
+ Write 64-bit value in "val" to a user shadow stack page in memory specified by
+ "p".
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+ Mark shadow stack pointed to by IA32_PL0_SSP as busy.
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+ Mark shadow stack pointed to by "p" as not busy.
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+ If CET is enabled, read the low 32-bits of the current shadow stack pointer,
+ and store the result in "dst". Otherwise return 0.
+ dst := SSP[31:0]
+
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+ If CET is enabled, read the current shadow stack pointer, and store the result
+ in "dst". Otherwise return 0.
+ dst := SSP[63:0]
+
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+ Increment the shadow stack pointer by 4 times the value specified in bits [7:0]
+ of "a".
+
+ SSP := SSP + a[7:0] * 4
+
+
+ CET_SS
+
+ Miscellaneous
+
+
+
+
+
+ Hint to hardware that the cache line that contains "p" should be demoted from
+ the cache closest to the processor core to a level more distant from the processor core.
+
+ CLDEMOTE
+
+ Miscellaneous
+
+
+
+
+
+
+ Invalidate and flush the cache line that contains "p" from all levels of the
+ cache hierarchy.
+
+ CLFLUSHOPT
+
+ General Support
+
+
+
+
+
+
+ Write back to memory the cache line that contains "p" from any level of the
+ cache hierarchy in the cache coherence domain.
+
+ CLWB
+
+ General Support
+
+
+
+
+
+
+
+
+
+ Compares the value from the memory "__A" with the value of "__B". If the
+ specified condition "__D" is met, then add the third operand "__C" to the "__A" and
+ write it into "__A", else the value of "__A" is unchanged. The return value is the
+ original value of "__A".
+ CASE (__D[3:0]) OF
+ 0: OP := _CMPCCX_O
+ 1: OP := _CMPCCX_NO
+ 2: OP := _CMPCCX_B
+ 3: OP := _CMPCCX_NB
+ 4: OP := _CMPCCX_Z
+ 5: OP := _CMPCCX_NZ
+ 6: OP := _CMPCCX_BE
+ 7: OP := _CMPCCX_NBE
+ 8: OP := _CMPCCX_S
+ 9: OP := _CMPCCX_NS
+ 10: OP := _CMPCCX_P
+ 11: OP := _CMPCCX_NP
+ 12: OP := _CMPCCX_L
+ 13: OP := _CMPCCX_NL
+ 14: OP := _CMPCCX_LE
+ 15: OP := _CMPCCX_NLE
+ ESAC
+ tmp1 := LOAD_LOCK(__A)
+ tmp2 := tmp1 + __C
+ IF (tmp1[31:0] OP __B[31:0])
+ STORE_UNLOCK(__A, tmp2)
+ ELSE
+ STORE_UNLOCK(__A, tmp1)
+ FI
+ dst[31:0] := tmp1[31:0]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CMPCCXADD
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compares the value from the memory "__A" with the value of "__B". If the
+ specified condition "__D" is met, then add the third operand "__C" to the "__A" and
+ write it into "__A", else the value of "__A" is unchanged. The return value is the
+ original value of "__A".
+ CASE (__D[3:0]) OF
+ 0: OP := _CMPCCX_O
+ 1: OP := _CMPCCX_NO
+ 2: OP := _CMPCCX_B
+ 3: OP := _CMPCCX_NB
+ 4: OP := _CMPCCX_Z
+ 5: OP := _CMPCCX_NZ
+ 6: OP := _CMPCCX_BE
+ 7: OP := _CMPCCX_NBE
+ 8: OP := _CMPCCX_S
+ 9: OP := _CMPCCX_NS
+ 10: OP := _CMPCCX_P
+ 11: OP := _CMPCCX_NP
+ 12: OP := _CMPCCX_L
+ 13: OP := _CMPCCX_NL
+ 14: OP := _CMPCCX_LE
+ 15: OP := _CMPCCX_NLE
+ ESAC
+ tmp1 := LOAD_LOCK(__A)
+ tmp2 := tmp1 + __C
+ IF (tmp1[63:0] OP __B[63:0])
+ STORE_UNLOCK(__A, tmp2)
+ ELSE
+ STORE_UNLOCK(__A, tmp1)
+ FI
+ dst[63:0] := tmp1[63:0]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CMPCCXADD
+
+ Arithmetic
+
+
+
+
+
+ Starting with the initial value in "crc", accumulates a CRC32 value for
+ unsigned 8-bit integer "v", and stores the result in "dst".
+ tmp1[7:0] := v[0:7] // bit reflection
+ tmp2[31:0] := crc[0:31] // bit reflection
+ tmp3[39:0] := tmp1[7:0] << 32
+ tmp4[39:0] := tmp2[31:0] << 8
+ tmp5[39:0] := tmp3[39:0] XOR tmp4[39:0]
+ tmp6[31:0] := MOD2(tmp5[39:0], 0x11EDC6F41) // remainder from polynomial division
+ modulus 2
+ dst[31:0] := tmp6[0:31] // bit reflection
+
+
+ CRC32
+
+ Cryptography
+
+
+
+
+
+ Starting with the initial value in "crc", accumulates a CRC32 value for
+ unsigned 16-bit integer "v", and stores the result in "dst".
+ tmp1[15:0] := v[0:15] // bit reflection
+ tmp2[31:0] := crc[0:31] // bit reflection
+ tmp3[47:0] := tmp1[15:0] << 32
+ tmp4[47:0] := tmp2[31:0] << 16
+ tmp5[47:0] := tmp3[47:0] XOR tmp4[47:0]
+ tmp6[31:0] := MOD2(tmp5[47:0], 0x11EDC6F41) // remainder from polynomial division
+ modulus 2
+ dst[31:0] := tmp6[0:31] // bit reflection
+
+
+ CRC32
+
+ Cryptography
+
+
+
+
+
+ Starting with the initial value in "crc", accumulates a CRC32 value for
+ unsigned 32-bit integer "v", and stores the result in "dst".
+ tmp1[31:0] := v[0:31] // bit reflection
+ tmp2[31:0] := crc[0:31] // bit reflection
+ tmp3[63:0] := tmp1[31:0] << 32
+ tmp4[63:0] := tmp2[31:0] << 32
+ tmp5[63:0] := tmp3[63:0] XOR tmp4[63:0]
+ tmp6[31:0] := MOD2(tmp5[63:0], 0x11EDC6F41) // remainder from polynomial division
+ modulus 2
+ dst[31:0] := tmp6[0:31] // bit reflection
+
+
+ CRC32
+
+ Cryptography
+
+
+
+
+
+ Starting with the initial value in "crc", accumulates a CRC32 value for
+ unsigned 64-bit integer "v", and stores the result in "dst".
+ tmp1[63:0] := v[0:63] // bit reflection
+ tmp2[31:0] := crc[0:31] // bit reflection
+ tmp3[95:0] := tmp1[31:0] << 32
+ tmp4[95:0] := tmp2[63:0] << 64
+ tmp5[95:0] := tmp3[95:0] XOR tmp4[95:0]
+ tmp6[31:0] := MOD2(tmp5[95:0], 0x11EDC6F41) // remainder from polynomial division
+ modulus 2
+ dst[31:0] := tmp6[0:31] // bit reflection
+
+
+ CRC32
+
+ Cryptography
+
+
+
+
+
+
+
+ Reads 64-byte command pointed by "__src", formats 64-byte enqueue store data,
+ and performs 64-byte enqueue store to memory pointed by "__dst". This intrinsics may
+ only be used in User mode.
+
+ ENQCMD
+
+ Unknown
+
+
+
+
+
+ Reads 64-byte command pointed by "__src", formats 64-byte enqueue store data,
+ and performs 64-byte enqueue store to memory pointed by "__dst" This intrinsic may only
+ be used in Privileged mode.
+
+ ENQCMD
+
+ Unknown
+
+
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ m := j*16
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ F16C
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+ [round_imm_note]
+
+ FOR j := 0 to 7
+ i := 16*j
+ l := 32*j
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ F16C
+
+ Convert
+
+
+
+
+ Convert packed half-precision (16-bit) floating-point elements in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ m := j*16
+ dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ F16C
+
+ Convert
+
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed half-precision (16-bit) floating-point elements, and store the results in "dst".
+ [round_imm_note]
+
+ FOR j := 0 to 3
+ i := 16*j
+ l := 32*j
+ dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
+ ENDFOR
+ dst[MAX:64] := 0
+
+
+ F16C
+
+ Convert
+
+
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst".
+
+ FOR j := 0 to 1
+ i := j*64
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*64
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the intermediate result to packed elements in "c", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst", and copy the upper element from "a" to the upper element of
+ "dst".
+
+ dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the intermediate result to the lower element in "c". Store the result in
+ the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF ((j & 1) == 0)
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
+ ELSE
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF ((j & 1) == 0)
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
+ ELSE
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF ((j & 1) == 0)
dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
+ ELSE
dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively add and subtract packed elements in "c" to/from the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF ((j & 1) == 0)
dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
+ ELSE
dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper element from "c" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := c[63:0]
-FI
-dst[127:64] := c[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper element from "c" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := c[63:0]
-FI
-dst[127:64] := c[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := a[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := a[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := c[31:0]
-FI
-dst[127:32] := c[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := c[31:0]
-FI
-dst[127:32] := c[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := a[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := a[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the intermediate result, and store the results
+ in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst", and copy the upper element from "a" to the upper
+ element of "dst".
+
+ dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the intermediate result. Store the
+ result in the lower element of "dst", and copy the upper 3 packed elements from "a" to
+ the upper elements of "dst".
+
+ dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF ((j & 1) == 0)
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
+ ELSE
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF ((j & 1) == 0)
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ IF ((j & 1) == 0)
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
+ ELSE
dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF ((j & 1) == 0)
dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
+ ELSE
dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF ((j & 1) == 0)
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", alternatively subtract and add packed elements in "c" from/to the intermediate
+ result, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ IF ((j & 1) == 0)
dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
+ ELSE
dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper element from "c" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := c[63:0]
-FI
-dst[127:64] := c[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper element from "c" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := c[63:0]
-FI
-dst[127:64] := c[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := a[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := a[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := c[31:0]
-FI
-dst[127:32] := c[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := c[31:0]
-FI
-dst[127:32] := c[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := a[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := a[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper element from "c" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := c[63:0]
-FI
-dst[127:64] := c[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper element from "c" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := c[63:0]
-FI
-dst[127:64] := c[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := a[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := a[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", subtract the lower element in "c" from the negated intermediate result, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := c[31:0]
-FI
-dst[127:32] := c[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "c" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := c[31:0]
-FI
-dst[127:32] := c[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := a[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst" using writemask "k" (the element is copied from "c" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := a[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
-
-
-
- Gather double-precision (64-bit) floating-point elements from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- [sae_note]
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- [sae_note]
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Convert the exponent of the lower double-precision (64-bit) floating-point element in "b" to a double-precision (64-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- [sae_note]
- dst[63:0] := ConvertExpFP64(b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
- Convert the exponent of the lower double-precision (64-bit) floating-point element in "b" to a double-precision (64-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- dst[63:0] := ConvertExpFP64(b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Convert the exponent of the lower double-precision (64-bit) floating-point element in "b" to a double-precision (64-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- [sae_note]
- IF k[0]
- dst[63:0] := ConvertExpFP64(b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Convert the exponent of the lower double-precision (64-bit) floating-point element in "b" to a double-precision (64-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- IF k[0]
- dst[63:0] := ConvertExpFP64(b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Convert the exponent of the lower double-precision (64-bit) floating-point element in "b" to a double-precision (64-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- [sae_note]
- IF k[0]
- dst[63:0] := ConvertExpFP64(b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Convert the exponent of the lower double-precision (64-bit) floating-point element in "b" to a double-precision (64-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- IF k[0]
- dst[63:0] := ConvertExpFP64(b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Convert the exponent of the lower single-precision (32-bit) floating-point element in "b" to a single-precision (32-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- [sae_note]
- dst[31:0] := ConvertExpFP32(b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
- Convert the exponent of the lower single-precision (32-bit) floating-point element in "b" to a single-precision (32-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- dst[31:0] := ConvertExpFP32(b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Convert the exponent of the lower single-precision (32-bit) floating-point element in "b" to a single-precision (32-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- [sae_note]
- IF k[0]
- dst[31:0] := ConvertExpFP32(b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Convert the exponent of the lower single-precision (32-bit) floating-point element in "b" to a single-precision (32-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- IF k[0]
- dst[31:0] := ConvertExpFP32(b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Convert the exponent of the lower single-precision (32-bit) floating-point element in "b" to a single-precision (32-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- [sae_note]
- IF k[0]
- dst[31:0] := ConvertExpFP32(b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Convert the exponent of the lower single-precision (32-bit) floating-point element in "b" to a single-precision (32-bit) floating-point number representing the integer exponent, store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "floor(log2(x))" for the lower element.
- IF k[0]
- dst[31:0] := ConvertExpFP32(b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Normalize the mantissas of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
-
- Normalize the mantissas of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- IF k[0]
- dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Normalize the mantissas of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- IF k[0]
- dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Normalize the mantissas of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- IF k[0]
- dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- IF k[0]
- dst[63:0] := GetNormalizedMantissa(b[63:0], sc, interv)
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Normalize the mantissas of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
-
- Normalize the mantissas of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- IF k[0]
- dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Normalize the mantissas of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- IF k[0]
- dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Normalize the mantissas of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- IF k[0]
- dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- IF k[0]
- dst[31:0] := GetNormalizedMantissa(b[31:0], sc, interv)
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Copy "a" to "dst", then insert 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "b" into "dst" at the location specified by "imm8".
-
-dst[511:0] := a[511:0]
-CASE (imm8[1:0]) OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-2: dst[383:256] := b[127:0]
-3: dst[511:384] := b[127:0]
-ESAC
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[1:0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-2: tmp[383:256] := b[127:0]
-3: tmp[511:384] := b[127:0]
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[1:0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-2: tmp[383:256] := b[127:0]
-3: tmp[511:384] := b[127:0]
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Copy "a" to "dst", then insert 256 bits (composed of 4 packed double-precision (64-bit) floating-point elements) from "b" into "dst" at the location specified by "imm8".
-
-dst[511:0] := a[511:0]
-CASE (imm8[0]) OF
-0: dst[255:0] := b[255:0]
-1: dst[511:256] := b[255:0]
-ESAC
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 256 bits (composed of 4 packed double-precision (64-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[0]) OF
-0: tmp[255:0] := b[255:0]
-1: tmp[511:256] := b[255:0]
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Copy "a" to "tmp", then insert 256 bits (composed of 4 packed double-precision (64-bit) floating-point elements) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[0]) OF
-0: tmp[255:0] := b[255:0]
-1: tmp[511:256] := b[255:0]
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Copy "a" to "dst", then insert 128 bits (composed of 4 packed 32-bit integers) from "b" into "dst" at the location specified by "imm8".
-
-dst[511:0] := a[511:0]
-CASE (imm8[1:0]) OF
-0: dst[127:0] := b[127:0]
-1: dst[255:128] := b[127:0]
-2: dst[383:256] := b[127:0]
-3: dst[511:384] := b[127:0]
-ESAC
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 4 packed 32-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[1:0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-2: tmp[383:256] := b[127:0]
-3: tmp[511:384] := b[127:0]
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Copy "a" to "tmp", then insert 128 bits (composed of 4 packed 32-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[1:0]) OF
-0: tmp[127:0] := b[127:0]
-1: tmp[255:128] := b[127:0]
-2: tmp[383:256] := b[127:0]
-3: tmp[511:384] := b[127:0]
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Copy "a" to "dst", then insert 256 bits (composed of 4 packed 64-bit integers) from "b" into "dst" at the location specified by "imm8".
-
-dst[511:0] := a[511:0]
-CASE (imm8[0]) OF
-0: dst[255:0] := b[255:0]
-1: dst[511:256] := b[255:0]
-ESAC
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
-
- Copy "a" to "tmp", then insert 256 bits (composed of 4 packed 64-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[0]) OF
-0: tmp[255:0] := b[255:0]
-1: tmp[511:256] := b[255:0]
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Copy "a" to "tmp", then insert 256 bits (composed of 4 packed 64-bit integers) from "b" into "tmp" at the location specified by "imm8". Store "tmp" to "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[511:0] := a[511:0]
-CASE (imm8[0]) OF
-0: tmp[255:0] := b[255:0]
-1: tmp[511:256] := b[255:0]
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst". [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst". [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [sae_note]
-
-IF k[0]
- dst[63:0] := MAX(a[63:0], b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := MAX(a[63:0], b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [sae_note]
-
-IF k[0]
- dst[63:0] := MAX(a[63:0], b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := MAX(a[63:0], b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". [sae_note]
-
-dst[63:0] := MAX(a[63:0], b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [sae_note]
-
-IF k[0]
- dst[31:0] := MAX(a[31:0], b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := MAX(a[31:0], b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [sae_note]
-
-IF k[0]
- dst[31:0] := MAX(a[31:0], b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := MAX(a[31:0], b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". [sae_note]
-
-dst[31:0] := MAX(a[31:0], b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst". [sae_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst". [sae_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [sae_note]
-
-IF k[0]
- dst[63:0] := MIN(a[63:0], b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := MIN(a[63:0], b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [sae_note]
-
-IF k[0]
- dst[63:0] := MIN(a[63:0], b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := MIN(a[63:0], b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst" , and copy the upper element from "a" to the upper element of "dst". [sae_note]
-
-dst[63:0] := MIN(a[63:0], b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [sae_note]
-
-IF k[0]
- dst[31:0] := MIN(a[31:0], b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := MIN(a[31:0], b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [sae_note]
-
-IF k[0]
- dst[31:0] := MIN(a[31:0], b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := MIN(a[31:0], b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". [sae_note]
-
-dst[31:0] := MIN(a[31:0], b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
- Move packed double-precision (64-bit) floating-point elements from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
- Move packed single-precision (32-bit) floating-point elements from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
-
- Duplicate even-indexed double-precision (64-bit) floating-point elements from "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[63:0] := a[63:0]
-tmp[127:64] := a[63:0]
-tmp[191:128] := a[191:128]
-tmp[255:192] := a[191:128]
-tmp[319:256] := a[319:256]
-tmp[383:320] := a[319:256]
-tmp[447:384] := a[447:384]
-tmp[511:448] := a[447:384]
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
- Duplicate even-indexed double-precision (64-bit) floating-point elements from "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[63:0] := a[63:0]
-tmp[127:64] := a[63:0]
-tmp[191:128] := a[191:128]
-tmp[255:192] := a[191:128]
-tmp[319:256] := a[319:256]
-tmp[383:320] := a[319:256]
-tmp[447:384] := a[447:384]
-tmp[511:448] := a[447:384]
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
- Duplicate even-indexed double-precision (64-bit) floating-point elements from "a", and store the results in "dst".
-
-dst[63:0] := a[63:0]
-dst[127:64] := a[63:0]
-dst[191:128] := a[191:128]
-dst[255:192] := a[191:128]
-dst[319:256] := a[319:256]
-dst[383:320] := a[319:256]
-dst[447:384] := a[447:384]
-dst[511:448] := a[447:384]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
- Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Move
-
-
-
- Move packed 32-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
- Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Move
-
-
-
- Move packed 64-bit integers from "a" into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
- Load 512-bits of integer data from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
-
- Load packed 32-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
-
- Store packed 32-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
- Load packed 32-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
- Store 512-bits of integer data from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
-
- Load packed 64-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
-
- Store packed 64-bit integers from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
- Load packed 64-bit integers from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
- Load 512-bits of integer data from memory into "dst" using a non-temporal memory hint.
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
- Store 512-bits of integer data from "a" into memory using a non-temporal memory hint.
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
- Store 512-bits (composed of 8 packed double-precision (64-bit) floating-point elements) from "a" into memory using a non-temporal memory hint.
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
- Store 512-bits (composed of 16 packed single-precision (32-bit) floating-point elements) from "a" into memory using a non-temporal memory hint.
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
-
- Load a double-precision (64-bit) floating-point element from memory into the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and set the upper element of "dst" to zero. "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-IF k[0]
- dst[63:0] := MEM[mem_addr+63:mem_addr]
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
-
-
- Move the lower double-precision (64-bit) floating-point element from "b" to the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := b[63:0]
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
-
- Store the lower double-precision (64-bit) floating-point element from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-IF k[0]
- MEM[mem_addr+63:mem_addr] := a[63:0]
-FI
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
- Load a double-precision (64-bit) floating-point element from memory into the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and set the upper element of "dst" to zero. "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-IF k[0]
- dst[63:0] := MEM[mem_addr+63:mem_addr]
-ELSE
- dst[63:0] := 0
-FI
-dst[MAX:64] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
-
- Move the lower double-precision (64-bit) floating-point element from "b" to the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := b[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
-
- Duplicate odd-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[31:0] := a[63:32]
-tmp[63:32] := a[63:32]
-tmp[95:64] := a[127:96]
-tmp[127:96] := a[127:96]
-tmp[159:128] := a[191:160]
-tmp[191:160] := a[191:160]
-tmp[223:192] := a[255:224]
-tmp[255:224] := a[255:224]
-tmp[287:256] := a[319:288]
-tmp[319:288] := a[319:288]
-tmp[351:320] := a[383:352]
-tmp[383:352] := a[383:352]
-tmp[415:384] := a[447:416]
-tmp[447:416] := a[447:416]
-tmp[479:448] := a[511:480]
-tmp[511:480] := a[511:480]
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
- Duplicate odd-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[31:0] := a[63:32]
-tmp[63:32] := a[63:32]
-tmp[95:64] := a[127:96]
-tmp[127:96] := a[127:96]
-tmp[159:128] := a[191:160]
-tmp[191:160] := a[191:160]
-tmp[223:192] := a[255:224]
-tmp[255:224] := a[255:224]
-tmp[287:256] := a[319:288]
-tmp[319:288] := a[319:288]
-tmp[351:320] := a[383:352]
-tmp[383:352] := a[383:352]
-tmp[415:384] := a[447:416]
-tmp[447:416] := a[447:416]
-tmp[479:448] := a[511:480]
-tmp[511:480] := a[511:480]
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
- Duplicate odd-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst".
-
-dst[31:0] := a[63:32]
-dst[63:32] := a[63:32]
-dst[95:64] := a[127:96]
-dst[127:96] := a[127:96]
-dst[159:128] := a[191:160]
-dst[191:160] := a[191:160]
-dst[223:192] := a[255:224]
-dst[255:224] := a[255:224]
-dst[287:256] := a[319:288]
-dst[319:288] := a[319:288]
-dst[351:320] := a[383:352]
-dst[383:352] := a[383:352]
-dst[415:384] := a[447:416]
-dst[447:416] := a[447:416]
-dst[479:448] := a[511:480]
-dst[511:480] := a[511:480]
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
-
- Duplicate even-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp[31:0] := a[31:0]
-tmp[63:32] := a[31:0]
-tmp[95:64] := a[95:64]
-tmp[127:96] := a[95:64]
-tmp[159:128] := a[159:128]
-tmp[191:160] := a[159:128]
-tmp[223:192] := a[223:192]
-tmp[255:224] := a[223:192]
-tmp[287:256] := a[287:256]
-tmp[319:288] := a[287:256]
-tmp[351:320] := a[351:320]
-tmp[383:352] := a[351:320]
-tmp[415:384] := a[415:384]
-tmp[447:416] := a[415:384]
-tmp[479:448] := a[479:448]
-tmp[511:480] := a[479:448]
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
- Duplicate even-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp[31:0] := a[31:0]
-tmp[63:32] := a[31:0]
-tmp[95:64] := a[95:64]
-tmp[127:96] := a[95:64]
-tmp[159:128] := a[159:128]
-tmp[191:160] := a[159:128]
-tmp[223:192] := a[223:192]
-tmp[255:224] := a[223:192]
-tmp[287:256] := a[287:256]
-tmp[319:288] := a[287:256]
-tmp[351:320] := a[351:320]
-tmp[383:352] := a[351:320]
-tmp[415:384] := a[415:384]
-tmp[447:416] := a[415:384]
-tmp[479:448] := a[479:448]
-tmp[511:480] := a[479:448]
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
- Duplicate even-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst".
-
-dst[31:0] := a[31:0]
-dst[63:32] := a[31:0]
-dst[95:64] := a[95:64]
-dst[127:96] := a[95:64]
-dst[159:128] := a[159:128]
-dst[191:160] := a[159:128]
-dst[223:192] := a[223:192]
-dst[255:224] := a[223:192]
-dst[287:256] := a[287:256]
-dst[319:288] := a[287:256]
-dst[351:320] := a[351:320]
-dst[383:352] := a[351:320]
-dst[415:384] := a[415:384]
-dst[447:416] := a[415:384]
-dst[479:448] := a[479:448]
-dst[511:480] := a[479:448]
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
-
- Load a single-precision (32-bit) floating-point element from memory into the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and set the upper elements of "dst" to zero. "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-IF k[0]
- dst[31:0] := MEM[mem_addr+31:mem_addr]
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[MAX:32] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
-
-
- Move the lower single-precision (32-bit) floating-point element from "b" to the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := b[31:0]
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
-
- Store the lower single-precision (32-bit) floating-point element from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-IF k[0]
- MEM[mem_addr+31:mem_addr] := a[31:0]
-FI
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
- Load a single-precision (32-bit) floating-point element from memory into the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and set the upper elements of "dst" to zero. "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-IF k[0]
- dst[31:0] := MEM[mem_addr+31:mem_addr]
-ELSE
- dst[31:0] := 0
-FI
-dst[MAX:32] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Move
-
-
-
-
- Move the lower single-precision (32-bit) floating-point element from "b" to the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := b[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
- Load 512-bits (composed of 8 packed double-precision (64-bit) floating-point elements) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memoy into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
-
- Store packed double-precision (64-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memoy into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
- Store 512-bits (composed of 8 packed double-precision (64-bit) floating-point elements) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
- Load 512-bits (composed of 16 packed single-precision (32-bit) floating-point elements) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
-
- Store packed single-precision (32-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F
- Load
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
- Store 512-bits (composed of 16 packed single-precision (32-bit) floating-point elements) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := a[63:0] * b[63:0]
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := a[63:0] * b[63:0]
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := a[63:0] * b[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := a[63:0] * b[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := a[63:0] * b[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := a[31:0] * b[31:0]
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := a[31:0] * b[31:0]
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := a[31:0] * b[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := a[31:0] * b[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := a[31:0] * b[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
- Compute the absolute value of packed signed 32-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ABS(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
- Compute the absolute value of packed signed 32-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ABS(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
- Compute the absolute value of packed signed 32-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ABS(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
- Compute the absolute value of packed signed 64-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ABS(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
- Compute the absolute value of packed signed 64-bit integers in "a", and store the unsigned results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ABS(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
- Compute the absolute value of packed signed 64-bit integers in "a", and store the unsigned results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ABS(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
- Add packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Add packed 64-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
-
- Add packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
- Add packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] AND b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (NOT a[i+31:i]) AND b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (NOT a[i+63:i]) AND b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] AND b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Set
-
-
- Broadcast 8-bit integer "a" to all elements of "dst".
-
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := a[7:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
- Broadcast the low packed 32-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
- Broadcast 32-bit integer "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Broadcast the low packed 32-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
- Broadcast 32-bit integer "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[31:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Set
-
-
- Broadcast 32-bit integer "a" to all elements of "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
- Broadcast the low packed 64-bit integer from "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
- Broadcast 64-bit integer "a" to all elements of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Broadcast the low packed 64-bit integer from "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
- Broadcast 64-bit integer "a" to all elements of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[63:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Set
-
-
- Broadcast 64-bit integer "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Set
-
-
- Broadcast the low packed 16-bit integer from "a" to all all elements of "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := a[15:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] == b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] >= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] > b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] <= b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] < b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Compare
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] != b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Contiguously store the active 32-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 32
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := src[511:m]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Store
- Swizzle
-
-
-
-
- Contiguously store the active 32-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 32
-m := base_addr
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- MEM[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Contiguously store the active 32-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 32
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[m+size-1:m] := a[i+31:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := 0
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Contiguously store the active 64-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 64
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := src[511:m]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Store
- Swizzle
-
-
-
-
- Contiguously store the active 64-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 64
-m := base_addr
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- MEM[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Contiguously store the active 64-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 64
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[m+size-1:m] := a[i+63:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := 0
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 32-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- id := idx[i+3:i]*32
- IF k[j]
- dst[i+31:i] := a[id+31:id]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Shuffle 32-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- id := idx[i+3:i]*32
- IF k[j]
- dst[i+31:i] := a[id+31:id]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Shuffle 32-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- id := idx[i+3:i]*32
- dst[i+31:i] := a[id+31:id]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- off := idx[i+3:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := idx[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- off := idx[i+3:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- off := idx[i+3:i]*32
- IF k[j]
- dst[i+31:i] := (idx[i+4]) ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Shuffle 32-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- off := idx[i+3:i]*32
- dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set)
-
-FOR j := 0 to 7
- i := j*64
- off := idx[i+2:i]*64
- IF k[j]
- dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := idx[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- off := idx[i+2:i]*64
- IF k[j]
- dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- off := idx[i+2:i]*64
- IF k[j]
- dst[i+63:i] := (idx[i+3]) ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- off := idx[i+2:i]*64
- dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- off := idx[i+3:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := idx[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- off := idx[i+3:i]*32
- IF k[j]
- dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- off := idx[i+3:i]*32
- IF k[j]
- dst[i+31:i] := (idx[i+4]) ? b[off+31:off] : a[off+31:off]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- off := idx[i+3:i]*32
- dst[i+31:i] := idx[i+4] ? b[off+31:off] : a[off+31:off]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "idx" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- off := idx[i+2:i]*64
- IF k[j]
- dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := idx[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- off := idx[i+2:i]*64
- IF k[j]
- dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- off := idx[i+2:i]*64
- IF k[j]
- dst[i+63:i] := (idx[i+3]) ? b[off+63:off] : a[off+63:off]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Shuffle 64-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- off := idx[i+2:i]*64
- dst[i+63:i] := idx[i+3] ? b[off+63:off] : a[off+63:off]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
-IF (imm8[2] == 0) tmp_dst[191:128] := a[191:128]; FI
-IF (imm8[2] == 1) tmp_dst[191:128] := a[255:192]; FI
-IF (imm8[3] == 0) tmp_dst[255:192] := a[191:128]; FI
-IF (imm8[3] == 1) tmp_dst[255:192] := a[255:192]; FI
-IF (imm8[4] == 0) tmp_dst[319:256] := a[319:256]; FI
-IF (imm8[4] == 1) tmp_dst[319:256] := a[383:320]; FI
-IF (imm8[5] == 0) tmp_dst[383:320] := a[319:256]; FI
-IF (imm8[5] == 1) tmp_dst[383:320] := a[383:320]; FI
-IF (imm8[6] == 0) tmp_dst[447:384] := a[447:384]; FI
-IF (imm8[6] == 1) tmp_dst[447:384] := a[511:448]; FI
-IF (imm8[7] == 0) tmp_dst[511:448] := a[447:384]; FI
-IF (imm8[7] == 1) tmp_dst[511:448] := a[511:448]; FI
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
-IF (b[129] == 0) tmp_dst[191:128] := a[191:128]; FI
-IF (b[129] == 1) tmp_dst[191:128] := a[255:192]; FI
-IF (b[193] == 0) tmp_dst[255:192] := a[191:128]; FI
-IF (b[193] == 1) tmp_dst[255:192] := a[255:192]; FI
-IF (b[257] == 0) tmp_dst[319:256] := a[319:256]; FI
-IF (b[257] == 1) tmp_dst[319:256] := a[383:320]; FI
-IF (b[321] == 0) tmp_dst[383:320] := a[319:256]; FI
-IF (b[321] == 1) tmp_dst[383:320] := a[383:320]; FI
-IF (b[385] == 0) tmp_dst[447:384] := a[447:384]; FI
-IF (b[385] == 1) tmp_dst[447:384] := a[511:448]; FI
-IF (b[449] == 0) tmp_dst[511:448] := a[447:384]; FI
-IF (b[449] == 1) tmp_dst[511:448] := a[511:448]; FI
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-IF (imm8[0] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (imm8[0] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (imm8[1] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (imm8[1] == 1) tmp_dst[127:64] := a[127:64]; FI
-IF (imm8[2] == 0) tmp_dst[191:128] := a[191:128]; FI
-IF (imm8[2] == 1) tmp_dst[191:128] := a[255:192]; FI
-IF (imm8[3] == 0) tmp_dst[255:192] := a[191:128]; FI
-IF (imm8[3] == 1) tmp_dst[255:192] := a[255:192]; FI
-IF (imm8[4] == 0) tmp_dst[319:256] := a[319:256]; FI
-IF (imm8[4] == 1) tmp_dst[319:256] := a[383:320]; FI
-IF (imm8[5] == 0) tmp_dst[383:320] := a[319:256]; FI
-IF (imm8[5] == 1) tmp_dst[383:320] := a[383:320]; FI
-IF (imm8[6] == 0) tmp_dst[447:384] := a[447:384]; FI
-IF (imm8[6] == 1) tmp_dst[447:384] := a[511:448]; FI
-IF (imm8[7] == 0) tmp_dst[511:448] := a[447:384]; FI
-IF (imm8[7] == 1) tmp_dst[511:448] := a[511:448]; FI
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-IF (b[1] == 0) tmp_dst[63:0] := a[63:0]; FI
-IF (b[1] == 1) tmp_dst[63:0] := a[127:64]; FI
-IF (b[65] == 0) tmp_dst[127:64] := a[63:0]; FI
-IF (b[65] == 1) tmp_dst[127:64] := a[127:64]; FI
-IF (b[129] == 0) tmp_dst[191:128] := a[191:128]; FI
-IF (b[129] == 1) tmp_dst[191:128] := a[255:192]; FI
-IF (b[193] == 0) tmp_dst[255:192] := a[191:128]; FI
-IF (b[193] == 1) tmp_dst[255:192] := a[255:192]; FI
-IF (b[257] == 0) tmp_dst[319:256] := a[319:256]; FI
-IF (b[257] == 1) tmp_dst[319:256] := a[383:320]; FI
-IF (b[321] == 0) tmp_dst[383:320] := a[319:256]; FI
-IF (b[321] == 1) tmp_dst[383:320] := a[383:320]; FI
-IF (b[385] == 0) tmp_dst[447:384] := a[447:384]; FI
-IF (b[385] == 1) tmp_dst[447:384] := a[511:448]; FI
-IF (b[449] == 0) tmp_dst[511:448] := a[447:384]; FI
-IF (b[449] == 1) tmp_dst[511:448] := a[511:448]; FI
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst".
-
-IF (imm8[0] == 0) dst[63:0] := a[63:0]; FI
-IF (imm8[0] == 1) dst[63:0] := a[127:64]; FI
-IF (imm8[1] == 0) dst[127:64] := a[63:0]; FI
-IF (imm8[1] == 1) dst[127:64] := a[127:64]; FI
-IF (imm8[2] == 0) dst[191:128] := a[191:128]; FI
-IF (imm8[2] == 1) dst[191:128] := a[255:192]; FI
-IF (imm8[3] == 0) dst[255:192] := a[191:128]; FI
-IF (imm8[3] == 1) dst[255:192] := a[255:192]; FI
-IF (imm8[4] == 0) dst[319:256] := a[319:256]; FI
-IF (imm8[4] == 1) dst[319:256] := a[383:320]; FI
-IF (imm8[5] == 0) dst[383:320] := a[319:256]; FI
-IF (imm8[5] == 1) dst[383:320] := a[383:320]; FI
-IF (imm8[6] == 0) dst[447:384] := a[447:384]; FI
-IF (imm8[6] == 1) dst[447:384] := a[511:448]; FI
-IF (imm8[7] == 0) dst[511:448] := a[447:384]; FI
-IF (imm8[7] == 1) dst[511:448] := a[511:448]; FI
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst".
-
-IF (b[1] == 0) dst[63:0] := a[63:0]; FI
-IF (b[1] == 1) dst[63:0] := a[127:64]; FI
-IF (b[65] == 0) dst[127:64] := a[63:0]; FI
-IF (b[65] == 1) dst[127:64] := a[127:64]; FI
-IF (b[129] == 0) dst[191:128] := a[191:128]; FI
-IF (b[129] == 1) dst[191:128] := a[255:192]; FI
-IF (b[193] == 0) dst[255:192] := a[191:128]; FI
-IF (b[193] == 1) dst[255:192] := a[255:192]; FI
-IF (b[257] == 0) dst[319:256] := a[319:256]; FI
-IF (b[257] == 1) dst[319:256] := a[383:320]; FI
-IF (b[321] == 0) dst[383:320] := a[319:256]; FI
-IF (b[321] == 1) dst[383:320] := a[383:320]; FI
-IF (b[385] == 0) dst[447:384] := a[447:384]; FI
-IF (b[385] == 1) dst[447:384] := a[511:448]; FI
-IF (b[449] == 0) dst[511:448] := a[447:384]; FI
-IF (b[449] == 1) dst[511:448] := a[511:448]; FI
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
-tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
-tmp_dst[351:320] := SELECT4(a[383:256], imm8[5:4])
-tmp_dst[383:352] := SELECT4(a[383:256], imm8[7:6])
-tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
-tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
-tmp_dst[479:448] := SELECT4(a[511:384], imm8[5:4])
-tmp_dst[511:480] := SELECT4(a[511:384], imm8[7:6])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
-tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
-tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
-tmp_dst[159:128] := SELECT4(a[255:128], b[129:128])
-tmp_dst[191:160] := SELECT4(a[255:128], b[161:160])
-tmp_dst[223:192] := SELECT4(a[255:128], b[193:192])
-tmp_dst[255:224] := SELECT4(a[255:128], b[225:224])
-tmp_dst[287:256] := SELECT4(a[383:256], b[257:256])
-tmp_dst[319:288] := SELECT4(a[383:256], b[289:288])
-tmp_dst[351:320] := SELECT4(a[383:256], b[321:320])
-tmp_dst[383:352] := SELECT4(a[383:256], b[353:352])
-tmp_dst[415:384] := SELECT4(a[511:384], b[385:384])
-tmp_dst[447:416] := SELECT4(a[511:384], b[417:416])
-tmp_dst[479:448] := SELECT4(a[511:384], b[449:448])
-tmp_dst[511:480] := SELECT4(a[511:384], b[481:480])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
-tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
-tmp_dst[351:320] := SELECT4(a[383:256], imm8[5:4])
-tmp_dst[383:352] := SELECT4(a[383:256], imm8[7:6])
-tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
-tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
-tmp_dst[479:448] := SELECT4(a[511:384], imm8[5:4])
-tmp_dst[511:480] := SELECT4(a[511:384], imm8[7:6])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], b[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], b[33:32])
-tmp_dst[95:64] := SELECT4(a[127:0], b[65:64])
-tmp_dst[127:96] := SELECT4(a[127:0], b[97:96])
-tmp_dst[159:128] := SELECT4(a[255:128], b[129:128])
-tmp_dst[191:160] := SELECT4(a[255:128], b[161:160])
-tmp_dst[223:192] := SELECT4(a[255:128], b[193:192])
-tmp_dst[255:224] := SELECT4(a[255:128], b[225:224])
-tmp_dst[287:256] := SELECT4(a[383:256], b[257:256])
-tmp_dst[319:288] := SELECT4(a[383:256], b[289:288])
-tmp_dst[351:320] := SELECT4(a[383:256], b[321:320])
-tmp_dst[383:352] := SELECT4(a[383:256], b[353:352])
-tmp_dst[415:384] := SELECT4(a[511:384], b[385:384])
-tmp_dst[447:416] := SELECT4(a[511:384], b[417:416])
-tmp_dst[479:448] := SELECT4(a[511:384], b[449:448])
-tmp_dst[511:480] := SELECT4(a[511:384], b[481:480])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-dst[287:256] := SELECT4(a[383:256], imm8[1:0])
-dst[319:288] := SELECT4(a[383:256], imm8[3:2])
-dst[351:320] := SELECT4(a[383:256], imm8[5:4])
-dst[383:352] := SELECT4(a[383:256], imm8[7:6])
-dst[415:384] := SELECT4(a[511:384], imm8[1:0])
-dst[447:416] := SELECT4(a[511:384], imm8[3:2])
-dst[479:448] := SELECT4(a[511:384], imm8[5:4])
-dst[511:480] := SELECT4(a[511:384], imm8[7:6])
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "b", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], b[1:0])
-dst[63:32] := SELECT4(a[127:0], b[33:32])
-dst[95:64] := SELECT4(a[127:0], b[65:64])
-dst[127:96] := SELECT4(a[127:0], b[97:96])
-dst[159:128] := SELECT4(a[255:128], b[129:128])
-dst[191:160] := SELECT4(a[255:128], b[161:160])
-dst[223:192] := SELECT4(a[255:128], b[193:192])
-dst[255:224] := SELECT4(a[255:128], b[225:224])
-dst[287:256] := SELECT4(a[383:256], b[257:256])
-dst[319:288] := SELECT4(a[383:256], b[289:288])
-dst[351:320] := SELECT4(a[383:256], b[321:320])
-dst[383:352] := SELECT4(a[383:256], b[353:352])
-dst[415:384] := SELECT4(a[511:384], b[385:384])
-dst[447:416] := SELECT4(a[511:384], b[417:416])
-dst[479:448] := SELECT4(a[511:384], b[449:448])
-dst[511:480] := SELECT4(a[511:384], b[481:480])
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 256-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-tmp_dst[319:256] := SELECT4(a[511:256], imm8[1:0])
-tmp_dst[383:320] := SELECT4(a[511:256], imm8[3:2])
-tmp_dst[447:384] := SELECT4(a[511:256], imm8[5:4])
-tmp_dst[511:448] := SELECT4(a[511:256], imm8[7:6])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- id := idx[i+2:i]*64
- IF k[j]
- dst[i+63:i] := a[id+63:id]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 256-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-tmp_dst[319:256] := SELECT4(a[511:256], imm8[1:0])
-tmp_dst[383:320] := SELECT4(a[511:256], imm8[3:2])
-tmp_dst[447:384] := SELECT4(a[511:256], imm8[5:4])
-tmp_dst[511:448] := SELECT4(a[511:256], imm8[7:6])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- id := idx[i+2:i]*64
- IF k[j]
- dst[i+63:i] := a[id+63:id]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" within 256-bit lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-dst[319:256] := SELECT4(a[511:256], imm8[1:0])
-dst[383:320] := SELECT4(a[511:256], imm8[3:2])
-dst[447:384] := SELECT4(a[511:256], imm8[5:4])
-dst[511:448] := SELECT4(a[511:256], imm8[7:6])
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Shuffle double-precision (64-bit) floating-point elements in "a" across lanes using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- id := idx[i+2:i]*64
- dst[i+63:i] := a[id+63:id]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- id := idx[i+3:i]*32
- IF k[j]
- dst[i+31:i] := a[id+31:id]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- id := idx[i+3:i]*32
- IF k[j]
- dst[i+31:i] := a[id+31:id]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" across lanes using the corresponding index in "idx".
-
-FOR j := 0 to 15
- i := j*32
- id := idx[i+3:i]*32
- dst[i+31:i] := a[id+31:id]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 64-bit integers in "a" within 256-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-tmp_dst[319:256] := SELECT4(a[511:256], imm8[1:0])
-tmp_dst[383:320] := SELECT4(a[511:256], imm8[3:2])
-tmp_dst[447:384] := SELECT4(a[511:256], imm8[5:4])
-tmp_dst[511:448] := SELECT4(a[511:256], imm8[7:6])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 64-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- id := idx[i+2:i]*64
- IF k[j]
- dst[i+63:i] := a[id+63:id]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Shuffle 64-bit integers in "a" within 256-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-tmp_dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-tmp_dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-tmp_dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-tmp_dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-tmp_dst[319:256] := SELECT4(a[511:256], imm8[1:0])
-tmp_dst[383:320] := SELECT4(a[511:256], imm8[3:2])
-tmp_dst[447:384] := SELECT4(a[511:256], imm8[5:4])
-tmp_dst[511:448] := SELECT4(a[511:256], imm8[7:6])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Shuffle 64-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- id := idx[i+2:i]*64
- IF k[j]
- dst[i+63:i] := a[id+63:id]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Shuffle 64-bit integers in "a" within 256-bit lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[63:0] := src[63:0]
- 1: tmp[63:0] := src[127:64]
- 2: tmp[63:0] := src[191:128]
- 3: tmp[63:0] := src[255:192]
- ESAC
- RETURN tmp[63:0]
-}
-dst[63:0] := SELECT4(a[255:0], imm8[1:0])
-dst[127:64] := SELECT4(a[255:0], imm8[3:2])
-dst[191:128] := SELECT4(a[255:0], imm8[5:4])
-dst[255:192] := SELECT4(a[255:0], imm8[7:6])
-dst[319:256] := SELECT4(a[511:256], imm8[1:0])
-dst[383:320] := SELECT4(a[511:256], imm8[3:2])
-dst[447:384] := SELECT4(a[511:256], imm8[5:4])
-dst[511:448] := SELECT4(a[511:256], imm8[7:6])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Shuffle 64-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- id := idx[i+2:i]*64
- dst[i+63:i] := a[id+63:id]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Load contiguous active 32-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
- Swizzle
-
-
-
-
- Load contiguous active 32-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Load contiguous active 32-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[m+31:m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
- Swizzle
-
-
-
- Load contiguous active 32-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+m+31:mem_addr+m]
- m := m + 32
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Load contiguous active 64-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
- Swizzle
-
-
-
-
- Load contiguous active 64-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Load contiguous active 64-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[m+63:m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
- Swizzle
-
-
-
- Load contiguous active 64-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+m+63:mem_addr+m]
- m := m + 64
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
-
- Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
-
-
-
- Gather 64-bit integers from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
-
- Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
-
-
-
- Gather 32-bit integers from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
-
- Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Load
-
-
-
-
-
-
- Gather 64-bit integers from memory using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed maximum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
- Compare packed signed 64-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed minimum values in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Special Math Functions
-
-
-
- Compare packed unsigned 64-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- k := 8*j
- dst[k+7:k] := Truncate8(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+31:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed 32-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+31:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- k := 16*j
- dst[k+15:k] := Truncate16(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+31:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed 32-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+31:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 8*j
- dst[k+7:k] := Truncate8(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+63:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Truncate8(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed 64-bit integers in "a" to packed 8-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Truncate8(a[i+63:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 32*j
- dst[k+31:k] := Truncate32(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Truncate32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- MEM[base_addr+l+31:base_addr+l] := Truncate32(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed 64-bit integers in "a" to packed 32-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Truncate32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 16*j
- dst[k+15:k] := Truncate16(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+63:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Truncate16(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed 64-bit integers in "a" to packed 16-bit integers with truncation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Truncate16(a[i+63:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- k := 8*j
- dst[k+7:k] := Saturate8(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+31:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+31:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- k := 16*j
- dst[k+15:k] := Saturate16(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+31:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+31:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 8*j
- dst[k+7:k] := Saturate8(a[i+63:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+63:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := Saturate8(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 8-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := Saturate8(a[i+63:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 32*j
- dst[k+31:k] := Saturate32(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Saturate32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- MEM[base_addr+l+31:base_addr+l] := Saturate32(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 32-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := Saturate32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 16*j
- dst[k+15:k] := Saturate16(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+63:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := Saturate16(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed signed 64-bit integers in "a" to packed 16-bit integers with signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := Saturate16(a[i+63:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Sign extend packed 8-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- k := 8*j
- dst[i+31:i] := SignExtend32(a[k+7:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 8-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Sign extend packed 8-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 8*j
- dst[i+63:i] := SignExtend64(a[k+7:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 32*j
- dst[i+63:i] := SignExtend64(a[k+31:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- k := 16*j
- dst[i+31:i] := SignExtend32(a[k+15:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- l := j*16
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- dst[i+31:i] := SignExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Sign extend packed 16-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 16*j
- dst[i+63:i] := SignExtend64(a[k+15:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Sign extend packed 16-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Sign extend packed 16-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := SignExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- k := 8*j
- dst[k+7:k] := SaturateU8(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+31:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed 8-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+31:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- k := 16*j
- dst[k+15:k] := SaturateU16(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+31:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed 16-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+31:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 32-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+31:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 8*j
- dst[k+7:k] := SaturateU8(a[i+63:i])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+63:i])
- ELSE
- dst[l+7:l] := src[l+7:l]
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed 8-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- MEM[base_addr+l+7:base_addr+l] := SaturateU8(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 8-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- dst[l+7:l] := SaturateU8(a[i+63:i])
- ELSE
- dst[l+7:l] := 0
- FI
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 32*j
- dst[k+31:k] := SaturateU32(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := SaturateU32(a[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed 32-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- MEM[base_addr+l+31:base_addr+l] := SaturateU32(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 32-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[l+31:l] := SaturateU32(a[i+63:i])
- ELSE
- dst[l+31:l] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 16*j
- dst[k+15:k] := SaturateU16(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+63:i])
- ELSE
- dst[l+15:l] := src[l+15:l]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
- Store
-
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed 16-bit integers with unsigned saturation, and store the active results (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- MEM[base_addr+l+15:base_addr+l] := SaturateU16(a[i+63:i])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Convert packed unsigned 64-bit integers in "a" to packed unsigned 16-bit integers with unsigned saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- dst[l+15:l] := SaturateU16(a[i+63:i])
- ELSE
- dst[l+15:l] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- k := 8*j
- dst[i+31:i] := ZeroExtend32(a[k+7:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 8*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+7:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Zero extend packed unsigned 8-bit integers in the low 8 byte sof "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 8*j
- dst[i+63:i] := ZeroExtend64(a[k+7:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 8-bit integers in the low 8 bytes of "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 8-bit integers in the low 8 bytes of "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 8*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+7:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 32*j
- dst[i+63:i] := ZeroExtend64(a[k+31:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 32*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+31:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- k := 16*j
- dst[i+31:i] := ZeroExtend32(a[k+15:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- l := 16*j
- IF k[j]
- dst[i+31:i] := ZeroExtend32(a[l+15:l])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- k := 16*j
- dst[i+63:i] := ZeroExtend64(a[k+15:k])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 64-bit integers, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := 64*j
- l := 16*j
- IF k[j]
- dst[i+63:i] := ZeroExtend64(a[l+15:l])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the low signed 32-bit integers from each packed 64-bit element in "a" and "b", and store the signed 64-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the low signed 32-bit integers from each packed 64-bit element in "a" and "b", and store the signed 64-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Multiply the low signed 32-bit integers from each packed 64-bit element in "a" and "b", and store the signed 64-bit results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the low unsigned 32-bit integers from each packed 64-bit element in "a" and "b", and store the unsigned 64-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the low unsigned 32-bit integers from each packed 64-bit element in "a" and "b", and store the unsigned 64-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Multiply the low unsigned 32-bit integers from each packed 64-bit element in "a" and "b", and store the unsigned 64-bit results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+31:i] * b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src << count) OR (src >> (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := LEFT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the left by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE LEFT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src << count) OR (src >> (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := LEFT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in "imm8", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Miscellaneous
-
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 32-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_DWORDS(src, count_src) {
- count := count_src % 32
- RETURN (src >>count) OR (src << (32 - count))
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := RIGHT_ROTATE_DWORDS(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Rotate the bits in each packed 64-bit integer in "a" to the right by the number of bits specified in the corresponding element of "b", and store the results in "dst".
-
-DEFINE RIGHT_ROTATE_QWORDS(src, count_src) {
- count := count_src % 64
- RETURN (src >> count) OR (src << (64 - count))
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := RIGHT_ROTATE_QWORDS(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
-
-
-
- Scatter 64-bit integers from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Shuffle 32-bit integers in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
-tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
-tmp_dst[351:320] := SELECT4(a[383:256], imm8[5:4])
-tmp_dst[383:352] := SELECT4(a[383:256], imm8[7:6])
-tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
-tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
-tmp_dst[479:448] := SELECT4(a[511:384], imm8[5:4])
-tmp_dst[511:480] := SELECT4(a[511:384], imm8[7:6])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[63:0] > 31
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", add the negated intermediate result to packed elements in "c", and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst", and copy the upper element from "a" to the upper
+ element of "dst".
+
+ dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and add the negated intermediate result to the lower element in "c". Store the
+ result in the lower element of "dst", and copy the upper 3 packed elements from "a" to
+ the upper elements of "dst".
+
+ dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*64
+ dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", subtract packed elements in "c" from the negated intermediate result, and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*32
+ dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst", and copy the upper element from "a" to the
+ upper element of "dst".
+
+ dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", and subtract the lower element in "c" from the negated intermediate result. Store
+ the result in the lower element of "dst", and copy the upper 3 packed elements from "a"
+ to the upper elements of "dst".
+
+ dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+
+
+ FMA
+
+ Arithmetic
+
+
+
+
+
+ Read the FS segment base register and store the 32-bit result in "dst".
+ dst[31:0] := FS_Segment_Base_Register
+ dst[63:32] := 0
+
+
+ FSGSBASE
+
+ General Support
+
+
+
+ Read the FS segment base register and store the 64-bit result in "dst".
+ dst[63:0] := FS_Segment_Base_Register
+
+
+ FSGSBASE
+
+ General Support
+
+
+
+ Read the GS segment base register and store the 32-bit result in "dst".
+ dst[31:0] := GS_Segment_Base_Register
+ dst[63:32] := 0
+
+
+ FSGSBASE
+
+ General Support
+
+
+
+ Read the GS segment base register and store the 64-bit result in "dst".
+ dst[63:0] := GS_Segment_Base_Register
+
+
+ FSGSBASE
+
+ General Support
+
+
+
+
+ Write the unsigned 32-bit integer "a" to the FS segment base register.
+
+ FS_Segment_Base_Register[31:0] := a[31:0]
+ FS_Segment_Base_Register[63:32] := 0
+
+
+ FSGSBASE
+
+ General Support
+
+
+
+
+ Write the unsigned 64-bit integer "a" to the FS segment base register.
+
+ FS_Segment_Base_Register[63:0] := a[63:0]
+
+
+ FSGSBASE
+
+ General Support
+
+
+
+
+ Write the unsigned 32-bit integer "a" to the GS segment base register.
+
+ GS_Segment_Base_Register[31:0] := a[31:0]
+ GS_Segment_Base_Register[63:32] := 0
+
+
+ FSGSBASE
+
+ General Support
+
+
+
+
+ Write the unsigned 64-bit integer "a" to the GS segment base register.
+
+ GS_Segment_Base_Register[63:0] := a[63:0]
+
+
+ FSGSBASE
+
+ General Support
+
+
+
+
+
+
+ Reload the x87 FPU, MMX technology, XMM, and MXCSR registers from the 512-byte
+ memory image at "mem_addr". This data should have been written to memory previously
+ using the FXSAVE instruction, and in the same format as required by the operating mode.
+ "mem_addr" must be aligned on a 16-byte boundary.
+ state_x87_fpu_mmx_sse := fxrstor(MEM[mem_addr+512*8:mem_addr])
+
+
+ FXSR
+
+ OS-Targeted
+
+
+
+
+ Reload the x87 FPU, MMX technology, XMM, and MXCSR registers from the 512-byte
+ memory image at "mem_addr". This data should have been written to memory previously
+ using the FXSAVE64 instruction, and in the same format as required by the operating
+ mode. "mem_addr" must be aligned on a 16-byte boundary.
+ state_x87_fpu_mmx_sse := fxrstor64(MEM[mem_addr+512*8:mem_addr])
+
+
+ FXSR
+
+ OS-Targeted
+
+
+
+
+ Save the current state of the x87 FPU, MMX technology, XMM, and MXCSR registers
+ to a 512-byte memory location at "mem_addr". The layout of the 512-byte region depends
+ on the operating mode. Bytes [511:464] are available for software use and will not be
+ overwritten by the processor.
+ MEM[mem_addr+512*8:mem_addr] := fxsave(state_x87_fpu_mmx_sse)
+
+
+ FXSR
+
+ OS-Targeted
+
+
+
+
+ Save the current state of the x87 FPU, MMX technology, XMM, and MXCSR registers
+ to a 512-byte memory location at "mem_addr". The layout of the 512-byte region depends
+ on the operating mode. Bytes [511:464] are available for software use and will not be
+ overwritten by the processor.
+ MEM[mem_addr+512*8:mem_addr] := fxsave64(state_x87_fpu_mmx_sse)
+
+
+ FXSR
+
+ OS-Targeted
+
+
+
+
+
+
+
+
+ Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8),
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). The field GF(2^8) is represented in polynomial
+ representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
+
+ DEFINE gf2p8mul_byte(src1byte, src2byte) {
+ tword := 0
+ FOR i := 0 to 7
+ IF src2byte.bit[i]
+ tword := tword XOR (src1byte << i)
+ FI
+ ENDFOR
+ FOR i := 14 downto 8
+ p := 0x11B << (i-8)
+ IF tword.bit[i]
+ tword := tword XOR p
+ FI
+ ENDFOR
+ RETURN tword.byte[0]
+ }
+ FOR j := 0 TO 63
+ IF k[j]
+ dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
+ ELSE
+ dst.byte[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ GFNI
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8),
+ and store the results in "dst" using writemask "k" (elements are copied from "src"" when
+ the corresponding mask bit is not set). The field GF(2^8) is represented in polynomial
+ representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
+
+ DEFINE gf2p8mul_byte(src1byte, src2byte) {
+ tword := 0
+ FOR i := 0 to 7
+ IF src2byte.bit[i]
+ tword := tword XOR (src1byte << i)
+ FI
+ ENDFOR
+ FOR i := 14 downto 8
+ p := 0x11B << (i-8)
+ IF tword.bit[i]
+ tword := tword XOR p
+ FI
+ ENDFOR
+ RETURN tword.byte[0]
+ }
+ FOR j := 0 TO 63
+ IF k[j]
+ dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
+ ELSE
+ dst.byte[j] := src.byte[j]
+ FI
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ GFNI
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8),
+ and store the results in "dst". The field GF(2^8) is represented in polynomial
+ representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
+
+ DEFINE gf2p8mul_byte(src1byte, src2byte) {
+ tword := 0
+ FOR i := 0 to 7
+ IF src2byte.bit[i]
+ tword := tword XOR (src1byte << i)
+ FI
+ ENDFOR
+ FOR i := 14 downto 8
+ p := 0x11B << (i-8)
+ IF tword.bit[i]
+ tword := tword XOR p
+ FI
+ ENDFOR
+ RETURN tword.byte[0]
+ }
+ FOR j := 0 TO 63
+ dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ GFNI
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute an affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed
+ 8-bit results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 7
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ GFNI
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Compute an affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed
+ 8-bit results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 7
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := src.qword[j].byte[i]
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ GFNI
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Compute an affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed
+ 8-bit results in "dst".
+
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 7
+ FOR i := 0 to 7
+ dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
+ ENDFOR
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ GFNI
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute an inverse affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the
+ 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3
+ + x + 1. Store the packed 8-bit results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 7
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ GFNI
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Compute an inverse affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the
+ 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3
+ + x + 1. Store the packed 8-bit results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 7
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := src.qword[j].byte[b]
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ GFNI
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+ Compute an inverse affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the
+ 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3
+ + x + 1. Store the packed 8-bit results in "dst".
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 7
+ FOR i := 0 to 7
+ dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
+ ENDFOR
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ GFNI
+ AVX512F
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8),
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). The field GF(2^8) is represented in polynomial
+ representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
+
+ DEFINE gf2p8mul_byte(src1byte, src2byte) {
+ tword := 0
+ FOR i := 0 to 7
+ IF src2byte.bit[i]
+ tword := tword XOR (src1byte << i)
+ FI
+ ENDFOR
+ FOR i := 14 downto 8
+ p := 0x11B << (i-8)
+ IF tword.bit[i]
+ tword := tword XOR p
+ FI
+ ENDFOR
+ RETURN tword.byte[0]
+ }
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
+ ELSE
+ dst.byte[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8),
+ and store the results in "dst" using writemask "k" (elements are copied from "src"" when
+ the corresponding mask bit is not set). The field GF(2^8) is represented in polynomial
+ representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
+
+ DEFINE gf2p8mul_byte(src1byte, src2byte) {
+ tword := 0
+ FOR i := 0 to 7
+ IF src2byte.bit[i]
+ tword := tword XOR (src1byte << i)
+ FI
+ ENDFOR
+ FOR i := 14 downto 8
+ p := 0x11B << (i-8)
+ IF tword.bit[i]
+ tword := tword XOR p
+ FI
+ ENDFOR
+ RETURN tword.byte[0]
+ }
+ FOR j := 0 TO 31
+ IF k[j]
+ dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
+ ELSE
+ dst.byte[j] := src.byte[j]
+ FI
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8),
+ and store the results in "dst". The field GF(2^8) is represented in polynomial
+ representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
+
+ DEFINE gf2p8mul_byte(src1byte, src2byte) {
+ tword := 0
+ FOR i := 0 to 7
+ IF src2byte.bit[i]
+ tword := tword XOR (src1byte << i)
+ FI
+ ENDFOR
+ FOR i := 14 downto 8
+ p := 0x11B << (i-8)
+ IF tword.bit[i]
+ tword := tword XOR p
+ FI
+ ENDFOR
+ RETURN tword.byte[0]
+ }
+ FOR j := 0 TO 31
+ dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8),
+ and store the results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set). The field GF(2^8) is represented in polynomial
+ representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
+
+ DEFINE gf2p8mul_byte(src1byte, src2byte) {
+ tword := 0
+ FOR i := 0 to 7
+ IF src2byte.bit[i]
+ tword := tword XOR (src1byte << i)
+ FI
+ ENDFOR
+ FOR i := 14 downto 8
+ p := 0x11B << (i-8)
+ IF tword.bit[i]
+ tword := tword XOR p
+ FI
+ ENDFOR
+ RETURN tword.byte[0]
+ }
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
+ ELSE
+ dst.byte[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8),
+ and store the results in "dst" using writemask "k" (elements are copied from "src"" when
+ the corresponding mask bit is not set). The field GF(2^8) is represented in polynomial
+ representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
+
+ DEFINE gf2p8mul_byte(src1byte, src2byte) {
+ tword := 0
+ FOR i := 0 to 7
+ IF src2byte.bit[i]
+ tword := tword XOR (src1byte << i)
+ FI
+ ENDFOR
+ FOR i := 14 downto 8
+ p := 0x11B << (i-8)
+ IF tword.bit[i]
+ tword := tword XOR p
+ FI
+ ENDFOR
+ RETURN tword.byte[0]
+ }
+ FOR j := 0 TO 15
+ IF k[j]
+ dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
+ ELSE
+ dst.byte[j] := src.byte[j]
+ FI
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8),
+ and store the results in "dst". The field GF(2^8) is represented in polynomial
+ representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
+
+ DEFINE gf2p8mul_byte(src1byte, src2byte) {
+ tword := 0
+ FOR i := 0 to 7
+ IF src2byte.bit[i]
+ tword := tword XOR (src1byte << i)
+ FI
+ ENDFOR
+ FOR i := 14 downto 8
+ p := 0x11B << (i-8)
+ IF tword.bit[i]
+ tword := tword XOR p
+ FI
+ ENDFOR
+ RETURN tword.byte[0]
+ }
+ FOR j := 0 TO 15
+ dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute an affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed
+ 8-bit results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 3
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Compute an affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed
+ 8-bit results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 3
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := src.qword[j].byte[i]
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute an affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed
+ 8-bit results in "dst".
+
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 3
+ FOR i := 0 to 7
+ dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
+ ENDFOR
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute an affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed
+ 8-bit results in "dst" using zeromask "k" (elements are zeroed out when the
+ corresponding mask bit is not set).
+
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 1
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Compute an affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed
+ 8-bit results in "dst" using writemask "k" (elements are copied from "src" when the
+ corresponding mask bit is not set).
+
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 1
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := src.qword[j].byte[i]
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute an affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed
+ 8-bit results in "dst".
+
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 1
+ FOR i := 0 to 7
+ dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
+ ENDFOR
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute an inverse affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the
+ 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3
+ + x + 1. Store the packed 8-bit results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 3
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Compute an inverse affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the
+ 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3
+ + x + 1. Store the packed 8-bit results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 3
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := src.qword[j].byte[i]
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute an inverse affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the
+ 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3
+ + x + 1. Store the packed 8-bit results in "dst".
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 3
+ FOR i := 0 to 7
+ dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
+ ENDFOR
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+ Compute an inverse affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the
+ 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3
+ + x + 1. Store the packed 8-bit results in "dst" using zeromask "k" (elements are zeroed
+ out when the corresponding mask bit is not set).
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 1
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := 0
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+
+
+ Compute an inverse affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the
+ 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3
+ + x + 1. Store the packed 8-bit results in "dst" using writemask "k" (elements are
+ copied from "src" when the corresponding mask bit is not set).
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 1
+ FOR i := 0 to 7
+ IF k[j*8+i]
+ dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
+ ELSE
+ dst.qword[j].byte[i] := src.qword[j].byte[i]
+ FI
+ ENDFOR
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Compute an inverse affine transformation in the Galois Field 2^8. An affine
+ transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix,
+ "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the
+ 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3
+ + x + 1. Store the packed 8-bit results in "dst".
+ DEFINE parity(x) {
+ t := 0
+ FOR i := 0 to 7
+ t := t XOR x.bit[i]
+ ENDFOR
+ RETURN t
+ }
+ DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
+ FOR i := 0 to 7
+ retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
+ ENDFOR
+ RETURN retbyte
+ }
+ FOR j := 0 TO 1
+ FOR i := 0 to 7
+ dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
+ ENDFOR
+ ENDFOR
+ dst[MAX:128] := 0
+
+
+ GFNI
+ AVX512VL
+
+ Arithmetic
+
+
+
+
+
+
+ Provides a hint to the processor to selectively reset the prediction history of
+ the current logical processor specified by a signed 32-bit integer "__eax".
+
+ HRESET
+
+ General Support
+
+
+
+
+
+
+ Invalidate mappings in the Translation Lookaside Buffers (TLBs) and
+ paging-structure caches for the processor context identifier (PCID) specified by
+ "descriptor" based on the invalidation type specified in "type".
+ The PCID "descriptor" is specified as a 16-byte memory operand (with no alignment
+ restrictions) where bits [11:0] specify the PCID, and bits [127:64] specify the linear
+ address; bits [63:12] are reserved.
+ The types supported are:
+ 0) Individual-address invalidation: If "type" is 0, the logical processor invalidates
+ mappings for a single linear address and tagged with the PCID specified in "descriptor",
+ except global translations. The instruction may also invalidate global translations,
+ mappings for other linear addresses, or mappings tagged with other PCIDs.
+ 1) Single-context invalidation: If "type" is 1, the logical processor invalidates all
+ mappings tagged with the PCID specified in "descriptor" except global translations. In
+ some cases, it may invalidate mappings for other PCIDs as well.
+ 2) All-context invalidation: If "type" is 2, the logical processor invalidates all
+ mappings tagged with any PCID.
+ 3) All-context invalidation, retaining global translations: If "type" is 3, the logical
+ processor invalidates all mappings tagged with any PCID except global translations,
+ ignoring "descriptor". The instruction may also invalidate global translations as well.
+
+ CASE type[1:0] OF
+ 0: // individual-address invalidation retaining global translations
+ OP_PCID := MEM[descriptor+11:descriptor]
+ ADDR := MEM[descriptor+127:descriptor+64]
+ BREAK
+ 1: // single PCID invalidation retaining globals
+ OP_PCID := MEM[descriptor+11:descriptor]
+ // invalidate all mappings tagged with OP_PCID except global translations
+ BREAK
+ 2: // all PCID invalidation
+ // invalidate all mappings tagged with any PCID
+ BREAK
+ 3: // all PCID invalidation retaining global translations
+ // invalidate all mappings tagged with any PCID except global translations
+ BREAK
+ ESAC
+
+
+ INVPCID
+
+ OS-Targeted
+
+
+
+
+ Flag
+
+
+
+
+ Decrypt 10 rounds of unsigned 8-bit integers in "__idata" using 128-bit AES key
+ specified in "__h", store the resulting unsigned 8-bit integers into the corresponding
+ elements of "__odata", and set "dst" to the ZF flag status. If exception happens, set ZF
+ flag to 1 and zero initialize "__odata".
+ MEM[__odata+127:__odata] := AES128Decrypt (__idata[127:0], __h[383:0])
+ dst := ZF
+
+
+ KEYLOCKER
+
+ Cryptography
+
+
+ Flag
+
+
+
+
+ Decrypt 10 rounds of unsigned 8-bit integers in "__idata" using 256-bit AES key
+ specified in "__h", store the resulting unsigned 8-bit integers into the corresponding
+ elements of "__odata", and set "dst" to the ZF flag status. If exception happens, set ZF
+ flag to 1 and zero initialize "__odata".
+ MEM[__odata+127:__odata] := AES256Decrypt (__idata[127:0], __h[511:0])
+ dst := ZF
+
+
+ KEYLOCKER
+
+ Cryptography
+
+
+ Flag
+
+
+
+
+ Encrypt 10 rounds of unsigned 8-bit integers in "__idata" using 128-bit AES key
+ specified in "__h", store the resulting unsigned 8-bit integers into the corresponding
+ elements of "__odata", and set "dst" to the ZF flag status.
+ MEM[__odata+127:__odata] := AES128Encrypt (__idata[127:0], __h[383:0])
+ dst := ZF
+
+
+ KEYLOCKER
+
+ Cryptography
+
+
+ Flag
+
+
+
+
+ Encrypt 10 rounds of unsigned 8-bit integers in "__idata" using 256-bit AES key
+ specified in "__h", store the resulting unsigned 8-bit integers into the corresponding
+ elements of "__odata", and set "dst" to the ZF flag status. If exception happens, set ZF
+ flag to 1 and zero initialize "__odata".
+ MEM[__odata+127:__odata] := AES256Encrypt (__idata[127:0], __h[511:0])
+ dst := ZF
+
+
+ KEYLOCKER
+
+ Cryptography
+
+
+ Flag
+
+
+
+
+ Wrap a 128-bit AES key from "__key" into a 384-bit key __h stored in "__h" and
+ set IWKey's NoBackup and KeySource bits in "dst". The explicit source operand "__htype"
+ specifies __h restrictions.
+ __h[383:0] := WrapKey128(__key[127:0], __htype)
+ dst[0] := IWKey.NoBackup
+ dst[4:1] := IWKey.KeySource[3:0]
+
+
+ KEYLOCKER
+
+ Cryptography
+
+
+ Flag
+
+
+
+
+
+ Wrap a 256-bit AES key from "__key_hi" and "__key_lo" into a 512-bit key stored
+ in "__h" and set IWKey's NoBackup and KeySource bits in "dst". The 32-bit "__htype"
+ specifies __h restrictions.
+ __h[511:0] := WrapKey256(__key_lo[127:0], __key_hi[127:0], __htype)
+ dst[0] := IWKey.NoBackup
+ dst[4:1] := IWKey.KeySource[3:0]
+
+
+ KEYLOCKER
+
+ Cryptography
+
+
+ Flag
+
+
+
+
+
+ Load internal wrapping key (IWKey). The 32-bit unsigned integer "__ctl"
+ specifies IWKey's KeySource and whether backing up the key is permitted. IWKey's 256-bit
+ encryption key is loaded from "__enkey_lo" and "__enkey_hi". IWKey's 128-bit integrity
+ key is loaded from "__intkey".
+
+ KEYLOCKER
+
+ Cryptography
+
+
+ Flag
+
+
+
+
+ Decrypt 10 rounds of 8 groups of unsigned 8-bit integers in "__idata" using
+ 128-bit AES key specified in "__h", store the resulting unsigned 8-bit integers into the
+ corresponding elements of "__odata", and set "dst" to the ZF flag status. If exception
+ happens, set ZF flag to 1 and zero initialize "__odata".
+ FOR i := 0 to 7
+ __odata[i] := AES128Decrypt (__idata[i], __h[383:0])
+ ENDFOR
+ dst := ZF
+
+
+ KEYLOCKER_WIDE
+
+ Cryptography
+
+
+ Flag
+
+
+
+
+ Decrypt 10 rounds of 8 groups of unsigned 8-bit integers in "__idata" using
+ 256-bit AES key specified in "__h", store the resulting unsigned 8-bit integers into the
+ corresponding elements of "__odata", and set "dst" to the ZF flag status. If exception
+ happens, set ZF flag to 1 and zero initialize "__odata".
+ FOR i := 0 to 7
+ __odata[i] := AES256Decrypt (__idata[i], __h[511:0])
+ ENDFOR
+ dst := ZF
+
+
+ KEYLOCKER_WIDE
+
+ Cryptography
+
+
+ Flag
+
+
+
+
+ Encrypt 10 rounds of 8 groups of unsigned 8-bit integers in "__idata" using
+ 128-bit AES key specified in "__h", store the resulting unsigned 8-bit integers into the
+ corresponding elements of "__odata", and set "dst" to the ZF flag status. If exception
+ happens, set ZF flag to 1 and zero initialize "__odata".
+ FOR i := 0 to 7
+ __odata[i] := AES128Encrypt (__idata[i], __h[383:0])
+ ENDFOR
+ dst := ZF
+
+
+ KEYLOCKER_WIDE
+
+ Cryptography
+
+
+ Flag
+
+
+
+
+ Encrypt 10 rounds of 8 groups of unsigned 8-bit integers in "__idata" using
+ 256-bit AES key specified in "__h", store the resulting unsigned 8-bit integers into the
+ corresponding elements of "__odata", and set "dst" to the ZF flag status. If exception
+ happens, set ZF flag to 1 and zero initialize "__odata".
+ FOR i := 0 to 7
+ __odata[i] := AES256Encrypt (__idata[i], __h[512:0])
+ ENDFOR
+ dst := ZF
+
+
+ KEYLOCKER_WIDE
+
+ Cryptography
+
+
+
+
+
+ Count the number of leading zero bits in unsigned 32-bit integer "a", and
+ return that count in "dst".
+
+ tmp := 31
+ dst := 0
+ DO WHILE (tmp >= 0 AND a[tmp] == 0)
+ tmp := tmp - 1
+ dst := dst + 1
+ OD
+
+
+ LZCNT
+
+ Bit Manipulation
+
+
+
+
+ Count the number of leading zero bits in unsigned 64-bit integer "a", and
+ return that count in "dst".
+
+ tmp := 63
+ dst := 0
+ DO WHILE (tmp >= 0 AND a[tmp] == 0)
+ tmp := tmp - 1
+ dst := dst + 1
+ OD
+
+
+ LZCNT
+
+ Bit Manipulation
+
+
+
+
+
+
+ Copy 64-bit integer "a" to "dst".
+
+ dst[63:0] := a[63:0]
+
+
+ MMX
+
+ Convert
+
+
+
+
+ Copy 64-bit integer "a" to "dst".
+
+ dst[63:0] := a[63:0]
+
+
+ MMX
+
+ Convert
+
+
+
+
+ Copy 32-bit integer "a" to the lower elements of "dst", and zero the upper
+ element of "dst".
+
+ dst[31:0] := a[31:0]
+ dst[63:32] := 0
+
+
+ MMX
+
+ Convert
+
+
+
+
+ Copy the lower 32-bit integer in "a" to "dst".
+
+ dst[31:0] := a[31:0]
+
+
+ MMX
+
+ Convert
+
+
+
+
+ Copy 32-bit integer "a" to the lower elements of "dst", and zero the upper
+ element of "dst".
+
+ dst[31:0] := a[31:0]
+ dst[63:32] := 0
+
+
+ MMX
+
+ Convert
+
+
+
+
+ Copy the lower 32-bit integer in "a" to "dst".
+
+ dst[31:0] := a[31:0]
+
+
+ MMX
+
+ Convert
+
+
+
+
+ Copy 64-bit integer "a" to "dst".
+
+ dst[63:0] := a[63:0]
+
+
+ MMX
+
+ Convert
+
+
+
+
+ Copy 64-bit integer "a" to "dst".
+
+ dst[63:0] := a[63:0]
+
+
+ MMX
+
+ Convert
+
+
+
+
+ Empty the MMX state, which marks the x87 FPU registers as available for use by
+ x87 instructions. This instruction must be used at the end of all MMX technology
+ procedures.
+
+ MMX
+
+ General Support
+
+
+
+
+ Empty the MMX state, which marks the x87 FPU registers as available for use by
+ x87 instructions. This instruction must be used at the end of all MMX technology
+ procedures.
+
+ MMX
+
+ General Support
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using signed saturation, and store the results in "dst".
+
+ dst[7:0] := Saturate8(a[15:0])
+ dst[15:8] := Saturate8(a[31:16])
+ dst[23:16] := Saturate8(a[47:32])
+ dst[31:24] := Saturate8(a[63:48])
+ dst[39:32] := Saturate8(b[15:0])
+ dst[47:40] := Saturate8(b[31:16])
+ dst[55:48] := Saturate8(b[47:32])
+ dst[63:56] := Saturate8(b[63:48])
+
+
+ MMX
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using signed saturation, and store the results in "dst".
+
+ dst[15:0] := Saturate16(a[31:0])
+ dst[31:16] := Saturate16(a[63:32])
+ dst[47:32] := Saturate16(b[31:0])
+ dst[63:48] := Saturate16(b[63:32])
+
+
+ MMX
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using unsigned saturation, and store the results in "dst".
+
+ dst[7:0] := SaturateU8(a[15:0])
+ dst[15:8] := SaturateU8(a[31:16])
+ dst[23:16] := SaturateU8(a[47:32])
+ dst[31:24] := SaturateU8(a[63:48])
+ dst[39:32] := SaturateU8(b[15:0])
+ dst[47:40] := SaturateU8(b[31:16])
+ dst[55:48] := SaturateU8(b[47:32])
+ dst[63:56] := SaturateU8(b[63:48])
+
+
+ MMX
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using signed saturation, and store the results in "dst".
+
+ dst[7:0] := Saturate8(a[15:0])
+ dst[15:8] := Saturate8(a[31:16])
+ dst[23:16] := Saturate8(a[47:32])
+ dst[31:24] := Saturate8(a[63:48])
+ dst[39:32] := Saturate8(b[15:0])
+ dst[47:40] := Saturate8(b[31:16])
+ dst[55:48] := Saturate8(b[47:32])
+ dst[63:56] := Saturate8(b[63:48])
+
+
+ MMX
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using signed saturation, and store the results in "dst".
+
+ dst[15:0] := Saturate16(a[31:0])
+ dst[31:16] := Saturate16(a[63:32])
+ dst[47:32] := Saturate16(b[31:0])
+ dst[63:48] := Saturate16(b[63:32])
+
+
+ MMX
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using unsigned saturation, and store the results in "dst".
+
+ dst[7:0] := SaturateU8(a[15:0])
+ dst[15:8] := SaturateU8(a[31:16])
+ dst[23:16] := SaturateU8(a[47:32])
+ dst[31:24] := SaturateU8(a[63:48])
+ dst[39:32] := SaturateU8(b[15:0])
+ dst[47:40] := SaturateU8(b[31:16])
+ dst[55:48] := SaturateU8(b[47:32])
+ dst[63:56] := SaturateU8(b[63:48])
+
+
+ MMX
+
+ Miscellaneous
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the high half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_BYTES(src1[63:0], src2[63:0]) {
+ dst[7:0] := src1[39:32]
+ dst[15:8] := src2[39:32]
+ dst[23:16] := src1[47:40]
+ dst[31:24] := src2[47:40]
+ dst[39:32] := src1[55:48]
+ dst[47:40] := src2[55:48]
+ dst[55:48] := src1[63:56]
+ dst[63:56] := src2[63:56]
+ RETURN dst[63:0]
+ }
+ dst[63:0] := INTERLEAVE_HIGH_BYTES(a[63:0], b[63:0])
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the high half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_WORDS(src1[63:0], src2[63:0]) {
+ dst[15:0] := src1[47:32]
+ dst[31:16] := src2[47:32]
+ dst[47:32] := src1[63:48]
+ dst[63:48] := src2[63:48]
+ RETURN dst[63:0]
+ }
+ dst[63:0] := INTERLEAVE_HIGH_WORDS(a[63:0], b[63:0])
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the high half of "a" and "b", and
+ store the results in "dst".
+
+ dst[31:0] := a[63:32]
+ dst[63:32] := b[63:32]
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the low half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_BYTES(src1[63:0], src2[63:0]) {
+ dst[7:0] := src1[7:0]
+ dst[15:8] := src2[7:0]
+ dst[23:16] := src1[15:8]
+ dst[31:24] := src2[15:8]
+ dst[39:32] := src1[23:16]
+ dst[47:40] := src2[23:16]
+ dst[55:48] := src1[31:24]
+ dst[63:56] := src2[31:24]
+ RETURN dst[63:0]
+ }
+ dst[63:0] := INTERLEAVE_BYTES(a[63:0], b[63:0])
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the low half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_WORDS(src1[63:0], src2[63:0]) {
+ dst[15:0] := src1[15:0]
+ dst[31:16] := src2[15:0]
+ dst[47:32] := src1[31:16]
+ dst[63:48] := src2[31:16]
+ RETURN dst[63:0]
+ }
+ dst[63:0] := INTERLEAVE_WORDS(a[63:0], b[63:0])
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the low half of "a" and "b", and
+ store the results in "dst".
+
+ dst[31:0] := a[31:0]
+ dst[63:32] := b[31:0]
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the high half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_BYTES(src1[63:0], src2[63:0]) {
+ dst[7:0] := src1[39:32]
+ dst[15:8] := src2[39:32]
+ dst[23:16] := src1[47:40]
+ dst[31:24] := src2[47:40]
+ dst[39:32] := src1[55:48]
+ dst[47:40] := src2[55:48]
+ dst[55:48] := src1[63:56]
+ dst[63:56] := src2[63:56]
+ RETURN dst[63:0]
+ }
+ dst[63:0] := INTERLEAVE_HIGH_BYTES(a[63:0], b[63:0])
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the high half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_WORDS(src1[63:0], src2[63:0]) {
+ dst[15:0] := src1[47:32]
+ dst[31:16] := src2[47:32]
+ dst[47:32] := src1[63:48]
+ dst[63:48] := src2[63:48]
+ RETURN dst[63:0]
+ }
+ dst[63:0] := INTERLEAVE_HIGH_WORDS(a[63:0], b[63:0])
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the high half of "a" and "b", and
+ store the results in "dst".
+
+ dst[31:0] := a[63:32]
+ dst[63:32] := b[63:32]
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the low half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_BYTES(src1[63:0], src2[63:0]) {
+ dst[7:0] := src1[7:0]
+ dst[15:8] := src2[7:0]
+ dst[23:16] := src1[15:8]
+ dst[31:24] := src2[15:8]
+ dst[39:32] := src1[23:16]
+ dst[47:40] := src2[23:16]
+ dst[55:48] := src1[31:24]
+ dst[63:56] := src2[31:24]
+ RETURN dst[63:0]
+ }
+ dst[63:0] := INTERLEAVE_BYTES(a[63:0], b[63:0])
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the low half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_WORDS(src1[63:0], src2[63:0]) {
+ dst[15:0] := src1[15:0]
+ dst[31:16] := src2[15:0]
+ dst[47:32] := src1[31:16]
+ dst[63:48] := src2[31:16]
+ RETURN dst[63:0]
+ }
+ dst[63:0] := INTERLEAVE_WORDS(a[63:0], b[63:0])
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the low half of "a" and "b", and
+ store the results in "dst".
+
+ dst[31:0] := a[31:0]
+ dst[63:32] := b[31:0]
+
+
+ MMX
+
+ Swizzle
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := a[i+7:i] + b[i+7:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := a[i+15:i] + b[i+15:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed 32-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed signed 8-bit integers in "a" and "b" using saturation, and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed signed 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := a[i+7:i] - b[i+7:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := a[i+15:i] - b[i+15:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a"
+ using saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in
+ "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit
+ integers in "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit
+ integers in "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers,
+ and pack the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) +
+ SignExtend32(a[i+15:i]*b[i+15:i])
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 16-bit integers in "a" and "b", producing intermediate
+ 32-bit integers, and store the low 16 bits of the intermediate integers in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[15:0]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := a[i+7:i] + b[i+7:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := a[i+15:i] + b[i+15:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed 32-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed signed 8-bit integers in "a" and "b" using saturation, and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed signed 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := a[i+7:i] - b[i+7:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := a[i+15:i] - b[i+15:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a"
+ using saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in
+ "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit
+ integers in "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit
+ integers in "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers,
+ and pack the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) +
+ SignExtend32(a[i+15:i]*b[i+15:i])
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 16-bit integers in "a" and "b", producing intermediate
+ 32-bit integers, and store the low 16 bits of the intermediate integers in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[15:0]
+ ENDFOR
+
+
+ MMX
+
+ Arithmetic
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF count[63:0] > 31
dst[i+31:i] := 0
- ELSE
+ ELSE
dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF imm8[7:0] > 31
dst[i+31:i] := 0
- ELSE
+ ELSE
dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[63:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[63:0] > 31
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift 64-bit integer "a" left by "count" while shifting in zeros, and store the
+ result in "dst".
+
+ IF count[63:0] > 63
+ dst[63:0] := 0
+ ELSE
+ dst[63:0] := ZeroExtend64(a[63:0] << count[63:0])
+ FI
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift 64-bit integer "a" left by "imm8" while shifting in zeros, and store the
+ result in "dst".
+
+ IF imm8[7:0] > 63
+ dst[63:0] := 0
+ ELSE
+ dst[63:0] := ZeroExtend64(a[63:0] << imm8[7:0])
+ FI
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF count[63:0] > 31
dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
+ ELSE
dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF imm8[7:0] > 31
dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
+ ELSE
dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF count[63:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF imm8[7:0] > 63
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0x0)
- ELSE
- dst[i+63:i] := SignExtend64(a[i+63:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF count[i+63:i] < 64
- dst[i+63:i] := SignExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := (a[i+63] ? 0xFFFFFFFFFFFFFFFF : 0)
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[63:0] > 31
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF count[63:0] > 31
dst[i+31:i] := 0
- ELSE
+ ELSE
dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[63:0] > 31
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift 64-bit integer "a" right by "count" while shifting in zeros, and store
+ the result in "dst".
+
+ IF count[63:0] > 63
+ dst[63:0] := 0
+ ELSE
+ dst[63:0] := ZeroExtend64(a[63:0] >> count[63:0])
+ FI
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift 64-bit integer "a" right by "imm8" while shifting in zeros, and store the
+ result in "dst".
+
+ IF imm8[7:0] > 63
+ dst[63:0] := 0
+ ELSE
+ dst[63:0] := ZeroExtend64(a[63:0] >> imm8[7:0])
+ FI
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF count[63:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF imm8[7:0] > 31
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift 64-bit integer "a" left by "count" while shifting in zeros, and store the
+ result in "dst".
+
+ IF count[63:0] > 63
+ dst[63:0] := 0
+ ELSE
+ dst[63:0] := ZeroExtend64(a[63:0] << count[63:0])
+ FI
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift 64-bit integer "a" left by "imm8" while shifting in zeros, and store the
+ result in "dst".
+
+ IF imm8[7:0] > 63
+ dst[63:0] := 0
+ ELSE
+ dst[63:0] := ZeroExtend64(a[63:0] << imm8[7:0])
+ FI
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF count[63:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF imm8[7:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF count[63:0] > 31
dst[i+31:i] := 0
- ELSE
+ ELSE
dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ IF imm8[7:0] > 31
dst[i+31:i] := 0
- ELSE
+ ELSE
dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF count[i+63:i] < 64
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "src", "a", and "b" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using writemask "k" at 32-bit granularity (32-bit elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- FOR h := 0 to 31
- index[2:0] := (src[i+h] << 2) OR (a[i+h] << 1) OR b[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using zeromask "k" at 32-bit granularity (32-bit elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- FOR h := 0 to 31
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 32-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst".
-
-FOR j := 0 to 15
- i := j*32
- FOR h := 0 to 31
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "src", "a", and "b" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using writemask "k" at 64-bit granularity (64-bit elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- FOR h := 0 to 63
- index[2:0] := (src[i+h] << 2) OR (a[i+h] << 1) OR b[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst" using zeromask "k" at 64-bit granularity (64-bit elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- FOR h := 0 to 63
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
-
- Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in "imm8". For each bit in each packed 64-bit integer, the corresponding bit from "a", "b", and "c" are used to form a 3 bit index into "imm8", and the value at that bit in "imm8" is written to the corresponding bit in "dst".
-
-FOR j := 0 to 7
- i := j*64
- FOR h := 0 to 63
- index[2:0] := (a[i+h] << 2) OR (b[i+h] << 1) OR c[i+h]
- dst[i+h] := imm8[index[2:0]]
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Logical
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ((a[i+63:i] AND b[i+63:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Logical
-
-
-
- Compute the bitwise NAND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ((a[i+31:i] AND b[i+31:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is zero.
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F
- Logical
-
-
-
- Compute the bitwise NAND of packed 64-bit integers in "a" and "b", producing intermediate 64-bit values, and set the corresponding bit in result mask "k" if the intermediate value is zero.
-
-FOR j := 0 to 7
- i := j*64
- k[j] := ((a[i+63:i] AND b[i+63:i]) == 0) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Unpack and interleave 32-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Unpack and interleave 32-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Unpack and interleave 32-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Unpack and interleave 64-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Unpack and interleave 64-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Unpack and interleave 64-bit integers from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Unpack and interleave 32-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Unpack and interleave 32-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Unpack and interleave 32-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Unpack and interleave 64-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Unpack and interleave 64-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
- Unpack and interleave 64-bit integers from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Logical
-
-
-
-
- Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the approximate reciprocal of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (1.0 / a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (1.0 / a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-IF k[0]
- dst[63:0] := (1.0 / b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-IF k[0]
- dst[63:0] := (1.0 / b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-dst[63:0] := (1.0 / b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-IF k[0]
- dst[31:0] := (1.0 / b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-IF k[0]
- dst[31:0] := (1.0 / b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-dst[31:0] := (1.0 / b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Round packed double-precision (64-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst". [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := RoundScaleFP64(a[i+63:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst". [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Round packed single-precision (32-bit) floating-point elements in "a" to the number of fraction bits specified by "imm8", and store the results in "dst". [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := RoundScaleFP32(a[i+31:i], imm8[7:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Round the lower double-precision (64-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-IF k[0]
- dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Round the lower double-precision (64-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-IF k[0]
- dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Round the lower double-precision (64-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-IF k[0]
- dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round the lower double-precision (64-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-IF k[0]
- dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round the lower double-precision (64-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Round the lower double-precision (64-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". [round_imm_note]
-
-DEFINE RoundScaleFP64(src1[63:0], imm8[7:0]) {
- m[63:0] := FP64(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[63:0] := POW(2.0, -m) * ROUND(POW(2.0, m) * src1[63:0], imm8[3:0])
- IF IsInf(tmp[63:0])
- tmp[63:0] := src1[63:0]
- FI
- RETURN tmp[63:0]
-}
-dst[63:0] := RoundScaleFP64(b[63:0], imm8[7:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
-
- Round the lower single-precision (32-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-IF k[0]
- dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Round the lower single-precision (32-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-IF k[0]
- dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Round the lower single-precision (32-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-IF k[0]
- dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round the lower single-precision (32-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-IF k[0]
- dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Round the lower single-precision (32-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note][sae_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Round the lower single-precision (32-bit) floating-point element in "b" to the number of fraction bits specified by "imm8", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". [round_imm_note]
-
-DEFINE RoundScaleFP32(src1[31:0], imm8[7:0]) {
- m[31:0] := FP32(imm8[7:4]) // number of fraction bits after the binary point to be preserved
- tmp[31:0] := POW(FP32(2.0), -m) * ROUND(POW(FP32(2.0), m) * src1[31:0], imm8[3:0])
- IF IsInf(tmp[31:0])
- tmp[31:0] := src1[31:0]
- FI
- RETURN tmp[31:0]
-}
-dst[31:0] := RoundScaleFP32(b[31:0], imm8[7:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the approximate reciprocal square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (1.0 / SQRT(a[i+63:i]))
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 2^-14.
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-IF k[0]
- dst[63:0] := (1.0 / SQRT(b[63:0]))
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-IF k[0]
- dst[63:0] := (1.0 / SQRT(b[63:0]))
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-dst[63:0] := (1.0 / SQRT(b[63:0]))
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the approximate reciprocal square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-IF k[0]
- dst[31:0] := (1.0 / SQRT(b[31:0]))
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the approximate reciprocal square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-IF k[0]
- dst[31:0] := (1.0 / SQRT(b[31:0]))
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the approximate reciprocal square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 2^-14.
-
-dst[31:0] := (1.0 / SQRT(b[31:0]))
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", and store the results in "dst".
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := SCALE(a[i+63:0], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", and store the results in "dst".
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[31:0]
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := SCALE(a[i+31:0], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-IF k[0]
- dst[63:0] := SCALE(a[63:0], b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-IF k[0]
- dst[63:0] := SCALE(a[63:0], b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-IF k[0]
- dst[63:0] := SCALE(a[63:0], b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-IF k[0]
- dst[63:0] := SCALE(a[63:0], b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-dst[63:0] := SCALE(a[63:0], b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
- Scale the packed double-precision (64-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[63:0] := tmp_src1[63:0] * POW(2.0, FLOOR(tmp_src2[63:0]))
- RETURN dst[63:0]
-}
-dst[63:0] := SCALE(a[63:0], b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[63:0]
-}
-IF k[0]
- dst[31:0] := SCALE(a[31:0], b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[63:0]
-}
-IF k[0]
- dst[31:0] := SCALE(a[31:0], b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[63:0]
-}
-IF k[0]
- dst[31:0] := SCALE(a[31:0], b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[63:0]
-}
-IF k[0]
- dst[31:0] := SCALE(a[31:0], b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[63:0]
-}
-dst[31:0] := SCALE(a[31:0], b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Miscellaneous
-
-
-
- Scale the packed single-precision (32-bit) floating-point elements in "a" using values from "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- DEFINE SCALE(src1, src2) {
- IF (src2 == NaN)
- IF (src2 == SNaN)
- RETURN QNAN(src2)
- FI
- ELSE IF (src1 == NaN)
- IF (src1 == SNaN)
- RETURN QNAN(src1)
- FI
- IF (src2 != INF)
- RETURN QNAN(src1)
- FI
- ELSE
- tmp_src2 := src2
- tmp_src1 := src1
- IF (IS_DENORMAL(src2) AND MXCSR.DAZ)
- tmp_src2 := 0
- FI
- IF (IS_DENORMAL(src1) AND MXCSR.DAZ)
- tmp_src1 := 0
- FI
- FI
- dst[31:0] := tmp_src1[31:0] * POW(2.0, FLOOR(tmp_src2[31:0]))
- RETURN dst[63:0]
-}
-dst[31:0] := SCALE(a[31:0], b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 32-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
-
-
-
- Scatter double-precision (64-bit) floating-point elements from "a" into memory using 64-bit indices. 64-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F
- Store
-
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 64-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
-
- Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle 128-bits (composed of 4 single-precision (32-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
-
- Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle 128-bits (composed of 2 double-precision (64-bit) floating-point elements) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
-
- Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Shuffle 128-bits (composed of 4 32-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
-
- Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-tmp_dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-tmp_dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-tmp_dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-tmp_dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F
- Swizzle
-
-
-
-
- Shuffle 128-bits (composed of 2 64-bit integers) selected by "imm8" from "a" and "b", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-dst[127:0] := SELECT4(a[511:0], imm8[1:0])
-dst[255:128] := SELECT4(a[511:0], imm8[3:2])
-dst[383:256] := SELECT4(b[511:0], imm8[5:4])
-dst[511:384] := SELECT4(b[511:0], imm8[7:6])
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
-tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
-tmp_dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
-tmp_dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
-tmp_dst[319:256] := (imm8[4] == 0) ? a[319:256] : a[383:320]
-tmp_dst[383:320] := (imm8[5] == 0) ? b[319:256] : b[383:320]
-tmp_dst[447:384] := (imm8[6] == 0) ? a[447:384] : a[511:448]
-tmp_dst[511:448] := (imm8[7] == 0) ? b[447:384] : b[511:448]
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-tmp_dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
-tmp_dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
-tmp_dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
-tmp_dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
-tmp_dst[319:256] := (imm8[4] == 0) ? a[319:256] : a[383:320]
-tmp_dst[383:320] := (imm8[5] == 0) ? b[319:256] : b[383:320]
-tmp_dst[447:384] := (imm8[6] == 0) ? a[447:384] : a[511:448]
-tmp_dst[511:448] := (imm8[7] == 0) ? b[447:384] : b[511:448]
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements within 128-bit lanes using the control in "imm8", and store the results in "dst".
-
-dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
-dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
-dst[191:128] := (imm8[2] == 0) ? a[191:128] : a[255:192]
-dst[255:192] := (imm8[3] == 0) ? b[191:128] : b[255:192]
-dst[319:256] := (imm8[4] == 0) ? a[319:256] : a[383:320]
-dst[383:320] := (imm8[5] == 0) ? b[319:256] : b[383:320]
-dst[447:384] := (imm8[6] == 0) ? a[447:384] : a[511:448]
-dst[511:448] := (imm8[7] == 0) ? b[447:384] : b[511:448]
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(b[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(b[255:128], imm8[7:6])
-tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
-tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
-tmp_dst[351:320] := SELECT4(b[383:256], imm8[5:4])
-tmp_dst[383:352] := SELECT4(b[383:256], imm8[7:6])
-tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
-tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
-tmp_dst[479:448] := SELECT4(b[511:384], imm8[5:4])
-tmp_dst[511:480] := SELECT4(b[511:384], imm8[7:6])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(b[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(b[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(b[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(b[255:128], imm8[7:6])
-tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
-tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
-tmp_dst[351:320] := SELECT4(b[383:256], imm8[5:4])
-tmp_dst[383:352] := SELECT4(b[383:256], imm8[7:6])
-tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
-tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
-tmp_dst[479:448] := SELECT4(b[511:384], imm8[5:4])
-tmp_dst[511:480] := SELECT4(b[511:384], imm8[7:6])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-dst[95:64] := SELECT4(b[127:0], imm8[5:4])
-dst[127:96] := SELECT4(b[127:0], imm8[7:6])
-dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-dst[223:192] := SELECT4(b[255:128], imm8[5:4])
-dst[255:224] := SELECT4(b[255:128], imm8[7:6])
-dst[287:256] := SELECT4(a[383:256], imm8[1:0])
-dst[319:288] := SELECT4(a[383:256], imm8[3:2])
-dst[351:320] := SELECT4(b[383:256], imm8[5:4])
-dst[383:352] := SELECT4(b[383:256], imm8[7:6])
-dst[415:384] := SELECT4(a[511:384], imm8[1:0])
-dst[447:416] := SELECT4(a[511:384], imm8[3:2])
-dst[479:448] := SELECT4(b[511:384], imm8[5:4])
-dst[511:480] := SELECT4(b[511:384], imm8[7:6])
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SQRT(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SQRT(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SQRT(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note].
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SQRT(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := SQRT(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- [round_note].
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := SQRT(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SQRT(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SQRT(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SQRT(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SQRT(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := SQRT(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- [round_note].
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := SQRT(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
-
- Compute the square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := SQRT(b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := SQRT(b[63:0])
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := SQRT(b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := SQRT(b[63:0])
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := SQRT(b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
-
- Compute the square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := SQRT(b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := SQRT(b[31:0])
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := SQRT(b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := SQRT(b[31:0])
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the square root of the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := SQRT(b[31:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Subtract the lower double-precision (64-bit) floating-point element in "b" from the lower double-precision (64-bit) floating-point element in "a", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := a[63:0] - b[63:0]
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract the lower double-precision (64-bit) floating-point element in "b" from the lower double-precision (64-bit) floating-point element in "a", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := a[63:0] - b[63:0]
-ELSE
- dst[63:0] := src[63:0]
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract the lower double-precision (64-bit) floating-point element in "b" from the lower double-precision (64-bit) floating-point element in "a", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-IF k[0]
- dst[63:0] := a[63:0] - b[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Subtract the lower double-precision (64-bit) floating-point element in "b" from the lower double-precision (64-bit) floating-point element in "a", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper element from "a" to the upper element of "dst".
-
-IF k[0]
- dst[63:0] := a[63:0] - b[63:0]
-ELSE
- dst[63:0] := 0
-FI
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Subtract the lower double-precision (64-bit) floating-point element in "b" from the lower double-precision (64-bit) floating-point element in "a", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := a[63:0] - b[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Subtract the lower single-precision (32-bit) floating-point element in "b" from the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := a[31:0] - b[31:0]
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract the lower single-precision (32-bit) floating-point element in "b" from the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst" using writemask "k" (the element is copied from "src" when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := a[31:0] - b[31:0]
-ELSE
- dst[31:0] := src[31:0]
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
-
- Subtract the lower single-precision (32-bit) floating-point element in "b" from the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-IF k[0]
- dst[31:0] := a[31:0] - b[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Subtract the lower single-precision (32-bit) floating-point element in "b" from the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set), and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-IF k[0]
- dst[31:0] := a[31:0] - b[31:0]
-ELSE
- dst[31:0] := 0
-FI
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Arithmetic
-
-
-
-
- Subtract the lower single-precision (32-bit) floating-point element in "b" from the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := a[31:0] - b[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_QWORDS(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_HIGH_QWORDS(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_HIGH_QWORDS(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the high half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_HIGH_DWORDS(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_HIGH_DWORDS(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_HIGH_DWORDS(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := tmp_dst[i+63:i]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_QWORDS(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_QWORDS(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_QWORDS(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-tmp_dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-tmp_dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-tmp_dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
-tmp_dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Swizzle
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the low half of each 128-bit lane in "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-dst[255:128] := INTERLEAVE_DWORDS(a[255:128], b[255:128])
-dst[383:256] := INTERLEAVE_DWORDS(a[383:256], b[383:256])
-dst[511:384] := INTERLEAVE_DWORDS(a[511:384], b[511:384])
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m128d to type __m512d; the upper 384 bits of the result are undefined.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m256d to type __m512d; the upper 256 bits of the result are undefined.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m512d to type __m128d.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m512 to type __m128.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m512d to type __m256d.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m128 to type __m512; the upper 384 bits of the result are undefined.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m256 to type __m512; the upper 256 bits of the result are undefined.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m512 to type __m256.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Integer
- AVX512F
- Cast
-
-
- Cast vector of type __m128i to type __m512i; the upper 384 bits of the result are undefined.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Integer
- AVX512F
- Cast
-
-
- Cast vector of type __m256i to type __m512i; the upper 256 bits of the result are undefined.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Integer
- AVX512F
- Cast
-
-
- Cast vector of type __m512i to type __m128i.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Integer
- AVX512F
- Cast
-
-
- Cast vector of type __m512i to type __m256i.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m128d to type __m512d; the upper 384 bits of the result are zeroed. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m128 to type __m512; the upper 384 bits of the result are zeroed. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Integer
- AVX512F
- Cast
-
-
- Cast vector of type __m128i to type __m512i; the upper 384 bits of the result are zeroed. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m256d to type __m512d; the upper 256 bits of the result are zeroed. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Cast
-
-
- Cast vector of type __m256 to type __m512; the upper 256 bits of the result are zeroed. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Integer
- AVX512F
- Cast
-
-
- Cast vector of type __m256i to type __m512i; the upper 256 bits of the result are zeroed. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F
- Set
-
-
- Broadcast double-precision (64-bit) floating-point value "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Set
-
-
- Broadcast single-precision (32-bit) floating-point value "a" to all elements of "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
-
- Set packed 32-bit integers in "dst" with the repeated 4 element sequence.
-
-dst[31:0] := a
-dst[63:32] := b
-dst[95:64] := c
-dst[127:96] := d
-dst[159:128] := a
-dst[191:160] := b
-dst[223:192] := c
-dst[255:224] := d
-dst[287:256] := a
-dst[319:288] := b
-dst[351:320] := c
-dst[383:352] := d
-dst[415:384] := a
-dst[447:416] := b
-dst[479:448] := c
-dst[511:480] := d
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
-
- Set packed 64-bit integers in "dst" with the repeated 4 element sequence.
-
-dst[63:0] := a
-dst[127:64] := b
-dst[191:128] := c
-dst[255:192] := d
-dst[319:256] := a
-dst[383:320] := b
-dst[447:384] := c
-dst[511:448] := d
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Set
-
-
-
-
-
- Set packed double-precision (64-bit) floating-point elements in "dst" with the repeated 4 element sequence.
-
-dst[63:0] := a
-dst[127:64] := b
-dst[191:128] := c
-dst[255:192] := d
-dst[319:256] := a
-dst[383:320] := b
-dst[447:384] := c
-dst[511:448] := d
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Set
-
-
-
-
-
- Set packed single-precision (32-bit) floating-point elements in "dst" with the repeated 4 element sequence.
-
-dst[31:0] := a
-dst[63:32] := b
-dst[95:64] := c
-dst[127:96] := d
-dst[159:128] := a
-dst[191:160] := b
-dst[223:192] := c
-dst[255:224] := d
-dst[287:256] := a
-dst[319:288] := b
-dst[351:320] := c
-dst[383:352] := d
-dst[415:384] := a
-dst[447:416] := b
-dst[479:448] := c
-dst[511:480] := d
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed 8-bit integers in "dst" with the supplied values.
-
-dst[7:0] := e0
-dst[15:8] := e1
-dst[23:16] := e2
-dst[31:24] := e3
-dst[39:32] := e4
-dst[47:40] := e5
-dst[55:48] := e6
-dst[63:56] := e7
-dst[71:64] := e8
-dst[79:72] := e9
-dst[87:80] := e10
-dst[95:88] := e11
-dst[103:96] := e12
-dst[111:104] := e13
-dst[119:112] := e14
-dst[127:120] := e15
-dst[135:128] := e16
-dst[143:136] := e17
-dst[151:144] := e18
-dst[159:152] := e19
-dst[167:160] := e20
-dst[175:168] := e21
-dst[183:176] := e22
-dst[191:184] := e23
-dst[199:192] := e24
-dst[207:200] := e25
-dst[215:208] := e26
-dst[223:216] := e27
-dst[231:224] := e28
-dst[239:232] := e29
-dst[247:240] := e30
-dst[255:248] := e31
-dst[263:256] := e32
-dst[271:264] := e33
-dst[279:272] := e34
-dst[287:280] := e35
-dst[295:288] := e36
-dst[303:296] := e37
-dst[311:304] := e38
-dst[319:312] := e39
-dst[327:320] := e40
-dst[335:328] := e41
-dst[343:336] := e42
-dst[351:344] := e43
-dst[359:352] := e44
-dst[367:360] := e45
-dst[375:368] := e46
-dst[383:376] := e47
-dst[391:384] := e48
-dst[399:392] := e49
-dst[407:400] := e50
-dst[415:408] := e51
-dst[423:416] := e52
-dst[431:424] := e53
-dst[439:432] := e54
-dst[447:440] := e55
-dst[455:448] := e56
-dst[463:456] := e57
-dst[471:464] := e58
-dst[479:472] := e59
-dst[487:480] := e60
-dst[495:488] := e61
-dst[503:496] := e62
-dst[511:504] := e63
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed 16-bit integers in "dst" with the supplied values.
-
-dst[15:0] := e0
-dst[31:16] := e1
-dst[47:32] := e2
-dst[63:48] := e3
-dst[79:64] := e4
-dst[95:80] := e5
-dst[111:96] := e6
-dst[127:112] := e7
-dst[143:128] := e8
-dst[159:144] := e9
-dst[175:160] := e10
-dst[191:176] := e11
-dst[207:192] := e12
-dst[223:208] := e13
-dst[239:224] := e14
-dst[255:240] := e15
-dst[271:256] := e16
-dst[287:272] := e17
-dst[303:288] := e18
-dst[319:304] := e19
-dst[335:320] := e20
-dst[351:336] := e21
-dst[367:352] := e22
-dst[383:368] := e23
-dst[399:384] := e24
-dst[415:400] := e25
-dst[431:416] := e26
-dst[447:432] := e27
-dst[463:448] := e28
-dst[479:464] := e29
-dst[495:480] := e30
-dst[511:496] := e31
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed 32-bit integers in "dst" with the supplied values.
-
-dst[31:0] := e0
-dst[63:32] := e1
-dst[95:64] := e2
-dst[127:96] := e3
-dst[159:128] := e4
-dst[191:160] := e5
-dst[223:192] := e6
-dst[255:224] := e7
-dst[287:256] := e8
-dst[319:288] := e9
-dst[351:320] := e10
-dst[383:352] := e11
-dst[415:384] := e12
-dst[447:416] := e13
-dst[479:448] := e14
-dst[511:480] := e15
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
-
-
-
-
-
- Set packed 64-bit integers in "dst" with the supplied values.
-
-dst[63:0] := e0
-dst[127:64] := e1
-dst[191:128] := e2
-dst[255:192] := e3
-dst[319:256] := e4
-dst[383:320] := e5
-dst[447:384] := e6
-dst[511:448] := e7
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Set
-
-
-
-
-
-
-
-
-
- Set packed double-precision (64-bit) floating-point elements in "dst" with the supplied values.
-
-dst[63:0] := e0
-dst[127:64] := e1
-dst[191:128] := e2
-dst[255:192] := e3
-dst[319:256] := e4
-dst[383:320] := e5
-dst[447:384] := e6
-dst[511:448] := e7
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed single-precision (32-bit) floating-point elements in "dst" with the supplied values.
-
-dst[31:0] := e0
-dst[63:32] := e1
-dst[95:64] := e2
-dst[127:96] := e3
-dst[159:128] := e4
-dst[191:160] := e5
-dst[223:192] := e6
-dst[255:224] := e7
-dst[287:256] := e8
-dst[319:288] := e9
-dst[351:320] := e10
-dst[383:352] := e11
-dst[415:384] := e12
-dst[447:416] := e13
-dst[479:448] := e14
-dst[511:480] := e15
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
-
- Set packed 32-bit integers in "dst" with the repeated 4 element sequence in reverse order.
-
-dst[31:0] := d
-dst[63:32] := c
-dst[95:64] := b
-dst[127:96] := a
-dst[159:128] := d
-dst[191:160] := c
-dst[223:192] := b
-dst[255:224] := a
-dst[287:256] := d
-dst[319:288] := c
-dst[351:320] := b
-dst[383:352] := a
-dst[415:384] := d
-dst[447:416] := c
-dst[479:448] := b
-dst[511:480] := a
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
-
- Set packed 64-bit integers in "dst" with the repeated 4 element sequence in reverse order.
-
-dst[63:0] := d
-dst[127:64] := c
-dst[191:128] := b
-dst[255:192] := a
-dst[319:256] := d
-dst[383:320] := c
-dst[447:384] := b
-dst[511:448] := a
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Set
-
-
-
-
-
- Set packed double-precision (64-bit) floating-point elements in "dst" with the repeated 4 element sequence in reverse order.
-
-dst[63:0] := d
-dst[127:64] := c
-dst[191:128] := b
-dst[255:192] := a
-dst[319:256] := d
-dst[383:320] := c
-dst[447:384] := b
-dst[511:448] := a
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Set
-
-
-
-
-
- Set packed single-precision (32-bit) floating-point elements in "dst" with the repeated 4 element sequence in reverse order.
-
-dst[31:0] := d
-dst[63:32] := c
-dst[95:64] := b
-dst[127:96] := a
-dst[159:128] := d
-dst[191:160] := c
-dst[223:192] := b
-dst[255:224] := a
-dst[287:256] := d
-dst[319:288] := c
-dst[351:320] := b
-dst[383:352] := a
-dst[415:384] := d
-dst[447:416] := c
-dst[479:448] := b
-dst[511:480] := a
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed 32-bit integers in "dst" with the supplied values in reverse order.
-
-dst[31:0] := e15
-dst[63:32] := e14
-dst[95:64] := e13
-dst[127:96] := e12
-dst[159:128] := e11
-dst[191:160] := e10
-dst[223:192] := e9
-dst[255:224] := e8
-dst[287:256] := e7
-dst[319:288] := e6
-dst[351:320] := e5
-dst[383:352] := e4
-dst[415:384] := e3
-dst[447:416] := e2
-dst[479:448] := e1
-dst[511:480] := e0
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Set
-
-
-
-
-
-
-
-
-
- Set packed 64-bit integers in "dst" with the supplied values in reverse order.
-
-dst[63:0] := e7
-dst[127:64] := e6
-dst[191:128] := e5
-dst[255:192] := e4
-dst[319:256] := e3
-dst[383:320] := e2
-dst[447:384] := e1
-dst[511:448] := e0
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Set
-
-
-
-
-
-
-
-
-
- Set packed double-precision (64-bit) floating-point elements in "dst" with the supplied values in reverse order.
-
-dst[63:0] := e7
-dst[127:64] := e6
-dst[191:128] := e5
-dst[255:192] := e4
-dst[319:256] := e3
-dst[383:320] := e2
-dst[447:384] := e1
-dst[511:448] := e0
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed single-precision (32-bit) floating-point elements in "dst" with the supplied values in reverse order.
-
-dst[31:0] := e15
-dst[63:32] := e14
-dst[95:64] := e13
-dst[127:96] := e12
-dst[159:128] := e11
-dst[191:160] := e10
-dst[223:192] := e9
-dst[255:224] := e8
-dst[287:256] := e7
-dst[319:288] := e6
-dst[351:320] := e5
-dst[383:352] := e4
-dst[415:384] := e3
-dst[447:416] := e2
-dst[479:448] := e1
-dst[511:480] := e0
-dst[MAX:512] := 0
-
-
-
-
- AVX512F
- Set
-
-
- Return vector of type __m512 with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- Integer
- AVX512F
- Set
-
- Return vector of type __m512i with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Set
-
- Return vector of type __m512d with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- Floating Point
- AVX512F
- Set
-
- Return vector of type __m512 with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- Integer
- AVX512F
- Set
-
- Return vector of type __m512i with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- AVX512F
- General Support
-
-
- Return vector of type __m512 with undefined elements.
-
-
-
- Integer
- AVX512F
- General Support
-
- Return vector of type __m512i with undefined elements.
-
-
-
- Floating Point
- AVX512F
- General Support
-
- Return vector of type __m512d with undefined elements.
-
-
-
- Floating Point
- AVX512F
- General Support
-
- Return vector of type __m512 with undefined elements.
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ACOS(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ACOS(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ACOS(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ACOS(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse hyperbolic cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ACOSH(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse hyperbolic cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ACOSH(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse hyperbolic cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ACOSH(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse hyperbolic cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ACOSH(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ASIN(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ASIN(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ASIN(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ASIN(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse hyperbolic sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ASINH(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse hyperbolic sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ASINH(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse hyperbolic sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ASINH(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse hyperbolic sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ASINH(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
- Compute the inverse tangent of packed double-precision (64-bit) floating-point elements in "a" divided by packed elements in "b", and store the results in "dst" expressed in radians.
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ATAN2(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
-
- Compute the inverse tangent of packed double-precision (64-bit) floating-point elements in "a" divided by packed elements in "b", and store the results in "dst" expressed in radians using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ATAN2(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
- Compute the inverse tangent of packed single-precision (32-bit) floating-point elements in "a" divided by packed elements in "b", and store the results in "dst" expressed in radians.
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ATAN2(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
-
- Compute the inverse tangent of packed single-precision (32-bit) floating-point elements in "a" divided by packed elements in "b", and store the results in "dst" expressed in radians using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ATAN2(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse tangent of packed double-precision (64-bit) floating-point elements in "a" and store the results in "dst" expressed in radians.
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ATAN(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse tangent of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" expressed in radians using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ATAN(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse tangent of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" expressed in radians.
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ATAN(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ATAN(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse hyperbolic tangent of packed double-precision (64-bit) floating-point elements in "a" and store the results in "dst" expressed in radians.
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ATANH(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse hyperbolic tangent of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" expressed in radians using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ATANH(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the inverse hyperbolic tangent of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" expressed in radians.
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ATANH(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the inverse hyperbolic tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ATANH(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the cube root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := CubeRoot(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the cube root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := CubeRoot(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the cube root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := CubeRoot(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the cube root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := CubeRoot(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the cumulative distribution function of packed double-precision (64-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := CDFNormal(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the cumulative distribution function of packed double-precision (64-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := CDFNormal(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the cumulative distribution function of packed single-precision (32-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := CDFNormal(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the cumulative distribution function of packed single-precision (32-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := CDFNormal(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the inverse cumulative distribution function of packed double-precision (64-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := InverseCDFNormal(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the inverse cumulative distribution function of packed double-precision (64-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := InverseCDFNormal(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the inverse cumulative distribution function of packed single-precision (32-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := InverseCDFNormal(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the inverse cumulative distribution function of packed single-precision (32-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := InverseCDFNormal(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" up to an integer value, and store the results as packed double-precision floating-point elements in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := CEIL(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" up to an integer value, and store the results as packed double-precision floating-point elements in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := CEIL(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" up to an integer value, and store the results as packed single-precision floating-point elements in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := CEIL(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" up to an integer value, and store the results as packed single-precision floating-point elements in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := CEIL(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := COS(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := COS(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := COS(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := COS(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := COSD(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := COSD(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := COSD(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := COSD(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the hyperbolic cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := COSH(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the hyperbolic cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := COSH(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the hyperbolic cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := COSH(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the hyperbolic cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := COSH(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ERF(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ERF(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the complementary error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := 1.0 - ERF(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the complementary error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := 1.0 - ERF(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ERF(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ERF(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the complementary error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+63:i] := 1.0 - ERF(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the complementary error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+63:i] := 1.0 - ERF(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the inverse error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := 1.0 / ERF(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the inverse error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := 1.0 / ERF(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the inverse error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+63:i] := 1.0 / ERF(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the inverse error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+63:i] := 1.0 / ERF(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the inverse complementary error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+63:i]))
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the inverse complementary error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+63:i]))
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
- Compute the inverse complementary error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+31:i]))
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Probability/Statistics
-
-
-
-
- Compute the inverse complementary error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+31:i]))
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the exponential value of 10 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := POW(10.0, a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the exponential value of 10 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := POW(10.0, a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the exponential value of 10 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := POW(FP32(10.0), a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the exponential value of 10 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := POW(FP32(10.0), a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the exponential value of 2 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := POW(2.0, a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the exponential value of 2 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := POW(2.0, a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the exponential value of 2 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the exponential value of 2 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := POW(e, a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the exponential value of "e" raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := POW(e, a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := POW(FP32(e), a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the exponential value of "e" raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := POW(FP32(e), a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed double-precision (64-bit) floating-point elements in "a", subtract one from each element, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := POW(e, a[i+63:i]) - 1.0
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the exponential value of "e" raised to the power of packed double-precision (64-bit) floating-point elements in "a", subtract one from each element, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := POW(e, a[i+63:i]) - 1.0
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed single-precision (32-bit) floating-point elements in "a", subtract one from each element, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := POW(FP32(e), a[i+31:i]) - 1.0
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the exponential value of "e" raised to the power of packed single-precision (32-bit) floating-point elements in "a", subtract one from each element, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := POW(FP32(e), a[i+31:i]) - 1.0
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" down to an integer value, and store the results as packed double-precision floating-point elements in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := FLOOR(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" down to an integer value, and store the results as packed double-precision floating-point elements in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := FLOOR(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" down to an integer value, and store the results as packed single-precision floating-point elements in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := FLOOR(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" down to an integer value, and store the results as packed single-precision floating-point elements in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := FLOOR(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the length of the hypotenous of a right triangle, with the lengths of the other two sides of the triangle stored as packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := SQRT(POW(a[i+63:i], 2.0) + POW(b[i+63:i], 2.0))
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the length of the hypotenous of a right triangle, with the lengths of the other two sides of the triangle stored as packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SQRT(POW(a[i+63:i], 2.0) + POW(b[i+63:i], 2.0))
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the length of the hypotenous of a right triangle, with the lengths of the other two sides of the triangle stored as packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := SQRT(POW(a[i+31:i], 2.0) + POW(b[i+31:i], 2.0))
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the length of the hypotenous of a right triangle, with the lengths of the other two sides of the triangle stored as packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SQRT(POW(a[i+31:i], 2.0) + POW(b[i+31:i], 2.0))
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed signed 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- IF b[i+31:i] == 0
- #DE
- FI
- dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed signed 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- IF b[i+31:i] == 0
+ FI
+ ENDFOR
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift 64-bit integer "a" right by "count" while shifting in zeros, and store
+ the result in "dst".
+
+ IF count[63:0] > 63
+ dst[63:0] := 0
+ ELSE
+ dst[63:0] := ZeroExtend64(a[63:0] >> count[63:0])
+ FI
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Shift 64-bit integer "a" right by "imm8" while shifting in zeros, and store the
+ result in "dst".
+
+ IF imm8[7:0] > 63
+ dst[63:0] := 0
+ ELSE
+ dst[63:0] := ZeroExtend64(a[63:0] >> imm8[7:0])
+ FI
+
+
+ MMX
+
+ Shift
+
+
+
+
+
+ Compute the bitwise AND of 64 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[63:0] := (a[63:0] AND b[63:0])
+
+
+ MMX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of 64 bits (representing integer data) in "a" and then
+ AND with "b", and store the result in "dst".
+
+ dst[63:0] := ((NOT a[63:0]) AND b[63:0])
+
+
+ MMX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of 64 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[63:0] := (a[63:0] OR b[63:0])
+
+
+ MMX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of 64 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[63:0] := (a[63:0] XOR b[63:0])
+
+
+ MMX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 64 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[63:0] := (a[63:0] AND b[63:0])
+
+
+ MMX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of 64 bits (representing integer data) in "a" and then
+ AND with "b", and store the result in "dst".
+
+ dst[63:0] := ((NOT a[63:0]) AND b[63:0])
+
+
+ MMX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of 64 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[63:0] := (a[63:0] OR b[63:0])
+
+
+ MMX
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of 64 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[63:0] := (a[63:0] XOR b[63:0])
+
+
+ MMX
+
+ Logical
+
+
+
+
+
+ Compare packed 8-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := ( a[i+7:i] == b[i+7:i] ) ? 0xFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+
+ Compare packed 16-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := ( a[i+15:i] == b[i+15:i] ) ? 0xFFFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+
+ Compare packed 32-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+
+ Compare packed 8-bit integers in "a" and "b" for greater-than, and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := ( a[i+7:i] > b[i+7:i] ) ? 0xFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+
+ Compare packed 16-bit integers in "a" and "b" for greater-than, and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := ( a[i+15:i] > b[i+15:i] ) ? 0xFFFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+
+ Compare packed 32-bit integers in "a" and "b" for greater-than, and store the
+ results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] > b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+
+ Compare packed 8-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := ( a[i+7:i] == b[i+7:i] ) ? 0xFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+
+ Compare packed 16-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := ( a[i+15:i] == b[i+15:i] ) ? 0xFFFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+
+ Compare packed 32-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := ( a[i+7:i] > b[i+7:i] ) ? 0xFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than, and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := ( a[i+15:i] > b[i+15:i] ) ? 0xFFFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than, and
+ store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] > b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ MMX
+
+ Compare
+
+
+
+
+ Return vector of type __m64 with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ MMX
+
+ Set
+
+
+
+
+
+ Set packed 32-bit integers in "dst" with the supplied values.
+
+ dst[31:0] := e0
+ dst[63:32] := e1
+
+ MMX
+
+ Set
+
+
+
+
+
+
+
+ Set packed 16-bit integers in "dst" with the supplied values.
+
+ dst[15:0] := e0
+ dst[31:16] := e1
+ dst[47:32] := e2
+ dst[63:48] := e3
+
+ MMX
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 8-bit integers in "dst" with the supplied values.
+
+ dst[7:0] := e0
+ dst[15:8] := e1
+ dst[23:16] := e2
+ dst[31:24] := e3
+ dst[39:32] := e4
+ dst[47:40] := e5
+ dst[55:48] := e6
+ dst[63:56] := e7
+
+ MMX
+
+ Set
+
+
+
+
+ Broadcast 32-bit integer "a" to all elements of "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+
+ MMX
+
+ Set
+
+
+
+
+ Broadcast 16-bit integer "a" to all all elements of "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := a[15:0]
+ ENDFOR
+
+ MMX
+
+ Set
+
+
+
+
+ Broadcast 8-bit integer "a" to all elements of "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := a[7:0]
+ ENDFOR
+
+ MMX
+
+ Set
+
+
+
+
+
+ Set packed 32-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[31:0] := e1
+ dst[63:32] := e0
+
+ MMX
+
+ Set
+
+
+
+
+
+
+
+ Set packed 16-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[15:0] := e3
+ dst[31:16] := e2
+ dst[47:32] := e1
+ dst[63:48] := e0
+
+ MMX
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 8-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[7:0] := e7
+ dst[15:8] := e6
+ dst[23:16] := e5
+ dst[31:24] := e4
+ dst[39:32] := e3
+ dst[47:40] := e2
+ dst[55:48] := e1
+ dst[63:56] := e0
+
+ MMX
+
+ Set
+
+
+
+
+
+
+
+
+ Arm address monitoring hardware using the address specified in "p". A store to
+ an address within the specified address range triggers the monitoring hardware. Specify
+ optional extensions in "extensions", and optional hints in "hints".
+
+ MONITOR
+
+ General Support
+
+
+
+
+
+ Hint to the processor that it can enter an implementation-dependent-optimized
+ state while waiting for an event or store operation to the address range specified by
+ MONITOR.
+
+ MONITOR
+
+ General Support
+
+
+
+
+
+
+ Load 16 bits from memory, perform a byte swap operation, and store the result
+ in "dst".
+
+ FOR j := 0 to 1
+ i := j*8
+ dst[i+7:i] := MEM[ptr+15-i:ptr+8-i]
+ ENDFOR
+
+
+ MOVBE
+
+ Load
+
+
+
+
+ Load 32 bits from memory, perform a byte swap operation, and store the result
+ in "dst".
+
+ FOR j := 0 to 3
+ i := j*8
+ dst[i+7:i] := MEM[ptr+31-i:ptr+24-i]
+ ENDFOR
+
+
+ MOVBE
+
+ Load
+
+
+
+
+ Load 64 bits from memory, perform a byte swap operation, and store the result
+ in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := MEM[ptr+63-i:ptr+56-i]
+ ENDFOR
+
+
+ MOVBE
+
+ Load
+
+
+
+
+
+ Perform a bit swap operation of the 16 bits in "data", and store the results to
+ memory.
+
+ FOR j := 0 to 1
+ i := j*8
+ MEM[ptr+i+7:ptr+i] := data[15-i:8-i]
+ ENDFOR
+
+
+ MOVBE
+
+ Store
+
+
+
+
+
+ Perform a bit swap operation of the 32 bits in "data", and store the results to
+ memory.
+
+ addr := MEM[ptr]
+ FOR j := 0 to 3
+ i := j*8
+ MEM[ptr+i+7:ptr+i] := data[31-i:24-i]
+ ENDFOR
+
+
+ MOVBE
+
+ Store
+
+
+
+
+
+ Perform a bit swap operation of the 64 bits in "data", and store the results to
+ memory.
+
+ addr := MEM[ptr]
+ FOR j := 0 to 7
+ i := j*8
+ MEM[ptr+i+7:ptr+i] := data[63-i:56-i]
+ ENDFOR
+
+
+ MOVBE
+
+ Store
+
+
+
+
+
+
+
+ Move 64-byte (512-bit) value using direct store from source memory address
+ "src" to destination memory address "dst".
+
+ MEM[dst+511:dst] := MEM[src+511:src]
+
+
+ MOVDIR64B
+
+ Store
+
+
+
+
+
+
+
+ Store 64-bit integer from "val" into memory using direct store.
+
+ MEM[dst+63:dst] := val[63:0]
+
+
+ MOVDIRI
+
+ Store
+
+
+
+
+
+ Store 32-bit integer from "val" into memory using direct store.
+
+ MEM[dst+31:dst] := val[31:0]
+
+
+ MOVDIRI
+
+ Store
+
+
+
+
+
+
+
+ Make a pointer with the value of "srcmem" and bounds set to ["srcmem", "srcmem"
+ + "size" - 1], and store the result in "dst".
+ dst := srcmem
+ dst.LB := srcmem.LB
+ dst.UB := srcmem + size - 1
+
+
+ MPX
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Narrow the bounds for pointer "q" to the intersection of the bounds of "r" and
+ the bounds ["q", "q" + "size" - 1], and store the result in "dst".
+ dst := q
+ IF r.LB > (q + size - 1) OR r.UB < q
+ dst.LB := 1
+ dst.UB := 0
+ ELSE
+ dst.LB := MAX(r.LB, q)
+ dst.UB := MIN(r.UB, (q + size - 1))
+ FI
+
+ MPX
+
+ Miscellaneous
+
+
+
+
+
+
+ Make a pointer with the value of "q" and bounds set to the bounds of "r" (e.g.
+ copy the bounds of "r" to pointer "q"), and store the result in "dst".
+ dst := q
+ dst.LB := r.LB
+ dst.UB := r.UB
+
+ MPX
+
+ Miscellaneous
+
+
+
+
+
+ Make a pointer with the value of "q" and open bounds, which allow the pointer
+ to access the entire virtual address space, and store the result in "dst".
+ dst := q
+ dst.LB := 0
+ dst.UB := 0
+
+ MPX
+
+ Miscellaneous
+
+
+
+
+
+
+ Stores the bounds of "ptr_val" pointer in memory at address "ptr_addr".
+ MEM[ptr_addr].LB := ptr_val.LB
+ MEM[ptr_addr].UB := ptr_val.UB
+
+
+ MPX
+
+ Miscellaneous
+
+
+
+
+
+ Checks if "q" is within its lower bound, and throws a #BR if not.
+ IF q < q.LB
+ #BR
+ FI
+
+
+ MPX
+
+ Miscellaneous
+
+
+
+
+
+ Checks if "q" is within its upper bound, and throws a #BR if not.
+ IF q > q.UB
+ #BR
+ FI
+
+
+
+ MPX
+
+ Miscellaneous
+
+
+
+
+
+
+ Checks if ["q", "q" + "size" - 1] is within the lower and upper bounds of "q"
+ and throws a #BR if not.
+ IF (q + size - 1) < q.LB OR (q + size - 1) > q.UB
+ #BR
+ FI
+
+
+
+ MPX
+
+ Miscellaneous
+
+
+
+
+
+ Return the lower bound of "q".
+ dst := q.LB
+
+ MPX
+
+ Miscellaneous
+
+
+
+
+
+ Return the upper bound of "q".
+ dst := q.UB
+
+ MPX
+
+ Miscellaneous
+
+
+
+
+
+
+ Set "dst" to the index of the lowest set bit in 32-bit integer "a". If no bits
+ are set in "a" then "dst" is undefined.
+
+ tmp := 0
+ IF a == 0
+ // dst is undefined
+ ELSE
+ DO WHILE ((tmp < 32) AND a[tmp] == 0)
+ tmp := tmp + 1
+ OD
+ FI
+ dst := tmp
+
+
+
+ Bit Manipulation
+
+
+
+
+ Set "dst" to the index of the highest set bit in 32-bit integer "a". If no bits
+ are set in "a" then "dst" is undefined.
+
+ tmp := 31
+ IF a == 0
+ // dst is undefined
+ ELSE
+ DO WHILE ((tmp > 0) AND a[tmp] == 0)
+ tmp := tmp - 1
+ OD
+ FI
+ dst := tmp
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Set "index" to the index of the lowest set bit in 32-bit integer "mask". If no
+ bits are set in "a", then "index" is undefined and "dst" is set to 0, otherwise "dst" is
+ set to 1.
+
+ tmp := 0
+ IF a == 0
+ // MEM[index+31:index] is undefined
+ dst := 0
+ ELSE
+ DO WHILE ((tmp < 32) AND a[tmp] == 0)
+ tmp := tmp + 1
+ OD
+ MEM[index+31:index] := tmp
+ dst := (tmp == 31) ? 0 : 1
+ FI
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Set "index" to the index of the highest set bit in 32-bit integer "mask". If no
+ bits are set in "a", then "index" is undefined and "dst" is set to 0, otherwise "dst" is
+ set to 1.
+
+ tmp := 31
+ IF a == 0
+ // MEM[index+31:index] is undefined
+ dst := 0
+ ELSE
+ DO WHILE ((tmp > 0) AND a[tmp] == 0)
+ tmp := tmp - 1
+ OD
+ MEM[index+31:index] := tmp
+ dst := (tmp == 0) ? 0 : 1
+ FI
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Set "index" to the index of the lowest set bit in 32-bit integer "mask". If no
+ bits are set in "a", then "index" is undefined and "dst" is set to 0, otherwise "dst" is
+ set to 1.
+
+ tmp := 0
+ IF a == 0
+ // MEM[index+31:index] is undefined
+ dst := 0
+ ELSE
+ DO WHILE ((tmp < 64) AND a[tmp] == 0)
+ tmp := tmp + 1
+ OD
+ MEM[index+31:index] := tmp
+ dst := (tmp == 63) ? 0 : 1
+ FI
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Set "index" to the index of the highest set bit in 32-bit integer "mask". If no
+ bits are set in "a", then "index" is undefined and "dst" is set to 0, otherwise "dst" is
+ set to 1.
+
+ tmp := 63
+ IF a == 0
+ // MEM[index+31:index] is undefined
+ dst := 0
+ ELSE
+ DO WHILE ((tmp > 0) AND a[tmp] == 0)
+ tmp := tmp - 1
+ OD
+ MEM[index+31:index] := tmp
+ dst := (tmp == 0) ? 0 : 1
+ FI
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Return the bit at index "b" of 32-bit integer "a".
+
+ addr := a + ZeroExtend64(b)
+ dst[0] := MEM[addr]
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Return the bit at index "b" of 32-bit integer "a", and set that bit to its
+ complement.
+
+ addr := a + ZeroExtend64(b)
+ dst[0] := MEM[addr]
+ MEM[addr] := ~dst[0]
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Return the bit at index "b" of 32-bit integer "a", and set that bit to zero.
+
+ addr := a + ZeroExtend64(b)
+ dst[0] := MEM[addr]
+ MEM[addr] := 0
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Return the bit at index "b" of 32-bit integer "a", and set that bit to one.
+
+ addr := a + ZeroExtend64(b)
+ dst[0] := MEM[addr]
+ MEM[addr] := 1
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Return the bit at index "b" of 64-bit integer "a".
+
+ addr := a + b
+ dst[0] := MEM[addr]
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Return the bit at index "b" of 64-bit integer "a", and set that bit to its
+ complement.
+
+ addr := a + b
+ dst[0] := MEM[addr]
+ MEM[addr] := ~dst[0]
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Return the bit at index "b" of 64-bit integer "a", and set that bit to zero.
+
+ addr := a + b
+ dst[0] := MEM[addr]
+ MEM[addr] := 0
+
+
+
+ Bit Manipulation
+
+
+
+
+
+ Return the bit at index "b" of 64-bit integer "a", and set that bit to one.
+
+ addr := a + b
+ dst[0] := MEM[addr]
+ MEM[addr] := 1
+
+
+
+ Bit Manipulation
+
+
+
+
+ Reverse the byte order of 32-bit integer "a", and store the result in "dst".
+ This intrinsic is provided for conversion between little and big endian values.
+
+ dst[7:0] := a[31:24]
+ dst[15:8] := a[23:16]
+ dst[23:16] := a[15:8]
+ dst[31:24] := a[7:0]
+
+
+
+ Bit Manipulation
+
+
+
+
+ Reverse the byte order of 64-bit integer "a", and store the result in "dst".
+ This intrinsic is provided for conversion between little and big endian values.
+
+ dst[7:0] := a[63:56]
+ dst[15:8] := a[55:48]
+ dst[23:16] := a[47:40]
+ dst[31:24] := a[39:32]
+ dst[39:32] := a[31:24]
+ dst[47:40] := a[23:16]
+ dst[55:48] := a[15:8]
+ dst[63:56] := a[7:0]
+
+
+
+ Bit Manipulation
+
+
+
+
+ Cast from type float to type unsigned __int32 without conversion.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+
+ Cast
+
+
+
+
+ Cast from type double to type unsigned __int64 without conversion.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+
+ Cast
+
+
+
+
+ Cast from type unsigned __int32 to type float without conversion.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+
+ Cast
+
+
+
+
+ Cast from type unsigned __int64 to type double without conversion.
+ This intrinsic is only used for compilation and does not generate any instructions, thus
+ it has zero latency.
+
+ Cast
+
+
+
+
+
+ Shift the bits of unsigned long integer "a" left by the number of bits
+ specified in "shift", rotating the most-significant bit to the least-significant bit
+ location, and store the unsigned result in "dst".
+ // size := 32 or 64
+ dst := a
+ count := shift AND (size - 1)
+ DO WHILE (count > 0)
+ tmp[0] := dst[size - 1]
+ dst := (dst << 1) OR tmp[0]
+ count := count - 1
+ OD
+
+
+
+
+ Shift
+
+
+
+
+
+ Shift the bits of unsigned long integer "a" right by the number of bits
+ specified in "shift", rotating the least-significant bit to the most-significant bit
+ location, and store the unsigned result in "dst".
+ // size := 32 or 64
+ dst := a
+ count := shift AND (size - 1)
+ DO WHILE (count > 0)
+ tmp[size - 1] := dst[0]
+ dst := (dst >> 1) OR tmp[size - 1]
+ count := count - 1
+ OD
+
+
+
+ Shift
+
+
+
+
+
+ Shift the bits of unsigned 32-bit integer "a" left by the number of bits
+ specified in "shift", rotating the most-significant bit to the least-significant bit
+ location, and store the unsigned result in "dst".
+
+ dst := a
+ count := shift AND 31
+ DO WHILE (count > 0)
+ tmp[0] := dst[31]
+ dst := (dst << 1) OR tmp[0]
+ count := count - 1
+ OD
+
+
+
+ Shift
+
+
+
+
+
+ Shift the bits of unsigned 32-bit integer "a" right by the number of bits
+ specified in "shift", rotating the least-significant bit to the most-significant bit
+ location, and store the unsigned result in "dst".
+
+ dst := a
+ count := shift AND 31
+ DO WHILE (count > 0)
+ tmp[31] := dst[0]
+ dst := (dst >> 1) OR tmp
+ count := count - 1
+ OD
+
+
+
+ Shift
+
+
+
+
+
+ Shift the bits of unsigned 16-bit integer "a" left by the number of bits
+ specified in "shift", rotating the most-significant bit to the least-significant bit
+ location, and store the unsigned result in "dst".
+
+ dst := a
+ count := shift AND 15
+ DO WHILE (count > 0)
+ tmp[0] := dst[15]
+ dst := (dst << 1) OR tmp[0]
+ count := count - 1
+ OD
+
+
+
+ Shift
+
+
+
+
+
+ Shift the bits of unsigned 16-bit integer "a" right by the number of bits
+ specified in "shift", rotating the least-significant bit to the most-significant bit
+ location, and store the unsigned result in "dst".
+
+ dst := a
+ count := shift AND 15
+ DO WHILE (count > 0)
+ tmp[15] := dst[0]
+ dst := (dst >> 1) OR tmp
+ count := count - 1
+ OD
+
+
+
+ Shift
+
+
+
+
+
+ Shift the bits of unsigned 64-bit integer "a" left by the number of bits
+ specified in "shift", rotating the most-significant bit to the least-significant bit
+ location, and store the unsigned result in "dst".
+
+ dst := a
+ count := shift AND 63
+ DO WHILE (count > 0)
+ tmp[0] := dst[63]
+ dst := (dst << 1) OR tmp[0]
+ count := count - 1
+ OD
+
+
+
+ Shift
+
+
+
+
+
+ Shift the bits of unsigned 64-bit integer "a" right by the number of bits
+ specified in "shift", rotating the least-significant bit to the most-significant bit
+ location, and store the unsigned result in "dst".
+
+ dst := a
+ count := shift AND 63
+ DO WHILE (count > 0)
+ tmp[63] := dst[0]
+ dst := (dst >> 1) OR tmp[63]
+ count := count - 1
+ OD
+
+
+
+ Shift
+
+
+
+
+ Treat the processor-specific feature(s) specified in "a" as available. Multiple
+ features may be OR'd together. See the valid feature flags below:
+
+ _FEATURE_GENERIC_IA32
+ _FEATURE_FPU
+ _FEATURE_CMOV
+ _FEATURE_MMX
+ _FEATURE_FXSAVE
+ _FEATURE_SSE
+ _FEATURE_SSE2
+ _FEATURE_SSE3
+ _FEATURE_SSSE3
+ _FEATURE_SSE4_1
+ _FEATURE_SSE4_2
+ _FEATURE_MOVBE
+ _FEATURE_POPCNT
+ _FEATURE_PCLMULQDQ
+ _FEATURE_AES
+ _FEATURE_F16C
+ _FEATURE_AVX
+ _FEATURE_RDRND
+ _FEATURE_FMA
+ _FEATURE_BMI
+ _FEATURE_LZCNT
+ _FEATURE_HLE
+ _FEATURE_RTM
+ _FEATURE_AVX2
+ _FEATURE_KNCNI
+ _FEATURE_AVX512F
+ _FEATURE_ADX
+ _FEATURE_RDSEED
+ _FEATURE_AVX512ER
+ _FEATURE_AVX512PF
+ _FEATURE_AVX512CD
+ _FEATURE_SHA
+ _FEATURE_MPX
+ _FEATURE_AVX512BW
+ _FEATURE_AVX512VL
+ _FEATURE_AVX512VBMI
+ _FEATURE_AVX512_4FMAPS
+ _FEATURE_AVX512_4VNNIW
+ _FEATURE_AVX512_VPOPCNTDQ
+ _FEATURE_AVX512_BITALG
+ _FEATURE_AVX512_VBMI2
+ _FEATURE_GFNI
+ _FEATURE_VAES
+ _FEATURE_VPCLMULQDQ
+ _FEATURE_AVX512_VNNI
+ _FEATURE_CLWB
+ _FEATURE_RDPID
+ _FEATURE_IBT
+ _FEATURE_SHSTK
+ _FEATURE_SGX
+ _FEATURE_WBNOINVD
+ _FEATURE_PCONFIG
+ _FEATURE_AXV512_4VNNIB
+ _FEATURE_AXV512_4FMAPH
+ _FEATURE_AXV512_BITALG2
+ _FEATURE_AXV512_VP2INTERSECT
+
+
+ General Support
+
+
+
+
+ Dynamically query the processor to determine if the processor-specific
+ feature(s) specified in "a" are available, and return true or false (1 or 0) if the set
+ of features is available. Multiple features may be OR'd together. This function is
+ limited to bitmask values in the first 'page' of the libirc cpu-id information. This
+ intrinsic does not check the processor vendor. See the valid feature flags below:
+
+ _FEATURE_GENERIC_IA32
+ _FEATURE_FPU
+ _FEATURE_CMOV
+ _FEATURE_MMX
+ _FEATURE_FXSAVE
+ _FEATURE_SSE
+ _FEATURE_SSE2
+ _FEATURE_SSE3
+ _FEATURE_SSSE3
+ _FEATURE_SSE4_1
+ _FEATURE_SSE4_2
+ _FEATURE_MOVBE
+ _FEATURE_POPCNT
+ _FEATURE_PCLMULQDQ
+ _FEATURE_AES
+ _FEATURE_F16C
+ _FEATURE_AVX
+ _FEATURE_RDRND
+ _FEATURE_FMA
+ _FEATURE_BMI
+ _FEATURE_LZCNT
+ _FEATURE_HLE
+ _FEATURE_RTM
+ _FEATURE_AVX2
+ _FEATURE_KNCNI
+ _FEATURE_AVX512F
+ _FEATURE_ADX
+ _FEATURE_RDSEED
+ _FEATURE_AVX512ER
+ _FEATURE_AVX512PF
+ _FEATURE_AVX512CD
+ _FEATURE_SHA
+ _FEATURE_MPX
+ _FEATURE_AVX512BW
+ _FEATURE_AVX512VL
+ _FEATURE_AVX512VBMI
+ _FEATURE_AVX512_4FMAPS
+ _FEATURE_AVX512_4VNNIW
+ _FEATURE_AVX512_VPOPCNTDQ
+ _FEATURE_AVX512_BITALG
+ _FEATURE_AVX512_VBMI2
+ _FEATURE_GFNI
+ _FEATURE_VAES
+ _FEATURE_VPCLMULQDQ
+ _FEATURE_AVX512_VNNI
+ _FEATURE_CLWB
+ _FEATURE_RDPID
+ _FEATURE_IBT
+ _FEATURE_SHSTK
+ _FEATURE_SGX
+ _FEATURE_WBNOINVD
+ _FEATURE_PCONFIG
+ _FEATURE_AXV512_4VNNIB
+ _FEATURE_AXV512_4FMAPH
+ _FEATURE_AXV512_BITALG2
+ _FEATURE_AXV512_VP2INTERSECT
+ _FEATURE_AXV512_FP16
+
+
+ General Support
+
+
+
+
+
+ Dynamically query the processor to determine if the processor-specific
+ feature(s) specified in "a" are available, and return true or false (1 or 0) if the set
+ of features is available. Multiple features may be OR'd together. This works identically
+ to the previous variant, except it also accepts a 'page' index that permits checking
+ features on the 2nd page of the libirc information. When provided with a '0' in the
+ 'page' parameter, this works identically to _may_i_use_cpu_feature. This intrinsic does
+ not check the processor vendor. See the valid feature flags on the 2nd page below:
+ (provided with a '1' in the 'page' parameter)
+
+ _FEATURE_CLDEMOTE
+ _FEATURE_MOVDIRI
+ _FEATURE_MOVDIR64B
+ _FEATURE_WAITPKG
+ _FEATURE_AVX512_Bf16
+ _FEATURE_ENQCMD
+ _FEATURE_AVX_VNNI
+ _FEATURE_AMX_TILE
+ _FEATURE_AMX_INT8
+ _FEATURE_AMX_BF16
+ _FEATURE_KL
+ _FEATURE_WIDE_KL
+ _FEATURE_HRESET
+ _FEATURE_UINTR
+ _FEATURE_PREFETCHI
+ _FEATURE_AVXVNNIINT8
+ _FEATURE_CMPCCXADD
+ _FEATURE_AVXIFMA
+ _FEATURE_AVXNECONVERT
+ _FEATURE_RAOINT
+ _FEATURE_AMX_FP16
+ _FEATURE_AMX_COMPLEX
+ _FEATURE_SHA512
+ _FEATURE_SM3
+ _FEATURE_SM4
+ _FEATURE_AVXVNNIINT16
+ _FEATURE_USERMSR
+ _FEATURE_AVX10_1_256
+ _FEATURE_AVX10_1_512
+ _FEATURE_APXF
+ _FEATURE_MSRLIST
+ _FEATURE_WRMSRNS
+ _FEATURE_PBNDKB
+
+
+ General Support
+
+
+
+
+ Dynamically query the processor to determine if the processor-specific
+ feature(s) specified a series of compile-time string literals in "feature, ..." are
+ available, and return true or false (1 or 0) if the set of features is available. These
+ feature names are converted to a bitmask and uses the same infrastructure as
+ _may_i_use_cpu_feature_ext to validate it. The behavior is the same as the previous
+ variants. This intrinsic does not check the processor vendor. Example string literals
+ are "avx2", "bmi", "avx512fp16", ...
+
+
+
+ General Support
+
+
+
+
+ Read the Performance Monitor Counter (PMC) specified by "a", and store up to
+ 64-bits in "dst". The width of performance counters is implementation specific.
+ dst[63:0] := ReadPMC(a)
+
+
+
+ General Support
+
+
+
+
+
+
+
+ Add unsigned 32-bit integers "a" and "b" with unsigned 8-bit carry-in "c_in"
+ (carry flag), and store the unsigned 32-bit result in "out", and the carry-out in "dst"
+ (carry or overflow flag).
+
+ tmp[32:0] := a[31:0] + b[31:0] + (c_in > 0 ? 1 : 0)
+ MEM[out+31:out] := tmp[31:0]
+ dst[0] := tmp[32]
+ dst[7:1] := 0
+
+
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add unsigned 64-bit integers "a" and "b" with unsigned 8-bit carry-in "c_in"
+ (carry flag), and store the unsigned 64-bit result in "out", and the carry-out in "dst"
+ (carry or overflow flag).
+
+ tmp[64:0] := a[63:0] + b[63:0] + (c_in > 0 ? 1 : 0)
+ MEM[out+63:out] := tmp[63:0]
+ dst[0] := tmp[64]
+ dst[7:1] := 0
+
+
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add unsigned 8-bit borrow "c_in" (carry flag) to unsigned 32-bit integer "b",
+ and subtract the result from unsigned 32-bit integer "a". Store the unsigned 32-bit
+ result in "out", and the carry-out in "dst" (carry or overflow flag).
+
+ tmp[32:0] := a[31:0] - (b[31:0] + (c_in > 0 ? 1 : 0))
+ MEM[out+31:out] := tmp[31:0]
+ dst[0] := tmp[32]
+ dst[7:1] := 0
+
+
+
+ Arithmetic
+
+
+
+
+
+
+
+ Add unsigned 8-bit borrow "c_in" (carry flag) to unsigned 64-bit integer "b",
+ and subtract the result from unsigned 64-bit integer "a". Store the unsigned 64-bit
+ result in "out", and the carry-out in "dst" (carry or overflow flag).
+
+ tmp[64:0] := a[63:0] - (b[63:0] + (c_in > 0 ? 1 : 0))
+ MEM[out+63:out] := tmp[63:0]
+ dst[0] := tmp[64]
+ dst[7:1] := 0
+
+
+
+ Arithmetic
+
+
+
+
+ Insert the 32-bit data from "a" into a Processor Trace stream via a PTW packet.
+ The PTW packet will be inserted if tracing is currently enabled and ptwrite is currently
+ enabled. The current IP will also be inserted via a FUP packet if FUPonPTW is enabled.
+
+
+ Miscellaneous
+
+
+
+
+ Insert the 64-bit data from "a" into a Processor Trace stream via a PTW packet.
+ The PTW packet will be inserted if tracing is currently enabled and ptwrite is currently
+ enabled. The current IP will also be inserted via a FUP packet if FUPonPTW is enabled.
+
+
+ Miscellaneous
+
+
+
+
+
+ Invoke the Intel SGX enclave user (non-privilege) leaf function specified by
+ "a", and return the error code. The "__data" array contains 3 32- or 64-bit elements
+ that may act as input, output, or be unused, depending on the semantics of the specified
+ leaf function; these correspond to ebx, ecx, and edx.
+
+
+ Miscellaneous
+
+
+
+
+
+ Invoke the Intel SGX enclave system (privileged) leaf function specified by
+ "a", and return the error code. The "__data" array contains 3 32- or 64-bit elements
+ that may act as input, output, or be unused, depending on the semantics of the specified
+ leaf function; these correspond to ebx, ecx, and edx.
+
+
+ Miscellaneous
+
+
+
+
+
+ Invoke the Intel SGX enclave virtualized (VMM) leaf function specified by "a",
+ and return the error code. The "__data" array contains 3 32- or 64-bit elements that may
+ act as input, output, or be unused, depending on the semantics of the specified leaf
+ function; these correspond to ebx, ecx, and edx.
+
+
+ Miscellaneous
+
+
+
+
+ Write back and flush internal caches.
+ Initiate writing-back and flushing of external
+ caches.
+
+
+ Miscellaneous
+
+
+
+
+ Convert the half-precision (16-bit) floating-point value "a" to a
+ single-precision (32-bit) floating-point value, and store the result in "dst".
+
+ dst[31:0] := Convert_FP16_To_FP32(a[15:0])
+
+
+ Convert
+
+
+
+
+
+ Convert the single-precision (32-bit) floating-point value "a" to a
+ half-precision (16-bit) floating-point value, and store the result in "dst".
+ [round_note]
+
+ dst[15:0] := Convert_FP32_To_FP16(a[31:0])
+
+
+ Convert
+
+
+
+
+
+
+
+ Perform a carry-less multiplication of two 64-bit integers, selected from "a"
+ and "b" according to "imm8", and store the results in "dst".
+
+ IF (imm8[0] == 0)
+ TEMP1 := a[63:0]
+ ELSE
+ TEMP1 := a[127:64]
+ FI
+ IF (imm8[4] == 0)
+ TEMP2 := b[63:0]
+ ELSE
+ TEMP2 := b[127:64]
+ FI
+ FOR i := 0 to 63
+ TEMP[i] := (TEMP1[0] and TEMP2[i])
+ FOR j := 1 to i
+ TEMP[i] := TEMP[i] XOR (TEMP1[j] AND TEMP2[i-j])
+ ENDFOR
+ dst[i] := TEMP[i]
+ ENDFOR
+ FOR i := 64 to 127
+ TEMP[i] := 0
+ FOR j := (i - 63) to 63
+ TEMP[i] := TEMP[i] XOR (TEMP1[j] AND TEMP2[i-j])
+ ENDFOR
+ dst[i] := TEMP[i]
+ ENDFOR
+ dst[127] := 0
+
+
+ PCLMULQDQ
+
+ Application-Targeted
+
+
+
+
+
+
+
+ Invoke the PCONFIG leaf function specified by "a". The "__data" array contains
+ 3 32- or 64-bit elements that may act as input, output, or be unused, depending on the
+ semantics of the specified leaf function; these correspond to ebx, ecx, and edx. May
+ return the value in eax, depending on the semantics of the specified leaf function.
+
+ PCONFIG
+
+ Miscellaneous
+
+
+
+
+
+
+ Count the number of bits set to 1 in unsigned 32-bit integer "a", and return
+ that count in "dst".
+
+ dst := 0
+ FOR i := 0 to 31
+ IF a[i]
+ dst := dst + 1
+ FI
+ ENDFOR
+
+
+ POPCNT
+
+ Bit Manipulation
+
+
+
+
+ Count the number of bits set to 1 in unsigned 64-bit integer "a", and return
+ that count in "dst".
+
+ dst := 0
+ FOR i := 0 to 63
+ IF a[i]
+ dst := dst + 1
+ FI
+ ENDFOR
+
+
+ POPCNT
+
+ Bit Manipulation
+
+
+
+
+ Count the number of bits set to 1 in 32-bit integer "a", and return that count
+ in "dst".
+
+ dst := 0
+ FOR i := 0 to 31
+ IF a[i]
+ dst := dst + 1
+ FI
+ ENDFOR
+
+
+ POPCNT
+
+ Bit Manipulation
+
+
+
+
+ Count the number of bits set to 1 in 64-bit integer "a", and return that count
+ in "dst".
+
+ dst := 0
+ FOR i := 0 to 63
+ IF a[i]
+ dst := dst + 1
+ FI
+ ENDFOR
+
+
+ POPCNT
+
+ Bit Manipulation
+
+
+
+
+
+
+ Loads an instruction sequence containing the specified memory address into all
+ level cache.
+
+ PREFETCHI
+
+ General Support
+
+
+
+
+ Loads an instruction sequence containing the specified memory address into all
+ but the first-level cache.
+
+ PREFETCHI
+
+ General Support
+
+
+
+
+
+ Fetch the line of data from memory that contains address "p" to a location in
+ the cache hierarchy specified by the locality hint "i", which can be one of:<ul>
+ <li>_MM_HINT_ET0 // 7, move data using the ET0 hint. The PREFETCHW instruction
+ will be generated.</li>
+ <li>_MM_HINT_T0 // 3, move data using the T0 hint. The PREFETCHT0 instruction will
+ be generated.</li>
+ <li>_MM_HINT_T1 // 2, move data using the T1 hint. The PREFETCHT1 instruction will
+ be generated.</li>
+ <li>_MM_HINT_T2 // 1, move data using the T2 hint. The PREFETCHT2 instruction will
+ be generated.</li>
+ <li>_MM_HINT_NTA // 0, move data using the non-temporal access (NTA) hint. The
+ PREFETCHNTA instruction will be generated.</li>
+
+
+
+
+
+
+ PRFCHW
+
+ General Support
+
+
+
+
+
+ Atomically add a 32-bit value at memory operand "__A" and a 32-bit "__B", and
+ store the result to the same memory location.
+
+
+ MEM[__A+31:__A] := MEM[__A+31:__A] + __B[31:0]
+
+
+
+ RAO_INT
+
+ Arithmetic
+
+
+
+ Atomically add a 64-bit value at memory operand "__A" and a 64-bit "__B", and
+ store the result to the same memory location.
+
+
+ MEM[__A+63:__A] := MEM[__A+63:__A] + __B[63:0]
+
+
+
+ RAO_INT
+
+ Arithmetic
+
+
+
+ Atomically and a 32-bit value at memory operand "__A" and a 32-bit "__B", and
+ store the result to the same memory location.
+
+
+ MEM[__A+31:__A] := MEM[__A+31:__A] AND __B[31:0]
+
+
+
+ RAO_INT
+
+ Arithmetic
+
+
+
+ Atomically and a 64-bit value at memory operand "__A" and a 64-bit "__B", and
+ store the result to the same memory location.
+
+
+ MEM[__A+63:__A] := MEM[__A+63:__A] AND __B[63:0]
+
+
+
+ RAO_INT
+
+ Arithmetic
+
+
+
+ Atomically or a 32-bit value at memory operand "__A" and a 32-bit "__B", and
+ store the result to the same memory location.
+
+
+ MEM[__A+31:__A] := MEM[__A+31:__A] OR __B[31:0]
+
+
+
+ RAO_INT
+
+ Arithmetic
+
+
+
+ Atomically or a 64-bit value at memory operand "__A" and a 64-bit "__B", and
+ store the result to the same memory location.
+
+
+ MEM[__A+63:__A] := MEM[__A+63:__A] OR __B[63:0]
+
+
+
+ RAO_INT
+
+ Arithmetic
+
+
+
+ Atomically xor a 32-bit value at memory operand "__A" and a 32-bit "__B", and
+ store the result to the same memory location.
+
+
+ MEM[__A+31:__A] := MEM[__A+31:__A] XOR __B[31:0]
+
+
+
+ RAO_INT
+
+ Arithmetic
+
+
+
+ Atomically xor a 64-bit value at memory operand "__A" and a 64-bit "__B", and
+ store the result to the same memory location.
+
+
+ MEM[__A+63:__A] := MEM[__A+63:__A] XOR __B[63:0]
+
+
+
+ RAO_INT
+
+ Arithmetic
+
+
+
+
+ Copy the IA32_TSC_AUX MSR (signature value) into "dst".
+ dst[31:0] := IA32_TSC_AUX[31:0]
+
+
+ RDPID
+
+ General Support
+
+
+
+
+
+
+ Read a hardware generated 16-bit random value and store the result in "val".
+ Return 1 if a random value was generated, and 0 otherwise.
+ IF HW_RND_GEN.ready == 1
+ val[15:0] := HW_RND_GEN.data
+ dst := 1
+ ELSE
+ val[15:0] := 0
+ dst := 0
+ FI
+
+
+ RDRAND
+
+ Random
+
+
+
+
+ Read a hardware generated 32-bit random value and store the result in "val".
+ Return 1 if a random value was generated, and 0 otherwise.
+ IF HW_RND_GEN.ready == 1
+ val[31:0] := HW_RND_GEN.data
+ dst := 1
+ ELSE
+ val[31:0] := 0
+ dst := 0
+ FI
+
+
+ RDRAND
+
+ Random
+
+
+
+
+ Read a hardware generated 64-bit random value and store the result in "val".
+ Return 1 if a random value was generated, and 0 otherwise.
+ IF HW_RND_GEN.ready == 1
+ val[63:0] := HW_RND_GEN.data
+ dst := 1
+ ELSE
+ val[63:0] := 0
+ dst := 0
+ FI
+
+
+ RDRAND
+
+ Random
+
+
+
+
+
+
+ Read a 16-bit NIST SP800-90B and SP800-90C compliant random value and store in
+ "val". Return 1 if a random value was generated, and 0 otherwise.
+ IF HW_NRND_GEN.ready == 1
+ val[15:0] := HW_NRND_GEN.data
+ dst := 1
+ ELSE
+ val[15:0] := 0
+ dst := 0
+ FI
+
+
+ RDSEED
+
+ Random
+
+
+
+
+ Read a 32-bit NIST SP800-90B and SP800-90C compliant random value and store in
+ "val". Return 1 if a random value was generated, and 0 otherwise.
+ IF HW_NRND_GEN.ready == 1
+ val[31:0] := HW_NRND_GEN.data
+ dst := 1
+ ELSE
+ val[31:0] := 0
+ dst := 0
+ FI
+
+
+ RDSEED
+
+ Random
+
+
+
+
+ Read a 64-bit NIST SP800-90B and SP800-90C compliant random value and store in
+ "val". Return 1 if a random value was generated, and 0 otherwise.
+ IF HW_NRND_GEN.ready == 1
+ val[63:0] := HW_NRND_GEN.data
+ dst := 1
+ ELSE
+ val[63:0] := 0
+ dst := 0
+ FI
+
+
+ RDSEED
+
+ Random
+
+
+
+
+
+
+ Copy the current 64-bit value of the processor's time-stamp counter into "dst",
+ and store the IA32_TSC_AUX MSR (signature value) into memory at "mem_addr".
+ dst[63:0] := TimeStampCounter
+ MEM[mem_addr+31:mem_addr] := IA32_TSC_AUX[31:0]
+
+
+ RDTSCP
+
+ General Support
+
+
+
+
+
+
+ Force an RTM abort. The EAX register is updated to reflect an XABORT
+ instruction caused the abort, and the "imm8" parameter will be provided in bits [31:24]
+ of EAX.
+ Following an RTM abort, the logical processor resumes execution at the fallback address
+ computed through the outermost XBEGIN instruction.
+ IF RTM_ACTIVE == 0
+ // nop
+ ELSE
+ // restore architectural register state
+ // discard memory updates performed in transaction
+ // update EAX with status and imm8 value
+ eax[31:24] := imm8[7:0]
+ RTM_NEST_COUNT := 0
+ RTM_ACTIVE := 0
+ IF _64_BIT_MODE
+ RIP := fallbackRIP
+ ELSE
+ EIP := fallbackEIP
+ FI
+ FI
+
+
+ RTM
+
+ General Support
+
+
+
+
+ Specify the start of an RTM code region.
+ If the logical processor was not already in transactional execution, then this call
+ causes the logical processor to transition into transactional execution.
+ On an RTM abort, the logical processor discards all architectural register and memory
+ updates performed during the RTM execution, restores architectural state, and starts
+ execution beginning at the fallback address computed from the outermost XBEGIN
+ instruction. Return status of ~0 (0xFFFF) if continuing inside transaction; all other
+ codes are aborts.
+ IF RTM_NEST_COUNT < MAX_RTM_NEST_COUNT
+ RTM_NEST_COUNT := RTM_NEST_COUNT + 1
+ IF RTM_NEST_COUNT == 1
+ IF _64_BIT_MODE
+ fallbackRIP := RIP
+ ELSE IF _32_BIT_MODE
+ fallbackEIP := EIP
+ FI
+
+ RTM_ACTIVE := 1
+ // enter RTM execution, record register state, start tracking memory state
+ FI
+ ELSE
+ // RTM abort (see _xabort)
+ FI
+
+
+ RTM
+
+ General Support
+
+
+
+
+ Specify the end of an RTM code region.
+ If this corresponds to the outermost scope, the logical processor will attempt to commit
+ the logical processor state atomically.
+ If the commit fails, the logical processor will perform an RTM abort.
+ IF RTM_ACTIVE == 1
+ RTM_NEST_COUNT := RTM_NEST_COUNT - 1
+ IF RTM_NEST_COUNT == 0
+ // try to commit transaction
+ IF FAIL_TO_COMMIT_TRANSACTION
+ // RTM abort (see _xabort)
+ ELSE
+ RTM_ACTIVE := 0
+ FI
+ FI
+ FI
+
+
+ RTM
+
+ General Support
+
+
+
+
+ Query the transactional execution status, return 1 if inside a transactionally
+ executing RTM or HLE region, and return 0 otherwise.
+ IF (RTM_ACTIVE == 1 OR HLE_ACTIVE == 1)
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ RTM
+
+ General Support
+
+
+
+
+
+ Serialize instruction execution, ensuring all modifications to flags,
+ registers, and memory by previous instructions are completed before the next instruction
+ is fetched.
+
+ SERIALIZE
+
+ General Support
+
+
+
+
+
+
+
+ Perform an intermediate calculation for the next four SHA1 message values
+ (unsigned 32-bit integers) using previous message values from "a" and "b", and store the
+ result in "dst".
+
+ W0 := a[127:96]
+ W1 := a[95:64]
+ W2 := a[63:32]
+ W3 := a[31:0]
+ W4 := b[127:96]
+ W5 := b[95:64]
+ dst[127:96] := W2 XOR W0
+ dst[95:64] := W3 XOR W1
+ dst[63:32] := W4 XOR W2
+ dst[31:0] := W5 XOR W3
+
+
+ SHA
+
+ Cryptography
+
+
+
+
+
+ Perform the final calculation for the next four SHA1 message values (unsigned
+ 32-bit integers) using the intermediate result in "a" and the previous message values in
+ "b", and store the result in "dst".
+
+ W13 := b[95:64]
+ W14 := b[63:32]
+ W15 := b[31:0]
+ W16 := (a[127:96] XOR W13) <<< 1
+ W17 := (a[95:64] XOR W14) <<< 1
+ W18 := (a[63:32] XOR W15) <<< 1
+ W19 := (a[31:0] XOR W16) <<< 1
+ dst[127:96] := W16
+ dst[95:64] := W17
+ dst[63:32] := W18
+ dst[31:0] := W19
+
+
+ SHA
+
+ Cryptography
+
+
+
+
+
+ Calculate SHA1 state variable E after four rounds of operation from the current
+ SHA1 state variable "a", add that value to the scheduled values (unsigned 32-bit
+ integers) in "b", and store the result in "dst".
+
+ tmp := (a[127:96] <<< 30)
+ dst[127:96] := b[127:96] + tmp
+ dst[95:64] := b[95:64]
+ dst[63:32] := b[63:32]
+ dst[31:0] := b[31:0]
+
+
+ SHA
+
+ Cryptography
+
+
+
+
+
+
+ Perform four rounds of SHA1 operation using an initial SHA1 state (A,B,C,D)
+ from "a" and some pre-computed sum of the next 4 round message values (unsigned 32-bit
+ integers), and state variable E from "b", and store the updated SHA1 state (A,B,C,D) in
+ "dst". "func" contains the logic functions and round constants.
+ IF (func[1:0] == 0)
+ f := f0()
+ K := K0
+ ELSE IF (func[1:0] == 1)
+ f := f1()
+ K := K1
+ ELSE IF (func[1:0] == 2)
+ f := f2()
+ K := K2
+ ELSE IF (func[1:0] == 3)
+ f := f3()
+ K := K3
+ FI
+ A := a[127:96]
+ B := a[95:64]
+ C := a[63:32]
+ D := a[31:0]
+ W[0] := b[127:96]
+ W[1] := b[95:64]
+ W[2] := b[63:32]
+ W[3] := b[31:0]
+ A[1] := f(B, C, D) + (A <<< 5) + W[0] + K
+ B[1] := A
+ C[1] := B <<< 30
+ D[1] := C
+ E[1] := D
+ FOR i := 1 to 3
+ A[i+1] := f(B[i], C[i], D[i]) + (A[i] <<< 5) + W[i] + E[i] + K
+ B[i+1] := A[i]
+ C[i+1] := B[i] <<< 30
+ D[i+1] := C[i]
+ E[i+1] := D[i]
+ ENDFOR
+ dst[127:96] := A[4]
+ dst[95:64] := B[4]
+ dst[63:32] := C[4]
+ dst[31:0] := D[4]
+
+
+ SHA
+
+ Cryptography
+
+
+
+
+
+ Perform an intermediate calculation for the next four SHA256 message values
+ (unsigned 32-bit integers) using previous message values from "a" and "b", and store the
+ result in "dst".
+ W4 := b[31:0]
+ W3 := a[127:96]
+ W2 := a[95:64]
+ W1 := a[63:32]
+ W0 := a[31:0]
+ dst[127:96] := W3 + sigma0(W4)
+ dst[95:64] := W2 + sigma0(W3)
+ dst[63:32] := W1 + sigma0(W2)
+ dst[31:0] := W0 + sigma0(W1)
+
+
+ SHA
+
+ Cryptography
+
+
+
+
+
+ Perform the final calculation for the next four SHA256 message values (unsigned
+ 32-bit integers) using previous message values from "a" and "b", and store the result in
+ "dst"."
+ W14 := b[95:64]
+ W15 := b[127:96]
+ W16 := a[31:0] + sigma1(W14)
+ W17 := a[63:32] + sigma1(W15)
+ W18 := a[95:64] + sigma1(W16)
+ W19 := a[127:96] + sigma1(W17)
+ dst[127:96] := W19
+ dst[95:64] := W18
+ dst[63:32] := W17
+ dst[31:0] := W16
+
+
+ SHA
+
+ Cryptography
+
+
+
+
+
+
+ Perform 2 rounds of SHA256 operation using an initial SHA256 state (C,D,G,H)
+ from "a", an initial SHA256 state (A,B,E,F) from "b", and a pre-computed sum of the next
+ 2 round message values (unsigned 32-bit integers) and the corresponding round constants
+ from "k", and store the updated SHA256 state (A,B,E,F) in "dst".
+ A[0] := b[127:96]
+ B[0] := b[95:64]
+ C[0] := a[127:96]
+ D[0] := a[95:64]
+ E[0] := b[63:32]
+ F[0] := b[31:0]
+ G[0] := a[63:32]
+ H[0] := a[31:0]
+ W_K[0] := k[31:0]
+ W_K[1] := k[63:32]
+ FOR i := 0 to 1
+ A[i+1] := Ch(E[i], F[i], G[i]) + sum1(E[i]) + W_K[i] + H[i] + Maj(A[i], B[i], C[i]) +
+ sum0(A[i])
+ B[i+1] := A[i]
+ C[i+1] := B[i]
+ D[i+1] := C[i]
+ E[i+1] := Ch(E[i], F[i], G[i]) + sum1(E[i]) + W_K[i] + H[i] + D[i]
+ F[i+1] := E[i]
+ G[i+1] := F[i]
+ H[i+1] := G[i]
+ ENDFOR
+ dst[127:96] := A[2]
+ dst[95:64] := B[2]
+ dst[63:32] := E[2]
+ dst[31:0] := F[2]
+
+
+ SHA
+
+ Cryptography
+
+
+
+
+
+ SHA512
+ This intrinisc is one of the two SHA512 message scheduling instructions. The
+ intrinsic performs an intermediate calculation for the next four SHA512 message qwords.
+ The calculated results are stored in "dst".
+ -msha512
+
+
+ DEFINE ROR64(qword, n) {
+ count := n % 64
+ dest := (qword >> count) | (qword << (64 - count))
+ RETURN dest
+ }
+ DEFINE SHR64(qword, n) {
+ RETURN qword >> n
+ }
+ DEFINE s0(qword) {
+ RETURN ROR64(qword,1) ^ ROR64(qword, 8) ^ SHR64(qword, 7)
+ }
+ W.qword[4] := __B.qword[0]
+ W.qword[3] := __A.qword[3]
+ W.qword[2] := __A.qword[2]
+ W.qword[1] := __A.qword[1]
+ W.qword[0] := __A.qword[0]
+ dst.qword[3] := W.qword[3] + s0(W.qword[4])
+ dst.qword[2] := W.qword[2] + s0(W.qword[3])
+ dst.qword[1] := W.qword[1] + s0(W.qword[2])
+ dst.qword[0] := W.qword[0] + s0(W.qword[1])
+
+
+
+ SHA512
+
+ Cryptography
+
+
+
+ SHA512
+ This intrinisc is one of the two SHA512 message scheduling instructions. The
+ intrinsic performs the final calculation for the next four SHA512 message qwords. The
+ calculated results are stored in "dst".
+ -msha512
+
+
+ DEFINE ROR64(qword, n) {
+ count := n % 64
+ dest := (qword >> count) | (qword << (64 - count))
+ RETURN dest
+ }
+ DEFINE SHR64(qword, n) {
+ RETURN qword >> n
+ }
+ DEFINE s1(qword) {
+ RETURN ROR64(qword,19) ^ ROR64(qword, 61) ^ SHR64(qword, 6)
+ }
+ W.qword[14] := __B.qword[2]
+ W.qword[15] := __B.qword[3]
+ W.qword[16] := __A.qword[0] + s1(W.qword[14])
+ W.qword[17] := __A.qword[1] + s1(W.qword[15])
+ W.qword[18] := __A.qword[2] + s1(W.qword[16])
+ W.qword[19] := __A.qword[3] + s1(W.qword[17])
+ dst.qword[3] := W.qword[19]
+ dst.qword[2] := W.qword[18]
+ dst.qword[1] := W.qword[17]
+ dst.qword[0] := W.qword[16]
+
+
+
+ SHA512
+
+ Cryptography
+
+
+
+ SHA512
+ This intrinisc performs two rounds of SHA512 operation using initial SHA512
+ state (C,D,G,H) from "__A", an initial SHA512 state (A,B,E,F) from "__B", and a
+ pre-computed sum of the next two round message qwords and the corresponding round
+ constants from "__C" (only the two lower qwords of the third operand). The updated
+ SHA512 state (A,B,E,F) is written to "dst", and "dst" can be used as the updated state
+ (C,D,G,H) in later rounds.
+ -msha512
+
+
+ DEFINE ROR64(qword, n) {
+ count := n % 64
+ dest := (qword >> count) | (qword << (64 - count))
+ RETURN dest
+ }
+ DEFINE SHR64(qword, n) {
+ RETURN qword >> n
+ }
+ DEFINE cap_sigma0(qword) {
+ RETURN ROR64(qword, 28) ^ ROR64(qword, 34) ^ ROR64(qword, 39)
+ }
+ DEFINE cap_sigma1(qword) {
+ RETURN ROR64(qword, 14) ^ ROR64(qword, 18) ^ ROR64(qword, 41)
+ }
+ DEFINE MAJ(a,b,c) {
+ RETURN (a & b) ^ (a & c) ^ (b & c)
+ }
+ DEFINE CH(a,b,c) {
+ RETURN (a & b) ^ (c & ~a)
+ }
+ A.qword[0] := __B.qword[3]
+ B.qword[0] := __B.qword[2]
+ C.qword[0] := __A.qword[3]
+ D.qword[0] := __A.qword[2]
+ E.qword[0] := __B.qword[1]
+ F.qword[0] := __B.qword[0]
+ G.qword[0] := __A.qword[1]
+ H.qword[0] := __A.qword[0]
+ WK.qword[0]:= __C.qword[0]
+ WK.qword[1]:= __C.qword[1]
+ FOR i := 0 to 1
+ A.qword[i+1] := CH(E.qword[i], F.qword[i], G.qword[i]) + cap_sigma1(E.qword[i]) +
+ WK.qword[i] + H.qword[i] + MAJ(A.qword[i], B.qword[i], C.qword[i]) +
+ cap_sigma0(A.qword[i])
+ B.qword[i+1] := A.qword[i]
+ C.qword[i+1] := B.qword[i]
+ D.qword[i+1] := C.qword[i]
+ E.qword[i+1] := CH(E.qword[i], F.qword[i], G.qword[i]) + cap_sigma1(E.qword[i]) +
+ WK.qword[i] + H.qword[i] + D.qword[i]
+ F.qword[i+1] := E.qword[i]
+ G.qword[i+1] := F.qword[i]
+ H.qword[i+1] := G.qword[i]
+ ENDFOR
+ dst.qword[3] := A.qword[2]
+ dst.qword[2] := B.qword[2]
+ dst.qword[1] := E.qword[2]
+ dst.qword[0] := F.qword[2]
+
+
+
+
+ SHA512
+
+ Cryptography
+
+
+
+ The VSM3MSG1 intrinsic is one of the two SM3 message scheduling intrinsics. The
+ intrinsic performs an initial calculation for the next four SM3 message words. The
+ calculated results are stored in "dst".
+
+
+ DEFINE ROL32(dword, n) {
+ count := n % 32
+ dest := (dword << count) | (dword >> (32 - count))
+ RETURN dest
+ }
+ DEFINE P1(x) {
+ RETURN x ^ ROL32(x, 15) ^ ROL32(x, 23)
+ }
+ W.dword[0] := __C.dword[0]
+ W.dword[1] := __C.dword[1]
+ W.dword[2] := __C.dword[2]
+ W.dword[3] := __C.dword[3]
+ W.dword[7] := __A.dword[0]
+ W.dword[8] := __A.dword[1]
+ W.dword[9] := __A.dword[2]
+ W.dword[10] := __A.dword[3]
+ W.dword[13] := __B.dword[0]
+ W.dword[14] := __B.dword[1]
+ W.dword[15] := __B.dword[2]
+ TMP0 := W.dword[7] ^ W.dword[0] ^ ROL32(W.dword[13], 15)
+ TMP1 := W.dword[8] ^ W.dword[1] ^ ROL32(W.dword[14], 15)
+ TMP2 := W.dword[9] ^ W.dword[2] ^ ROL32(W.dword[15], 15)
+ TMP3 := W.dword[10] ^ W.dword[3]
+ dst.dword[0] := P1(TMP0)
+ dst.dword[1] := P1(TMP1)
+ dst.dword[2] := P1(TMP2)
+ dst.dword[3] := P1(TMP3)
+
+
+
+
+ SM3
+
+ Cryptography
+
+
+
+ The VSM3MSG2 intrinsic is one of the two SM3 message scheduling intrinsics. The
+ intrinsic performs the final calculation for the next four SM3 message words. The
+ calculated results are stored in "dst".
+
+
+ DEFINE ROL32(dword, n) {
+ count := n % 32
+ dest := (dword << count) | (dword >> (32-count))
+ RETURN dest
+ }
+ WTMP.dword[0] := __A.dword[0]
+ WTMP.dword[1] := __A.dword[1]
+ WTMP.dword[2] := __A.dword[2]
+ WTMP.dword[3] := __A.dword[3]
+ W.dword[3] := __B.dword[0]
+ W.dword[4] := __B.dword[1]
+ W.dword[5] := __B.dword[2]
+ W.dword[6] := __B.dword[3]
+ W.dword[10] := __C.dword[0]
+ W.dword[11] := __C.dword[1]
+ W.dword[12] := __C.dword[2]
+ W.dword[13] := __C.dword[3]
+ W.dword[16] := ROL32(W.dword[3], 7) ^ W.dword[10] ^ WTMP.dword[0]
+ W.dword[17] := ROL32(W.dword[4], 7) ^ W.dword[11] ^ WTMP.dword[1]
+ W.dword[18] := ROL32(W.dword[5], 7) ^ W.dword[12] ^ WTMP.dword[2]
+ W.dword[19] := ROL32(W.dword[6], 7) ^ W.dword[13] ^ WTMP.dword[3]
+ W.dword[19] := W.dword[19] ^ ROL32(W.dword[16], 6) ^ ROL32(W.dword[16], 15) ^
+ ROL32(W.dword[16], 30)
+ dst.dword[0] := W.dword[16]
+ dst.dword[1] := W.dword[17]
+ dst.dword[2] := W.dword[18]
+ dst.dword[3] := W.dword[19]
+
+
+
+
+ SM3
+
+ Cryptography
+
+
+
+ The intrinsic performs two rounds of SM3 operation using initial SM3 state (C,
+ D, G, H) from "__A", an initial SM3 states (A, B, E, F) from "__B" and a pre-computed
+ words from the "__C". "__A" with initial SM3 state of (C, D, G, H) assumes input of
+ non-rotated left variables from previous state. The updated SM3 state (A, B, E, F) is
+ written to "__A". The "imm8" should contain the even round number for the first of the
+ two rounds computed by this instruction. The computation masks the "imm8" value by
+ ANDing it with 0x3E so that only even round numbers from 0 through 62 are used for this
+ operation. The calculated results are stored in "dst".
+
+
+ DEFINE ROL32(dword, n) {
+ count := n % 32
+ dest := (dword << count) | (dword >> (32-count))
+ RETURN dest
+ }
+ DEFINE P0(x) {
+ RETURN x ^ ROL32(x, 9) ^ ROL32(x, 17)
+ }
+ DEFINE FF(x, y, z, round) {
+ IF round < 16
+ RETURN (x ^ y ^ z)
+ ELSE
+ RETURN (x & y) | (x & z) | (y & z)
+ FI
+ }
+ DEFINE GG(x, y, z, round){
+ IF round < 16
+ RETURN (x ^ y ^ z)
+ ELSE
+ RETURN (x & y) | (~x & z)
+ FI
+ }
+ A.dword[0] := __B.dword[3]
+ B.dword[0] := __B.dword[2]
+ C.dword[0] := __A.dword[3]
+ D.dword[0] := __A.dword[2]
+ E.dword[0] := __B.dword[1]
+ F.dword[0] := __B.dword[0]
+ G.dword[0] := __A.dword[1]
+ H.dword[0] := __A.dword[0]
+ W.dword[0] := __C.dword[0]
+ W.dword[1] := __C.dword[1]
+ W.dword[4] := __C.dword[2]
+ W.dword[5] := __C.dword[3]
+ C.dword[0] := ROL32(C.dword[0], 9)
+ D.dword[0] := ROL32(D.dword[0], 9)
+ G.dword[0] := ROL32(G.dword[0], 19)
+ H.dword[0] := ROL32(H.dword[0], 19)
+ ROUND := imm8 & 0x3E
+ IF ROUND < 16
+ CONST.dword[0] := 0x79CC4519
+ ELSE
+ CONST.dword[0] := 0x7A879D8A
+ FI
+ CONST.dword[0] := ROL32(CONST.dword[0], ROUND)
+ FOR i:= 0 to 1
+ temp.dword[0] := ROL32(A.dword[i], 12) + E.dword[i] + CONST.dword[0]
+ S1.dword[0] := ROL32(temp.dword[0], 7)
+ S2.dword[0] := S1.dword[0] ^ ROL32(A.dword[i], 12)
+ T1.dword[0] := FF(A.dword[i], B.dword[i], C.dword[i], ROUND) + D.dword[i] + S2.dword[0]
+ + (W.dword[i] ^ W.dword[i+4])
+ T2.dword[0] := GG(E.dword[i], F.dword[i], G.dword[i], ROUND) + H.dword[i] + S1.dword[0]
+ + W.dword[i]
+ D.dword[i+1] := C.dword[i]
+ C.dword[i+1] := ROL32(B.dword[i], 9)
+ B.dword[i+1] := A.dword[i]
+ A.dword[i+1] := T1.dword[0]
+ H.dword[i+1] := G.dword[i]
+ G.dword[i+1] := ROL32(F.dword[i], 19)
+ F.dword[i+1] := E.dword[i]
+ E.dword[i+1] := P0(T2.dword[0])
+ CONST.dword[0] := ROL32(CONST.dword[0], 1)
+ ENDFOR
+ dst.dword[3] := A.dword[2]
+ dst.dword[2] := B.dword[2]
+ dst.dword[1] := E.dword[2]
+ dst.dword[0] := F.dword[2]
+
+
+
+
+
+ SM3
+
+ Cryptography
+
+
+
+ This intrinsic performs four rounds of SM4 key expansion. The intrinsic
+ operates on independent 128-bit lanes. The calculated results are stored in "dst".
+
+
+ BYTE sbox[256] = {
+ 0xD6, 0x90, 0xE9, 0xFE, 0xCC, 0xE1, 0x3D, 0xB7, 0x16, 0xB6, 0x14, 0xC2, 0x28, 0xFB,
+ 0x2C, 0x05,
+ 0x2B, 0x67, 0x9A, 0x76, 0x2A, 0xBE, 0x04, 0xC3, 0xAA, 0x44, 0x13, 0x26, 0x49, 0x86,
+ 0x06, 0x99,
+ 0x9C, 0x42, 0x50, 0xF4, 0x91, 0xEF, 0x98, 0x7A, 0x33, 0x54, 0x0B, 0x43, 0xED, 0xCF,
+ 0xAC, 0x62,
+ 0xE4, 0xB3, 0x1C, 0xA9, 0xC9, 0x08, 0xE8, 0x95, 0x80, 0xDF, 0x94, 0xFA, 0x75, 0x8F,
+ 0x3F, 0xA6,
+ 0x47, 0x07, 0xA7, 0xFC, 0xF3, 0x73, 0x17, 0xBA, 0x83, 0x59, 0x3C, 0x19, 0xE6, 0x85,
+ 0x4F, 0xA8,
+ 0x68, 0x6B, 0x81, 0xB2, 0x71, 0x64, 0xDA, 0x8B, 0xF8, 0xEB, 0x0F, 0x4B, 0x70, 0x56,
+ 0x9D, 0x35,
+ 0x1E, 0x24, 0x0E, 0x5E, 0x63, 0x58, 0xD1, 0xA2, 0x25, 0x22, 0x7C, 0x3B, 0x01, 0x21,
+ 0x78, 0x87,
+ 0xD4, 0x00, 0x46, 0x57, 0x9F, 0xD3, 0x27, 0x52, 0x4C, 0x36, 0x02, 0xE7, 0xA0, 0xC4,
+ 0xC8, 0x9E,
+ 0xEA, 0xBF, 0x8A, 0xD2, 0x40, 0xC7, 0x38, 0xB5, 0xA3, 0xF7, 0xF2, 0xCE, 0xF9, 0x61,
+ 0x15, 0xA1,
+ 0xE0, 0xAE, 0x5D, 0xA4, 0x9B, 0x34, 0x1A, 0x55, 0xAD, 0x93, 0x32, 0x30, 0xF5, 0x8C,
+ 0xB1, 0xE3,
+ 0x1D, 0xF6, 0xE2, 0x2E, 0x82, 0x66, 0xCA, 0x60, 0xC0, 0x29, 0x23, 0xAB, 0x0D, 0x53,
+ 0x4E, 0x6F,
+ 0xD5, 0xDB, 0x37, 0x45, 0xDE, 0xFD, 0x8E, 0x2F, 0x03, 0xFF, 0x6A, 0x72, 0x6D, 0x6C,
+ 0x5B, 0x51,
+ 0x8D, 0x1B, 0xAF, 0x92, 0xBB, 0xDD, 0xBC, 0x7F, 0x11, 0xD9, 0x5C, 0x41, 0x1F, 0x10,
+ 0x5A, 0xD8,
+ 0x0A, 0xC1, 0x31, 0x88, 0xA5, 0xCD, 0x7B, 0xBD, 0x2D, 0x74, 0xD0, 0x12, 0xB8, 0xE5,
+ 0xB4, 0xB0,
+ 0x89, 0x69, 0x97, 0x4A, 0x0C, 0x96, 0x77, 0x7E, 0x65, 0xB9, 0xF1, 0x09, 0xC5, 0x6E,
+ 0xC6, 0x84,
+ 0x18, 0xF0, 0x7D, 0xEC, 0x3A, 0xDC, 0x4D, 0x20, 0x79, 0xEE, 0x5F, 0x3E, 0xD7, 0xCB,
+ 0x39, 0x48
+ }
+ DEFINE ROL32(dword, n) {
+ count := n % 32
+ dest := (dword << count) | (dword >> (32-count))
+ RETURN dest
+ }
+ DEFINE SBOX_BYTE(dword, i) {
+ RETURN sbox[dword.byte[i]]
+ }
+ DEFINE lower_t(dword) {
+ tmp.byte[0] := SBOX_BYTE(dword, 0)
+ tmp.byte[1] := SBOX_BYTE(dword, 1)
+ tmp.byte[2] := SBOX_BYTE(dword, 2)
+ tmp.byte[3] := SBOX_BYTE(dword, 3)
+ RETURN tmp
+ }
+ DEFINE L_KEY(dword) {
+ RETURN dword ^ ROL32(dword, 13) ^ ROL32(dword, 23)
+ }
+ DEFINE T_KEY(dword) {
+ RETURN L_KEY(lower_t(dword))
+ }
+ DEFINE F_KEY(X0, X1, X2, X3, round_key) {
+ RETURN X0 ^ T_KEY(X1 ^ X2 ^ X3 ^ round_key)
+ }
+ FOR i:= 0 to 1
+ P.dword[0] := __A.dword[4*i]
+ P.dword[1] := __A.dword[4*i+1]
+ P.dword[2] := __A.dword[4*i+2]
+ P.dword[3] := __A.dword[4*i+3]
+ C.dword[0] := F_KEY(P.dword[0], P.dword[1], P.dword[2], P.dword[3], __B.dword[4*i])
+ C.dword[1] := F_KEY(P.dword[1], P.dword[2], P.dword[3], C.dword[0], __B.dword[4*i+1])
+ C.dword[2] := F_KEY(P.dword[2], P.dword[3], C.dword[0], C.dword[1], __B.dword[4*i+2])
+ C.dword[3] := F_KEY(P.dword[3], C.dword[0], C.dword[1], C.dword[2], __B.dword[4*i+3])
+ dst.dword[4*i] := C.dword[0]
+ dst.dword[4*i+1] := C.dword[1]
+ dst.dword[4*i+2] := C.dword[2]
+ dst.dword[4*i+3] := C.dword[3]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ SM4
+
+ Cryptography
+
+
+
+ This intrinisc performs four rounds of SM4 encryption. The intrinisc operates
+ on independent 128-bit lanes. The calculated results are stored in "dst".
+
+ BYTE sbox[256] = {
+ 0xD6, 0x90, 0xE9, 0xFE, 0xCC, 0xE1, 0x3D, 0xB7, 0x16, 0xB6, 0x14, 0xC2, 0x28, 0xFB,
+ 0x2C, 0x05,
+ 0x2B, 0x67, 0x9A, 0x76, 0x2A, 0xBE, 0x04, 0xC3, 0xAA, 0x44, 0x13, 0x26, 0x49, 0x86,
+ 0x06, 0x99,
+ 0x9C, 0x42, 0x50, 0xF4, 0x91, 0xEF, 0x98, 0x7A, 0x33, 0x54, 0x0B, 0x43, 0xED, 0xCF,
+ 0xAC, 0x62,
+ 0xE4, 0xB3, 0x1C, 0xA9, 0xC9, 0x08, 0xE8, 0x95, 0x80, 0xDF, 0x94, 0xFA, 0x75, 0x8F,
+ 0x3F, 0xA6,
+ 0x47, 0x07, 0xA7, 0xFC, 0xF3, 0x73, 0x17, 0xBA, 0x83, 0x59, 0x3C, 0x19, 0xE6, 0x85,
+ 0x4F, 0xA8,
+ 0x68, 0x6B, 0x81, 0xB2, 0x71, 0x64, 0xDA, 0x8B, 0xF8, 0xEB, 0x0F, 0x4B, 0x70, 0x56,
+ 0x9D, 0x35,
+ 0x1E, 0x24, 0x0E, 0x5E, 0x63, 0x58, 0xD1, 0xA2, 0x25, 0x22, 0x7C, 0x3B, 0x01, 0x21,
+ 0x78, 0x87,
+ 0xD4, 0x00, 0x46, 0x57, 0x9F, 0xD3, 0x27, 0x52, 0x4C, 0x36, 0x02, 0xE7, 0xA0, 0xC4,
+ 0xC8, 0x9E,
+ 0xEA, 0xBF, 0x8A, 0xD2, 0x40, 0xC7, 0x38, 0xB5, 0xA3, 0xF7, 0xF2, 0xCE, 0xF9, 0x61,
+ 0x15, 0xA1,
+ 0xE0, 0xAE, 0x5D, 0xA4, 0x9B, 0x34, 0x1A, 0x55, 0xAD, 0x93, 0x32, 0x30, 0xF5, 0x8C,
+ 0xB1, 0xE3,
+ 0x1D, 0xF6, 0xE2, 0x2E, 0x82, 0x66, 0xCA, 0x60, 0xC0, 0x29, 0x23, 0xAB, 0x0D, 0x53,
+ 0x4E, 0x6F,
+ 0xD5, 0xDB, 0x37, 0x45, 0xDE, 0xFD, 0x8E, 0x2F, 0x03, 0xFF, 0x6A, 0x72, 0x6D, 0x6C,
+ 0x5B, 0x51,
+ 0x8D, 0x1B, 0xAF, 0x92, 0xBB, 0xDD, 0xBC, 0x7F, 0x11, 0xD9, 0x5C, 0x41, 0x1F, 0x10,
+ 0x5A, 0xD8,
+ 0x0A, 0xC1, 0x31, 0x88, 0xA5, 0xCD, 0x7B, 0xBD, 0x2D, 0x74, 0xD0, 0x12, 0xB8, 0xE5,
+ 0xB4, 0xB0,
+ 0x89, 0x69, 0x97, 0x4A, 0x0C, 0x96, 0x77, 0x7E, 0x65, 0xB9, 0xF1, 0x09, 0xC5, 0x6E,
+ 0xC6, 0x84,
+ 0x18, 0xF0, 0x7D, 0xEC, 0x3A, 0xDC, 0x4D, 0x20, 0x79, 0xEE, 0x5F, 0x3E, 0xD7, 0xCB,
+ 0x39, 0x48
+ }
+ DEFINE ROL32(dword, n) {
+ count := n % 32
+ dest := (dword << count) | (dword >> (32-count))
+ RETURN dest
+ }
+ DEFINE SBOX_BYTE(dword, i) {
+ RETURN sbox[dword.byte[i]]
+ }
+ DEFINE lower_t(dword) {
+ tmp.byte[0] := SBOX_BYTE(dword, 0)
+ tmp.byte[1] := SBOX_BYTE(dword, 1)
+ tmp.byte[2] := SBOX_BYTE(dword, 2)
+ tmp.byte[3] := SBOX_BYTE(dword, 3)
+ RETURN tmp
+ }
+ DEFINE L_RND(dword) {
+ tmp := dword
+ tmp := tmp ^ ROL32(dword, 2)
+ tmp := tmp ^ ROL32(dword, 10)
+ tmp := tmp ^ ROL32(dword, 18)
+ tmp := tmp ^ ROL32(dword, 24)
+ RETURN tmp
+ }
+ DEFINE T_RND(dword) {
+ RETURN L_RND(lower_t(dword))
+ }
+ DEFINE F_RND(X0, X1, X2, X3, round_key) {
+ RETURN X0 ^ T_RND(X1 ^ X2 ^ X3 ^ round_key)
+ }
+ FOR i:= 0 to 1
+ P.dword[0] := __A.dword[4*i]
+ P.dword[1] := __A.dword[4*i+1]
+ P.dword[2] := __A.dword[4*i+2]
+ P.dword[3] := __A.dword[4*i+3]
+ C.dword[0] := F_RND(P.dword[0], P.dword[1], P.dword[2], P.dword[3], __B.dword[4*i])
+ C.dword[1] := F_RND(P.dword[1], P.dword[2], P.dword[3], C.dword[0], __B.dword[4*i+1])
+ C.dword[2] := F_RND(P.dword[2], P.dword[3], C.dword[0], C.dword[1], __B.dword[4*i+2])
+ C.dword[3] := F_RND(P.dword[3], C.dword[0], C.dword[1], C.dword[2], __B.dword[4*i+3])
+ dst.dword[4*i] := C.dword[0]
+ dst.dword[4*i+1] := C.dword[1]
+ dst.dword[4*i+2] := C.dword[2]
+ dst.dword[4*i+3] := C.dword[3]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+
+ SM4
+
+ Cryptography
+
+
+
+ This intrinsic performs four rounds of SM4 key expansion. The intrinsic
+ operates on independent 128-bit lanes. The calculated results are stored in "dst".
+
+
+ BYTE sbox[256] = {
+ 0xD6, 0x90, 0xE9, 0xFE, 0xCC, 0xE1, 0x3D, 0xB7, 0x16, 0xB6, 0x14, 0xC2, 0x28, 0xFB,
+ 0x2C, 0x05,
+ 0x2B, 0x67, 0x9A, 0x76, 0x2A, 0xBE, 0x04, 0xC3, 0xAA, 0x44, 0x13, 0x26, 0x49, 0x86,
+ 0x06, 0x99,
+ 0x9C, 0x42, 0x50, 0xF4, 0x91, 0xEF, 0x98, 0x7A, 0x33, 0x54, 0x0B, 0x43, 0xED, 0xCF,
+ 0xAC, 0x62,
+ 0xE4, 0xB3, 0x1C, 0xA9, 0xC9, 0x08, 0xE8, 0x95, 0x80, 0xDF, 0x94, 0xFA, 0x75, 0x8F,
+ 0x3F, 0xA6,
+ 0x47, 0x07, 0xA7, 0xFC, 0xF3, 0x73, 0x17, 0xBA, 0x83, 0x59, 0x3C, 0x19, 0xE6, 0x85,
+ 0x4F, 0xA8,
+ 0x68, 0x6B, 0x81, 0xB2, 0x71, 0x64, 0xDA, 0x8B, 0xF8, 0xEB, 0x0F, 0x4B, 0x70, 0x56,
+ 0x9D, 0x35,
+ 0x1E, 0x24, 0x0E, 0x5E, 0x63, 0x58, 0xD1, 0xA2, 0x25, 0x22, 0x7C, 0x3B, 0x01, 0x21,
+ 0x78, 0x87,
+ 0xD4, 0x00, 0x46, 0x57, 0x9F, 0xD3, 0x27, 0x52, 0x4C, 0x36, 0x02, 0xE7, 0xA0, 0xC4,
+ 0xC8, 0x9E,
+ 0xEA, 0xBF, 0x8A, 0xD2, 0x40, 0xC7, 0x38, 0xB5, 0xA3, 0xF7, 0xF2, 0xCE, 0xF9, 0x61,
+ 0x15, 0xA1,
+ 0xE0, 0xAE, 0x5D, 0xA4, 0x9B, 0x34, 0x1A, 0x55, 0xAD, 0x93, 0x32, 0x30, 0xF5, 0x8C,
+ 0xB1, 0xE3,
+ 0x1D, 0xF6, 0xE2, 0x2E, 0x82, 0x66, 0xCA, 0x60, 0xC0, 0x29, 0x23, 0xAB, 0x0D, 0x53,
+ 0x4E, 0x6F,
+ 0xD5, 0xDB, 0x37, 0x45, 0xDE, 0xFD, 0x8E, 0x2F, 0x03, 0xFF, 0x6A, 0x72, 0x6D, 0x6C,
+ 0x5B, 0x51,
+ 0x8D, 0x1B, 0xAF, 0x92, 0xBB, 0xDD, 0xBC, 0x7F, 0x11, 0xD9, 0x5C, 0x41, 0x1F, 0x10,
+ 0x5A, 0xD8,
+ 0x0A, 0xC1, 0x31, 0x88, 0xA5, 0xCD, 0x7B, 0xBD, 0x2D, 0x74, 0xD0, 0x12, 0xB8, 0xE5,
+ 0xB4, 0xB0,
+ 0x89, 0x69, 0x97, 0x4A, 0x0C, 0x96, 0x77, 0x7E, 0x65, 0xB9, 0xF1, 0x09, 0xC5, 0x6E,
+ 0xC6, 0x84,
+ 0x18, 0xF0, 0x7D, 0xEC, 0x3A, 0xDC, 0x4D, 0x20, 0x79, 0xEE, 0x5F, 0x3E, 0xD7, 0xCB,
+ 0x39, 0x48
+ }
+ DEFINE ROL32(dword, n) {
+ count := n % 32
+ dest := (dword << count) | (dword >> (32-count))
+ RETURN dest
+ }
+ DEFINE SBOX_BYTE(dword, i) {
+ RETURN sbox[dword.byte[i]]
+ }
+ DEFINE lower_t(dword) {
+ tmp.byte[0] := SBOX_BYTE(dword, 0)
+ tmp.byte[1] := SBOX_BYTE(dword, 1)
+ tmp.byte[2] := SBOX_BYTE(dword, 2)
+ tmp.byte[3] := SBOX_BYTE(dword, 3)
+ RETURN tmp
+ }
+ DEFINE L_KEY(dword) {
+ RETURN dword ^ ROL32(dword, 13) ^ ROL32(dword, 23)
+ }
+ DEFINE T_KEY(dword) {
+ RETURN L_KEY(lower_t(dword))
+ }
+ DEFINE F_KEY(X0, X1, X2, X3, round_key) {
+ RETURN X0 ^ T_KEY(X1 ^ X2 ^ X3 ^ round_key)
+ }
+ P.dword[0] := __A.dword[0]
+ P.dword[1] := __A.dword[1]
+ P.dword[2] := __A.dword[2]
+ P.dword[3] := __A.dword[3]
+ C.dword[0] := F_KEY(P.dword[0], P.dword[1], P.dword[2], P.dword[3], __B.dword[0])
+ C.dword[1] := F_KEY(P.dword[1], P.dword[2], P.dword[3], C.dword[0], __B.dword[1])
+ C.dword[2] := F_KEY(P.dword[2], P.dword[3], C.dword[0], C.dword[1], __B.dword[2])
+ C.dword[3] := F_KEY(P.dword[3], C.dword[0], C.dword[1], C.dword[2], __B.dword[3])
+ dst.dword[0] := C.dword[0]
+ dst.dword[1] := C.dword[1]
+ dst.dword[2] := C.dword[2]
+ dst.dword[3] := C.dword[3]
+ dst[MAX:128] := 0
+
+
+
+ SM4
+
+ Cryptography
+
+
+
+ This intrinisc performs four rounds of SM4 encryption. The intrinisc operates
+ on independent 128-bit lanes. The calculated results are stored in "dst".
+
+
+ BYTE sbox[256] = {
+ 0xD6, 0x90, 0xE9, 0xFE, 0xCC, 0xE1, 0x3D, 0xB7, 0x16, 0xB6, 0x14, 0xC2, 0x28, 0xFB,
+ 0x2C, 0x05,
+ 0x2B, 0x67, 0x9A, 0x76, 0x2A, 0xBE, 0x04, 0xC3, 0xAA, 0x44, 0x13, 0x26, 0x49, 0x86,
+ 0x06, 0x99,
+ 0x9C, 0x42, 0x50, 0xF4, 0x91, 0xEF, 0x98, 0x7A, 0x33, 0x54, 0x0B, 0x43, 0xED, 0xCF,
+ 0xAC, 0x62,
+ 0xE4, 0xB3, 0x1C, 0xA9, 0xC9, 0x08, 0xE8, 0x95, 0x80, 0xDF, 0x94, 0xFA, 0x75, 0x8F,
+ 0x3F, 0xA6,
+ 0x47, 0x07, 0xA7, 0xFC, 0xF3, 0x73, 0x17, 0xBA, 0x83, 0x59, 0x3C, 0x19, 0xE6, 0x85,
+ 0x4F, 0xA8,
+ 0x68, 0x6B, 0x81, 0xB2, 0x71, 0x64, 0xDA, 0x8B, 0xF8, 0xEB, 0x0F, 0x4B, 0x70, 0x56,
+ 0x9D, 0x35,
+ 0x1E, 0x24, 0x0E, 0x5E, 0x63, 0x58, 0xD1, 0xA2, 0x25, 0x22, 0x7C, 0x3B, 0x01, 0x21,
+ 0x78, 0x87,
+ 0xD4, 0x00, 0x46, 0x57, 0x9F, 0xD3, 0x27, 0x52, 0x4C, 0x36, 0x02, 0xE7, 0xA0, 0xC4,
+ 0xC8, 0x9E,
+ 0xEA, 0xBF, 0x8A, 0xD2, 0x40, 0xC7, 0x38, 0xB5, 0xA3, 0xF7, 0xF2, 0xCE, 0xF9, 0x61,
+ 0x15, 0xA1,
+ 0xE0, 0xAE, 0x5D, 0xA4, 0x9B, 0x34, 0x1A, 0x55, 0xAD, 0x93, 0x32, 0x30, 0xF5, 0x8C,
+ 0xB1, 0xE3,
+ 0x1D, 0xF6, 0xE2, 0x2E, 0x82, 0x66, 0xCA, 0x60, 0xC0, 0x29, 0x23, 0xAB, 0x0D, 0x53,
+ 0x4E, 0x6F,
+ 0xD5, 0xDB, 0x37, 0x45, 0xDE, 0xFD, 0x8E, 0x2F, 0x03, 0xFF, 0x6A, 0x72, 0x6D, 0x6C,
+ 0x5B, 0x51,
+ 0x8D, 0x1B, 0xAF, 0x92, 0xBB, 0xDD, 0xBC, 0x7F, 0x11, 0xD9, 0x5C, 0x41, 0x1F, 0x10,
+ 0x5A, 0xD8,
+ 0x0A, 0xC1, 0x31, 0x88, 0xA5, 0xCD, 0x7B, 0xBD, 0x2D, 0x74, 0xD0, 0x12, 0xB8, 0xE5,
+ 0xB4, 0xB0,
+ 0x89, 0x69, 0x97, 0x4A, 0x0C, 0x96, 0x77, 0x7E, 0x65, 0xB9, 0xF1, 0x09, 0xC5, 0x6E,
+ 0xC6, 0x84,
+ 0x18, 0xF0, 0x7D, 0xEC, 0x3A, 0xDC, 0x4D, 0x20, 0x79, 0xEE, 0x5F, 0x3E, 0xD7, 0xCB,
+ 0x39, 0x48
+ }
+ DEFINE ROL32(dword, n) {
+ count := n % 32
+ dest := (dword << count) | (dword >> (32-count))
+ RETURN dest
+ }
+ DEFINE SBOX_BYTE(dword, i) {
+ RETURN sbox[dword.byte[i]]
+ }
+ DEFINE lower_t(dword) {
+ tmp.byte[0] := SBOX_BYTE(dword, 0)
+ tmp.byte[1] := SBOX_BYTE(dword, 1)
+ tmp.byte[2] := SBOX_BYTE(dword, 2)
+ tmp.byte[3] := SBOX_BYTE(dword, 3)
+ RETURN tmp
+ }
+ DEFINE L_RND(dword) {
+ tmp := dword
+ tmp := tmp ^ ROL32(dword, 2)
+ tmp := tmp ^ ROL32(dword, 10)
+ tmp := tmp ^ ROL32(dword, 18)
+ tmp := tmp ^ ROL32(dword, 24)
+ RETURN tmp
+ }
+ DEFINE T_RND(dword) {
+ RETURN L_RND(lower_t(dword))
+ }
+ DEFINE F_RND(X0, X1, X2, X3, round_key) {
+ RETURN X0 ^ T_RND(X1 ^ X2 ^ X3 ^ round_key)
+ }
+ P.dword[0] := __A.dword[0]
+ P.dword[1] := __A.dword[1]
+ P.dword[2] := __A.dword[2]
+ P.dword[3] := __A.dword[3]
+ C.dword[0] := F_RND(P.dword[0], P.dword[1], P.dword[2], P.dword[3], __B.dword[0])
+ C.dword[1] := F_RND(P.dword[1], P.dword[2], P.dword[3], C.dword[0], __B.dword[1])
+ C.dword[2] := F_RND(P.dword[2], P.dword[3], C.dword[0], C.dword[1], __B.dword[2])
+ C.dword[3] := F_RND(P.dword[3], C.dword[0], C.dword[1], C.dword[2], __B.dword[3])
+ dst.dword[0] := C.dword[0]
+ dst.dword[1] := C.dword[1]
+ dst.dword[2] := C.dword[2]
+ dst.dword[3] := C.dword[3]
+ dst[MAX:128] := 0
+
+
+
+ SM4
+
+ Cryptography
+
+
+
+
+ Compute the inverse cosine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ACOS(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the inverse cosine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ACOS(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic cosine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ACOSH(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic cosine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ACOSH(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the inverse sine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ASIN(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the inverse sine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ASIN(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic sine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ASINH(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic sine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ASINH(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the inverse tangent of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ATAN(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the inverse tangent of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ATAN(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+
+ Compute the inverse tangent of packed double-precision (64-bit) floating-point
+ elements in "a" divided by packed elements in "b", and store the results in "dst"
+ expressed in radians.
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ATAN2(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+
+ Compute the inverse tangent of packed single-precision (32-bit) floating-point
+ elements in "a" divided by packed elements in "b", and store the results in "dst"
+ expressed in radians.
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ATAN2(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic tangent of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ATANH(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the inverse hyperbolic tangent of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ATANH(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := COS(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := COS(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := COSD(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the cosine of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := COSD(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic cosine of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := COSH(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic cosine of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := COSH(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+
+ Compute the length of the hypotenous of a right triangle, with the lengths of
+ the other two sides of the triangle stored as packed double-precision (64-bit)
+ floating-point elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := SQRT(POW(a[i+63:i], 2.0) + POW(b[i+63:i], 2.0))
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+
+ Compute the length of the hypotenous of a right triangle, with the lengths of
+ the other two sides of the triangle stored as packed single-precision (32-bit)
+ floating-point elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := SQRT(POW(a[i+31:i], 2.0) + POW(b[i+31:i], 2.0))
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed double-precision (64-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := SIN(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed single-precision (32-bit) floating-point elements in
+ "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := SIN(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+
+ Compute the sine and cosine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", and store the cosine into
+ memory at "mem_addr".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := SIN(a[i+63:i])
+ MEM[mem_addr+i+63:mem_addr+i] := COS(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+
+ Compute the sine and cosine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, store the sine in "dst", and store the cosine into
+ memory at "mem_addr".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := SIN(a[i+31:i])
+ MEM[mem_addr+i+31:mem_addr+i] := COS(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed double-precision (64-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := SIND(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the sine of packed single-precision (32-bit) floating-point elements in
+ "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := SIND(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic sine of packed double-precision (64-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := SINH(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic sine of packed single-precision (32-bit) floating-point
+ elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := SINH(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := TAN(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := TAN(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed double-precision (64-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := TAND(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the tangent of packed single-precision (32-bit) floating-point elements
+ in "a" expressed in degrees, and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := TAND(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic tangent of packed double-precision (64-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := TANH(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the hyperbolic tangent of packed single-precision (32-bit)
+ floating-point elements in "a" expressed in radians, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := TANH(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Trigonometry
+
+
+
+
+ Compute the cube root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := CubeRoot(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the cube root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := CubeRoot(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed complex
+ numbers in "a", and store the complex results in "dst". Each complex number is composed
+ of two adjacent single-precision (32-bit) floating-point elements, which defines the
+ complex number "complex = vec.fp32[0] + i * vec.fp32[1]".
+
+ DEFINE CEXP(a[31:0], b[31:0]) {
+ result[31:0] := POW(FP32(e), a[31:0]) * COS(b[31:0])
+ result[63:32] := POW(FP32(e), a[31:0]) * SIN(b[31:0])
+ RETURN result
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := CEXP(a[i+31:i], a[i+63:i+32])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of packed complex numbers in "a", and store the
+ complex results in "dst". Each complex number is composed of two adjacent
+ single-precision (32-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp32[0] + i * vec.fp32[1]".
+
+ DEFINE CLOG(a[31:0], b[31:0]) {
+ result[31:0] := LOG(SQRT(POW(a, 2.0) + POW(b, 2.0)))
+ result[63:32] := ATAN2(b, a)
+ RETURN result
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := CLOG(a[i+31:i], a[i+63:i+32])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed complex snumbers in "a", and store the
+ complex results in "dst". Each complex number is composed of two adjacent
+ single-precision (32-bit) floating-point elements, which defines the complex number
+ "complex = vec.fp32[0] + i * vec.fp32[1]".
+
+ DEFINE CSQRT(a[31:0], b[31:0]) {
+ sign[31:0] := (b < 0.0) ? -FP32(1.0) : FP32(1.0)
+ result[31:0] := SQRT((a + SQRT(POW(a, 2.0) + POW(b, 2.0))) / 2.0)
+ result[63:32] := sign * SQRT((-a + SQRT(POW(a, 2.0) + POW(b, 2.0))) / 2.0)
+ RETURN result
+ }
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := CSQRT(a[i+31:i], a[i+63:i+32])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := POW(e, a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := POW(FP32(e), a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := POW(10.0, a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 10 raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := POW(FP32(10.0), a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 2 raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := POW(2.0, a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of 2 raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", and store the results in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ double-precision (64-bit) floating-point elements in "a", subtract one from each
+ element, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := POW(e, a[i+63:i]) - 1.0
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the exponential value of "e" raised to the power of packed
+ single-precision (32-bit) floating-point elements in "a", subtract one from each
+ element, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := POW(FP32(e), a[i+31:i]) - 1.0
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the inverse cube root of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := InvCubeRoot(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the inverse cube root of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := InvCubeRoot(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the inverse square root of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := InvSQRT(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the inverse square root of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := InvSQRT(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := LOG(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := LOG(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the base-10 logarithm of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := LOG(a[i+63:i]) / LOG(10.0)
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the base-10 logarithm of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := LOG(a[i+31:i]) / LOG(10.0)
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of one plus packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := LOG(1.0 + a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the natural logarithm of one plus packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := LOG(1.0 + a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the base-2 logarithm of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := LOG(a[i+63:i]) / LOG(2.0)
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the base-2 logarithm of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := LOG(a[i+31:i]) / LOG(2.0)
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Convert the exponent of each packed double-precision (64-bit) floating-point
+ element in "a" to a double-precision floating-point number representing the integer
+ exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ConvertExpFP64(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Convert the exponent of each packed single-precision (32-bit) floating-point
+ element in "a" to a single-precision floating-point number representing the integer
+ exponent, and store the results in "dst". This intrinsic essentially calculates
+ "floor(log2(x))" for each element.
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ConvertExpFP32(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the exponential value of packed double-precision (64-bit)
+ floating-point elements in "a" raised by packed elements in "b", and store the results
+ in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := POW(a[i+63:i], b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the exponential value of packed single-precision (32-bit)
+ floating-point elements in "a" raised by packed elements in "b", and store the results
+ in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := POW(a[i+31:i], b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst". Note that this intrinsic is less
+ efficient than "_mm_sqrt_pd".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst". Note that this intrinsic is less
+ efficient than "_mm_sqrt_ps".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the cumulative distribution function of packed double-precision
+ (64-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := CDFNormal(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+ Compute the cumulative distribution function of packed single-precision
+ (32-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := CDFNormal(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse cumulative distribution function of packed double-precision
+ (64-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := InverseCDFNormal(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse cumulative distribution function of packed single-precision
+ (32-bit) floating-point elements in "a" using the normal distribution, and store the
+ results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := InverseCDFNormal(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+ Compute the error function of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ERF(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+ Compute the complementary error function of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := 1.0 - ERF(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+ Compute the complementary error function of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+63:i] := 1.0 - ERF(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse complementary error function of packed double-precision
+ (64-bit) floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+63:i]))
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse complementary error function of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+31:i]))
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse error function of packed double-precision (64-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := 1.0 / ERF(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+ Compute the inverse error function of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+63:i] := 1.0 / ERF(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+
+ Divide packed signed 8-bit integers in "a" by packed elements in "b", and store
+ the truncated results in "dst".
+
+ FOR j := 0 to 15
+ i := 8*j
+ IF b[i+7:i] == 0
+ #DE
+ FI
+ dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed signed 16-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 7
+ i := 16*j
+ IF b[i+15:i] == 0
#DE
- FI
- dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed signed 8-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 63
- i := 8*j
- IF b[i+7:i] == 0
- #DE
- FI
- dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed signed 16-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 31
- i := 16*j
- IF b[i+15:i] == 0
- #DE
- FI
- dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed signed 64-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- IF b[i+63:i] == 0
- #DE
- FI
- dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the inverse square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := InvSQRT(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the inverse square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := InvSQRT(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the inverse square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := InvSQRT(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the inverse square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := InvSQRT(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed 32-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed 32-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed 8-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 63
- i := 8*j
- dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed 16-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 31
- i := 16*j
- dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed 64-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 7
- i := 64*j
- dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the base-10 logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := LOG(a[i+63:i]) / LOG(10.0)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the base-10 logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := LOG(a[i+63:i]) / LOG(10.0)
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the base-10 logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := LOG(a[i+31:i]) / LOG(10.0)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the base-10 logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := LOG(a[i+31:i]) / LOG(10.0)
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the natural logarithm of one plus packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := LOG(1.0 + a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the natural logarithm of one plus packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := LOG(1.0 + a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the natural logarithm of one plus packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := LOG(1.0 + a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the natural logarithm of one plus packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := LOG(1.0 + a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the base-2 logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := LOG(a[i+63:i]) / LOG(2.0)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the base-2 logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := LOG(a[i+63:i]) / LOG(2.0)
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the natural logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := LOG(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the natural logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := LOG(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Compute the natural logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := LOG(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Compute the natural logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := LOG(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision floating-point number representing the integer exponent, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision floating-point number representing the integer exponent, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
- Rounds each packed double-precision (64-bit) floating-point element in "a" to the nearest integer value and stores the results as packed double-precision floating-point elements in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := NearbyInt(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Rounds each packed double-precision (64-bit) floating-point element in "a" to the nearest integer value and stores the results as packed double-precision floating-point elements in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := NearbyInt(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
- Rounds each packed single-precision (32-bit) floating-point element in "a" to the nearest integer value and stores the results as packed double-precision floating-point elements in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := NearbyInt(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Rounds each packed single-precision (32-bit) floating-point element in "a" to the nearest integer value and stores the results as packed double-precision floating-point elements in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := NearbyInt(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the exponential value of packed double-precision (64-bit) floating-point elements in "a" raised by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := POW(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the exponential value of packed double-precision (64-bit) floating-point elements in "a" raised by packed elements in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := POW(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
- Compute the exponential value of packed single-precision (32-bit) floating-point elements in "a" raised by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := POW(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
-
- Compute the exponential value of packed single-precision (32-bit) floating-point elements in "a" raised by packed elements in "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := POW(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Computes the reciprocal of packed double-precision (64-bit) floating-point elements in "a", storing the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (1.0 / a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Computes the reciprocal of packed double-precision (64-bit) floating-point elements in "a", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (1.0 / a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
- Computes the reciprocal of packed single-precision (32-bit) floating-point elements in "a", storing the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (1.0 / a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Elementary Math Functions
-
-
-
-
- Computes the reciprocal of packed single-precision (32-bit) floating-point elements in "a", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
- Rounds the packed double-precision (64-bit) floating-point elements in "a" to the nearest even integer value and stores the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := RoundToNearestEven(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Rounds the packed double-precision (64-bit) floating-point elements in "a" to the nearest even integer value and stores the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := RoundToNearestEven(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
- Rounds the packed single-precision (32-bit) floating-point elements in "a" to the nearest even integer value and stores the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := RoundToNearestEven(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Rounds the packed single-precision (32-bit) floating-point elements in "a" to the nearest even integer value and stores the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := RoundToNearestEven(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" to the nearest integer value, and store the results as packed double-precision floating-point elements in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ROUND(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" to the nearest integer value, and store the results as packed double-precision floating-point elements in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ROUND(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := SIN(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SIN(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := SIN(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SIN(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the hyperbolic sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := SINH(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the hyperbolic sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SINH(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the hyperbolic sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := SINH(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the hyperbolic sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SINH(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the sine of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := SIND(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the sine of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SIND(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the sine of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := SIND(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the sine of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SIND(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := TAN(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := TAN(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := TAN(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := TAN(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := TAND(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := TAND(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := TAND(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := TAND(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the hyperbolic tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := TANH(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the hyperbolic tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := TANH(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
- Compute the hyperbolic tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := TANH(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
- Compute the hyperbolic tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := TANH(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
- Truncate the packed double-precision (64-bit) floating-point elements in "a", and store the results as packed double-precision floating-point elements in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := TRUNCATE(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Truncate the packed double-precision (64-bit) floating-point elements in "a", and store the results as packed double-precision floating-point elements in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := TRUNCATE(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
- Truncate the packed single-precision (32-bit) floating-point elements in "a", and store the results as packed single-precision floating-point elements in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := TRUNCATE(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Special Math Functions
-
-
-
-
- Truncate the packed single-precision (32-bit) floating-point elements in "a", and store the results as packed single-precision floating-point elements in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := TRUNCATE(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 15
- i := 32*j
- IF b[i+31:i] == 0
- #DE
- FI
- dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := 32*j
- IF k[j]
- IF b[i+31:i] == 0
+ FI
+ dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 32-bit integers in "a" by packed elements in "b", and store the
+ truncated results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF b[i+31:i] == 0
+ #DE
+ FI
+ dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed signed 64-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ IF b[i+63:i] == 0
+ #DE
+ FI
+ dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 15
+ i := 8*j
+ IF b[i+7:i] == 0
+ #DE
+ FI
+ dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 7
+ i := 16*j
+ IF b[i+15:i] == 0
+ #DE
+ FI
+ dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ IF b[i+31:i] == 0
+ #DE
+ FI
+ dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ IF b[i+63:i] == 0
#DE
- FI
- dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 63
- i := 8*j
- IF b[i+7:i] == 0
- #DE
- FI
- dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 31
- i := 16*j
- IF b[i+15:i] == 0
- #DE
- FI
- dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 7
- i := 64*j
- IF b[i+63:i] == 0
- #DE
- FI
- dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 15
- i := 32*j
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := 32*j
- IF k[j]
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 63
- i := 8*j
- dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 31
- i := 16*j
- dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Arithmetic
-
-
-
- Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 7
- i := 64*j
- dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Performs bitwise OR between "k1" and "k2", storing the result in "dst". ZF flag is set if "dst" is 0.
- dst[15:0] := k1[15:0] | k2[15:0]
-IF dst == 0
- SetZF()
-FI
-
-
-
-
-
- Mask
- AVX512F
- Mask
-
-
-
- Performs bitwise OR between "k1" and "k2", storing the result in "dst". CF flag is set if "dst" consists of all 1's.
- dst[15:0] := k1[15:0] | k2[15:0]
-IF PopCount(dst[15:0]) == 16
- SetCF()
-FI
-
-
-
-
-
- AVX512F
- Mask
-
-
- Converts bit mask "k1" into an integer value, storing the results in "dst".
-
-dst := ZeroExtend32(k1)
-
-
-
-
-
- AVX512F
- Mask
-
-
- Converts integer "mask" into bitmask, storing the result in "dst".
-
-dst := mask[15:0]
-
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
- Multiplies elements in packed 64-bit integer vectors "a" and "b" together, storing the lower 64 bits of the result in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- AVX512F
- Store
-
-
-
-
-
- Multiplies elements in packed 64-bit integer vectors "a" and "b" together, storing the lower 64 bits of the result in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
- Compute the sine and cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, store the sine in "dst", and store the cosine into memory at "mem_addr".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := SIN(a[i+63:i])
- MEM[mem_addr+i+63:mem_addr+i] := COS(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-cos_res[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
-
-
- Compute the sine and cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, store the sine in "dst", store the cosine into memory at "mem_addr". Elements are written to their respective locations using writemask "k" (elements are copied from "sin_src" or "cos_src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := SIN(a[i+63:i])
- MEM[mem_addr+i+63:mem_addr+i] := COS(a[i+63:i])
- ELSE
- dst[i+63:i] := sin_src[i+63:i]
- MEM[mem_addr+i+63:mem_addr+i] := cos_src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-cos_res[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
- Compute the sine and cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, store the sine in "dst", and store the cosine into memory at "mem_addr".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := SIN(a[i+31:i])
- MEM[mem_addr+i+31:mem_addr+i] := COS(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-cos_res[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Trigonometry
-
-
-
-
-
-
- Compute the sine and cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, store the sine in "dst", store the cosine into memory at "mem_addr". Elements are written to their respective locations using writemask "k" (elements are copied from "sin_src" or "cos_src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := SIN(a[i+31:i])
- MEM[mem_addr+i+31:mem_addr+i] := COS(a[i+31:i])
- ELSE
- dst[i+31:i] := sin_src[i+31:i]
- MEM[mem_addr+i+31:mem_addr+i] := cos_src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-cos_res[MAX:512] := 0
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Copy the lower single-precision (32-bit) floating-point element of "a" to "dst".
-
-dst[31:0] := a[31:0]
-
-
-
-
-
- Floating Point
- AVX512F
- Convert
-
-
- Copy the lower double-precision (64-bit) floating-point element of "a" to "dst".
-
-dst[63:0] := a[63:0]
-
-
-
-
-
- Integer
- AVX512F
- Convert
-
-
- Copy the lower 32-bit integer in "a" to "dst".
-
-dst[31:0] := a[31:0]
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
- Concatenate "a" and "b" into a 128-byte immediate result, shift the result right by "imm8" 32-bit elements, and store the low 64 bytes (16 elements) in "dst".
-
-temp[1023:512] := a[511:0]
-temp[511:0] := b[511:0]
-temp[1023:0] := temp[1023:0] >> (32*imm8[3:0])
-dst[511:0] := temp[511:0]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
-
-
- Concatenate "a" and "b" into a 128-byte immediate result, shift the result right by "imm8" 32-bit elements, and store the low 64 bytes (16 elements) in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-temp[1023:512] := a[511:0]
-temp[511:0] := b[511:0]
-temp[1023:0] := temp[1023:0] >> (32*imm8[3:0])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := temp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Swizzle
-
-
-
-
- Blend packed double-precision (64-bit) floating-point elements from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Swizzle
-
-
-
-
- Blend packed single-precision (32-bit) floating-point elements from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 7
- i := j*64
- k[j] := (a[i+63:i] OP b[i+63:i]) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k". [sae_note]
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 7
- i := j*64
- k[j] := (a[i+63:i] OP b[i+63:i]) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := (a[i+63:i] == b[i+63:i]) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := (a[i+63:i] <= b[i+63:i]) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := (a[i+63:i] < b[i+63:i]) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := (a[i+63:i] != b[i+63:i]) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for not-less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := (!(a[i+63:i] <= b[i+63:i])) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for not-less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 7
- i := j*64
- k[j] := (!(a[i+63:i] < b[i+63:i])) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" to see if neither is NaN, and store the results in mask vector "k".
- FOR j := 0 to 7
- i := j*64
- k[j] := (a[i+63:i] != NaN AND b[i+63:i] != NaN) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" to see if either is NaN, and store the results in mask vector "k".
- FOR j := 0 to 7
- i := j*64
- k[j] := (a[i+63:i] == NaN OR b[i+63:i] == NaN) ? 1 : 0
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := ( a[i+63:i] OP b[i+63:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := (a[i+63:i] == b[i+63:i]) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := (a[i+63:i] <= b[i+63:i]) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := (a[i+63:i] < b[i+63:i]) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := (a[i+63:i] != b[i+63:i]) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for not-less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := (!(a[i+63:i] <= b[i+63:i])) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for not-less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := (!(a[i+63:i] < b[i+63:i])) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" to see if neither is NaN, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := (a[i+63:i] != NaN AND b[i+63:i] != NaN) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" to see if either is NaN, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k1[j]
- k[j] := (a[i+63:i] == NaN OR b[i+63:i] == NaN) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:8] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 15
- i := j*32
- k[j] := (a[i+31:i] OP b[i+31:i]) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k". [sae_note]
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 15
- i := j*32
- k[j] := (a[i+31:i] OP b[i+31:i]) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := (a[i+31:i] == b[i+31:i]) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := (a[i+31:i] <= b[i+31:i]) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := (a[i+31:i] < b[i+31:i]) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := (a[i+31:i] != b[i+31:i]) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := (!(a[i+31:i] <= b[i+31:i])) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := (!(a[i+31:i] < b[i+31:i])) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" to see if neither is NaN, and store the results in mask vector "k".
- FOR j := 0 to 15
- i := j*32
- k[j] := ((a[i+31:i] != NaN) AND (b[i+31:i] != NaN)) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" to see if either is NaN, and store the results in mask vector "k".
- FOR j := 0 to 15
- i := j*32
- k[j] := ((a[i+31:i] == NaN) OR (b[i+31:i] == NaN)) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set). [sae_note]
- CASE (imm8[4:0]) OF
-0: OP := _CMP_EQ_OQ
-1: OP := _CMP_LT_OS
-2: OP := _CMP_LE_OS
-3: OP := _CMP_UNORD_Q
-4: OP := _CMP_NEQ_UQ
-5: OP := _CMP_NLT_US
-6: OP := _CMP_NLE_US
-7: OP := _CMP_ORD_Q
-8: OP := _CMP_EQ_UQ
-9: OP := _CMP_NGE_US
-10: OP := _CMP_NGT_US
-11: OP := _CMP_FALSE_OQ
-12: OP := _CMP_NEQ_OQ
-13: OP := _CMP_GE_OS
-14: OP := _CMP_GT_OS
-15: OP := _CMP_TRUE_UQ
-16: OP := _CMP_EQ_OS
-17: OP := _CMP_LT_OQ
-18: OP := _CMP_LE_OQ
-19: OP := _CMP_UNORD_S
-20: OP := _CMP_NEQ_US
-21: OP := _CMP_NLT_UQ
-22: OP := _CMP_NLE_UQ
-23: OP := _CMP_ORD_S
-24: OP := _CMP_EQ_US
-25: OP := _CMP_NGE_UQ
-26: OP := _CMP_NGT_UQ
-27: OP := _CMP_FALSE_OS
-28: OP := _CMP_NEQ_OS
-29: OP := _CMP_GE_OQ
-30: OP := _CMP_GT_OQ
-31: OP := _CMP_TRUE_US
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := (a[i+31:i] == b[i+31:i]) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := (a[i+31:i] <= b[i+31:i]) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := (a[i+31:i] < b[i+31:i]) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := (a[i+31:i] != b[i+31:i]) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := (!(a[i+31:i] <= b[i+31:i])) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := (!(a[i+31:i] < b[i+31:i])) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" to see if neither is NaN, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ((a[i+31:i] != NaN) AND (b[i+31:i] != NaN)) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" to see if either is NaN, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ((a[i+31:i] == NaN) OR (b[i+31:i] == NaN)) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := c[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set). [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
- Gather single-precision (32-bit) floating-point elements from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- [sae_note]
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision (64-bit) floating-point number representing the integer exponent, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- [sae_note]
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- [sae_note]
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision (32-bit) floating-point number representing the integer exponent, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "floor(log2(x))" for each element.
- [sae_note]
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
-
-
-
- Normalize the mantissas of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := GetNormalizedMantissa(a[i+63:i], sc, interv)
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note]
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Miscellaneous
-
-
-
-
-
-
-
- Normalize the mantissas of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). This intrinsic essentially calculates "±(2^k)*|x.significand|", where "k" depends on the interval range defined by "interv" and the sign depends on "sc" and the source sign.
- [getmant_note][sae_note]
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := GetNormalizedMantissa(a[i+31:i], sc, interv)
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
- Load 512-bits (composed of 8 packed double-precision (64-bit) floating-point elements) from memory into "dst".
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
-
-
- Load packed double-precision (64-bit) floating-point elements from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Move
-
-
-
-
- Move packed double-precision (64-bit) floating-point elements from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
-
- Store packed double-precision (64-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
- Store 512-bits (composed of 8 packed double-precision (64-bit) floating-point elements) from "a" into memory.
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
- Load 512-bits (composed of 16 packed single-precision (32-bit) floating-point elements) from memory into "dst".
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
-
-
- Load packed single-precision (32-bit) floating-point elements from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Move
-
-
-
-
- Move packed single-precision (32-bit) floating-point elements from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
-
- Store packed single-precision (32-bit) floating-point elements from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
- Store 512-bits (composed of 16 packed single-precision (32-bit) floating-point elements) from "a" into memory.
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
- Load 512-bits (composed of 16 packed 32-bit integers) from memory into "dst".
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
- Load 512-bits of integer data from memory into "dst".
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
-
-
- Load packed 32-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Move
-
-
-
-
- Move packed 32-bit integers from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Store
-
-
-
-
- Store packed 32-bit integers from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- MEM[mem_addr+i+31:mem_addr+i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Store
-
-
-
- Store 512-bits (composed of 16 packed 32-bit integers) from "a" into memory.
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Store
-
-
-
- Store 512-bits of integer data from "a" into memory.
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
- Load 512-bits (composed of 8 packed 64-bit integers) from memory into "dst".
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-dst[511:0] := MEM[mem_addr+511:mem_addr]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
-
-
- Load packed 64-bit integers from memory into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := MEM[mem_addr+i+63:mem_addr+i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Move
-
-
-
-
- Move packed 64-bit integers from "a" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Store
-
-
-
-
- Store packed 64-bit integers from "a" into memory using writemask "k".
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- MEM[mem_addr+i+63:mem_addr+i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Store
-
-
-
- Store 512-bits (composed of 8 packed 64-bit integers) from "a" into memory.
- "mem_addr" must be aligned on a 64-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+511:mem_addr] := a[511:0]
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). RM.
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). RM.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Add packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Add packed 32-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] AND b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise AND of 512 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[511:0] := (a[511:0] AND b[511:0])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (NOT a[i+31:i]) AND b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise NOT of 512 bits (representing integer data) in "a" and then AND with "b", and store the result in "dst".
-
-dst[511:0] := ((NOT a[511:0]) AND b[511:0])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed 32-bit integers in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise NOT of 512 bits (composed of packed 64-bit integers) in "a" and then AND with "b", and store the results in "dst".
-
-dst[511:0] := ((NOT a[511:0]) AND b[511:0])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
-
-
- Compute the bitwise NOT of packed 64-bit integers in "a" and then AND with "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise AND of 512 bits (composed of packed 64-bit integers) in "a" and "b", and store the results in "dst".
-
-dst[511:0] := (a[511:0] AND b[511:0])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
-
-
- Compute the bitwise AND of packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] AND b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Swizzle
-
-
-
-
- Blend packed 32-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Swizzle
-
-
-
-
- Blend packed 64-bit integers from "a" and "b" using control mask "k", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k".
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" based on the comparison operand specified by "imm8", and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
- CASE (imm8[2:0]) OF
-0: OP := _MM_CMPINT_EQ
-1: OP := _MM_CMPINT_LT
-2: OP := _MM_CMPINT_LE
-3: OP := _MM_CMPINT_FALSE
-4: OP := _MM_CMPINT_NE
-5: OP := _MM_CMPINT_NLT
-6: OP := _MM_CMPINT_NLE
-7: OP := _MM_CMPINT_TRUE
-ESAC
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] OP b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for equality, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] == b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] >= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for greater-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] > b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] <= b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Compare
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b" for not-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] != b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Swizzle
-
-
-
-
-
- Shuffle 32-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). Note that this intrinsic shuffles across 128-bit lanes, unlike past intrinsics that use the "permutevar" name. This intrinsic is identical to "_mm512_mask_permutexvar_epi32", and it is recommended that you use that intrinsic name.
-
-FOR j := 0 to 15
- i := j*32
- id := idx[i+3:i]*32
- IF k[j]
- dst[i+31:i] := a[id+31:id]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Swizzle
-
-
-
- Shuffle 32-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst". Note that this intrinsic shuffles across 128-bit lanes, unlike past intrinsics that use the "permutevar" name. This intrinsic is identical to "_mm512_permutexvar_epi32", and it is recommended that you use that intrinsic name.
-
-FOR j := 0 to 15
- i := j*32
- id := idx[i+3:i]*32
- dst[i+31:i] := a[id+31:id]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
-
-
- Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst". "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
- Gather 32-bit integers from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed maximum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed minimum values in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Multiply the packed 32-bit integers in "a" and "b", producing intermediate 64-bit integers, and store the low 32 bits of the intermediate integers in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- tmp[63:0] := a[i+31:i] * b[i+31:i]
- dst[i+31:i] := tmp[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Multiply the packed 32-bit integers in "a" and "b", producing intermediate 64-bit integers, and store the low 32 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 15
- i := j*32
- tmp[63:0] := a[i+31:i] * b[i+31:i]
- dst[i+31:i] := tmp[31:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise OR of packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise OR of 512 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[511:0] := (a[511:0] OR b[511:0])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
-
-
- Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise OR of packed 64-bit integers in "a" and "b", and store the resut in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Store
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Store
-
-
-
-
-
-
- Scatter 32-bit integers from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Swizzle
-
-
-
-
-
- Shuffle 32-bit integers in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-tmp_dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-tmp_dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-tmp_dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-tmp_dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-tmp_dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-tmp_dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-tmp_dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-tmp_dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-tmp_dst[287:256] := SELECT4(a[383:256], imm8[1:0])
-tmp_dst[319:288] := SELECT4(a[383:256], imm8[3:2])
-tmp_dst[351:320] := SELECT4(a[383:256], imm8[5:4])
-tmp_dst[383:352] := SELECT4(a[383:256], imm8[7:6])
-tmp_dst[415:384] := SELECT4(a[511:384], imm8[1:0])
-tmp_dst[447:416] := SELECT4(a[511:384], imm8[3:2])
-tmp_dst[479:448] := SELECT4(a[511:384], imm8[5:4])
-tmp_dst[511:480] := SELECT4(a[511:384], imm8[7:6])
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := tmp_dst[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Swizzle
-
-
-
- Shuffle 32-bit integers in "a" within 128-bit lanes using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-dst[159:128] := SELECT4(a[255:128], imm8[1:0])
-dst[191:160] := SELECT4(a[255:128], imm8[3:2])
-dst[223:192] := SELECT4(a[255:128], imm8[5:4])
-dst[255:224] := SELECT4(a[255:128], imm8[7:6])
-dst[287:256] := SELECT4(a[383:256], imm8[1:0])
-dst[319:288] := SELECT4(a[383:256], imm8[3:2])
-dst[351:320] := SELECT4(a[383:256], imm8[5:4])
-dst[383:352] := SELECT4(a[383:256], imm8[7:6])
-dst[415:384] := SELECT4(a[511:384], imm8[1:0])
-dst[447:416] := SELECT4(a[511:384], imm8[3:2])
-dst[479:448] := SELECT4(a[511:384], imm8[5:4])
-dst[511:480] := SELECT4(a[511:384], imm8[7:6])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
+ FI
+ dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+ Compute the error function of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ERF(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 32-bit integers in "a" by packed elements in "b", and store the
+ truncated results in "dst".
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed 32-bit integers in "a" by packed elements in "b", store the
+ truncated results in "dst", and store the remainders as packed 32-bit integers into
+ memory at "mem_addr".
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
+ MEM[mem_addr+i+31:mem_addr+i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 32-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 8-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 15
+ i := 8*j
+ dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 16-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 7
+ i := 16*j
+ dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 32-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed 64-bit integers in "a" by packed elements in "b", and store the
+ remainders as packed 32-bit integers in "dst".
+ FOR j := 0 to 1
+ i := 64*j
+ dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 15
+ i := 8*j
+ dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 7
+ i := 16*j
+ dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 1
+ i := 64*j
+ dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the truncated results in "dst".
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", store
+ the truncated results in "dst", and store the remainders as packed unsigned 32-bit
+ integers into memory at "mem_addr".
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
+ MEM[mem_addr+i+31:mem_addr+i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and
+ store the remainders as packed unsigned 32-bit integers in "dst".
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Arithmetic
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed double-precision floating-point
+ elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := CEIL(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed single-precision floating-point
+ elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := CEIL(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed double-precision floating-point
+ elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := FLOOR(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed single-precision floating-point
+ elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := FLOOR(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" to
+ the nearest integer value, and store the results as packed double-precision
+ floating-point elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd"
+ instruction.
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ROUND(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" to
+ the nearest integer value, and store the results as packed single-precision
+ floating-point elements in "dst". This intrinsic may generate the "roundps"/"vroundps"
+ instruction.
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ROUND(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+ Truncate the packed double-precision (64-bit) floating-point elements in "a",
+ and store the results as packed double-precision floating-point elements in "dst". This
+ intrinsic may generate the "roundpd"/"vroundpd" instruction.
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := TRUNCATE(a[i+63:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Miscellaneous
+
+
+
+
+ Truncate the packed single-precision (32-bit) floating-point elements in "a",
+ and store the results as packed single-precision floating-point elements in "dst". This
+ intrinsic may generate the "roundps"/"vroundps" instruction.
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := TRUNCATE(a[i+31:i])
+ ENDFOR
+ dst[MAX:128] := 0
+
+ SSE
+
+ Miscellaneous
+
+
+
+
+
+
+
+
+
+ Macro: Transpose the 4x4 matrix formed by the 4 rows of single-precision
+ (32-bit) floating-point elements in "row0", "row1", "row2", and "row3", and store the
+ transposed matrix in these vectors ("row0" now contains column 0, etc.).
+
+ __m128 tmp3, tmp2, tmp1, tmp0;
+ tmp0 := _mm_unpacklo_ps(row0, row1);
+ tmp2 := _mm_unpacklo_ps(row2, row3);
+ tmp1 := _mm_unpackhi_ps(row0, row1);
+ tmp3 := _mm_unpackhi_ps(row2, row3);
+ row0 := _mm_movelh_ps(tmp0, tmp2);
+ row1 := _mm_movehl_ps(tmp2, tmp0);
+ row2 := _mm_movelh_ps(tmp1, tmp3);
+ row3 := _mm_movehl_ps(tmp3, tmp1);
+
+ SSE
+
+ Swizzle
+
+
+
+
+
+ Extract a 16-bit integer from "a", selected with "imm8", and store the result
+ in the lower element of "dst".
+
+ dst[15:0] := (a[63:0] >> (imm8[1:0] * 16))[15:0]
+ dst[31:16] := 0
+
+
+ SSE
+
+ Swizzle
+
+
+
+
+
+ Extract a 16-bit integer from "a", selected with "imm8", and store the result
+ in the lower element of "dst".
+
+ dst[15:0] := (a[63:0] >> (imm8[1:0] * 16))[15:0]
+ dst[31:16] := 0
+
+
+ SSE
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", and insert the 16-bit integer "i" into "dst" at the location
+ specified by "imm8".
+
+ dst[63:0] := a[63:0]
+ sel := imm8[1:0]*16
+ dst[sel+15:sel] := i[15:0]
+
+
+ SSE
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", and insert the 16-bit integer "i" into "dst" at the location
+ specified by "imm8".
+
+ dst[63:0] := a[63:0]
+ sel := imm8[1:0]*16
+ dst[sel+15:sel] := i[15:0]
+
+
+ SSE
+
+ Swizzle
+
+
+
+
+
+ Shuffle 16-bit integers in "a" using the control in "imm8", and store the
+ results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[15:0] := src[15:0]
+ 1: tmp[15:0] := src[31:16]
+ 2: tmp[15:0] := src[47:32]
+ 3: tmp[15:0] := src[63:48]
+ ESAC
+ RETURN tmp[15:0]
+ }
+ dst[15:0] := SELECT4(a[63:0], imm8[1:0])
+ dst[31:16] := SELECT4(a[63:0], imm8[3:2])
+ dst[47:32] := SELECT4(a[63:0], imm8[5:4])
+ dst[63:48] := SELECT4(a[63:0], imm8[7:6])
+
+
+ SSE
+
+ Swizzle
+
+
+
+
+
+ Shuffle 16-bit integers in "a" using the control in "imm8", and store the
+ results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[15:0] := src[15:0]
+ 1: tmp[15:0] := src[31:16]
+ 2: tmp[15:0] := src[47:32]
+ 3: tmp[15:0] := src[63:48]
+ ESAC
+ RETURN tmp[15:0]
+ }
+ dst[15:0] := SELECT4(a[63:0], imm8[1:0])
+ dst[31:16] := SELECT4(a[63:0], imm8[3:2])
+ dst[47:32] := SELECT4(a[63:0], imm8[5:4])
+ dst[63:48] := SELECT4(a[63:0], imm8[7:6])
+
+
+ SSE
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle single-precision (32-bit) floating-point elements in "a" using the
+ control in "imm8", and store the results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
+ ESAC
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ dst[95:64] := SELECT4(b[127:0], imm8[5:4])
+ dst[127:96] := SELECT4(b[127:0], imm8[7:6])
+
+
+ SSE
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the high half "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+
+
+ SSE
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave single-precision (32-bit) floating-point elements from
+ the low half of "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+
+
+ SSE
+
+ Swizzle
+
+
+
+
+ Get the unsigned 32-bit value of the MXCSR control and status register.
+ dst[31:0] := MXCSR
+
+
+ SSE
+
+ General Support
+
+
+
+
+ Set the MXCSR control and status register with the value in unsigned 32-bit
+ integer "a".
+
+ MXCSR := a[31:0]
+
+
+ SSE
+
+ General Support
+
+
+
+ Macro: Get the exception state bits from the MXCSR control and status register.
+ The exception state may contain any of the following flags: _MM_EXCEPT_INVALID,
+ _MM_EXCEPT_DIV_ZERO, _MM_EXCEPT_DENORM, _MM_EXCEPT_OVERFLOW, _MM_EXCEPT_UNDERFLOW,
+ _MM_EXCEPT_INEXACT
+ dst[31:0] := MXCSR & _MM_EXCEPT_MASK
+
+ SSE
+
+ General Support
+
+
+
+
+ Macro: Set the exception state bits of the MXCSR control and status register to
+ the value in unsigned 32-bit integer "a". The exception state may contain any of the
+ following flags: _MM_EXCEPT_INVALID, _MM_EXCEPT_DIV_ZERO, _MM_EXCEPT_DENORM,
+ _MM_EXCEPT_OVERFLOW, _MM_EXCEPT_UNDERFLOW, _MM_EXCEPT_INEXACT
+ MXCSR := a[31:0] AND ~_MM_EXCEPT_MASK
+
+ SSE
+
+ General Support
+
+
+
+ Macro: Get the exception mask bits from the MXCSR control and status register.
+ The exception mask may contain any of the following flags: _MM_MASK_INVALID,
+ _MM_MASK_DIV_ZERO, _MM_MASK_DENORM, _MM_MASK_OVERFLOW, _MM_MASK_UNDERFLOW,
+ _MM_MASK_INEXACT
+ dst[31:0] := MXCSR & _MM_MASK_MASK
+
+ SSE
+
+ General Support
+
+
+
+
+ Macro: Set the exception mask bits of the MXCSR control and status register to
+ the value in unsigned 32-bit integer "a". The exception mask may contain any of the
+ following flags: _MM_MASK_INVALID, _MM_MASK_DIV_ZERO, _MM_MASK_DENORM,
+ _MM_MASK_OVERFLOW, _MM_MASK_UNDERFLOW, _MM_MASK_INEXACT
+ MXCSR := a[31:0] AND ~_MM_MASK_MASK
+
+ SSE
+
+ General Support
+
+
+
+ Macro: Get the rounding mode bits from the MXCSR control and status register.
+ The rounding mode may contain any of the following flags: _MM_ROUND_NEAREST,
+ _MM_ROUND_DOWN, _MM_ROUND_UP, _MM_ROUND_TOWARD_ZERO
+ dst[31:0] := MXCSR & _MM_ROUND_MASK
+
+ SSE
+
+ General Support
+
+
+
+
+ Macro: Set the rounding mode bits of the MXCSR control and status register to
+ the value in unsigned 32-bit integer "a". The rounding mode may contain any of the
+ following flags: _MM_ROUND_NEAREST, _MM_ROUND_DOWN, _MM_ROUND_UP, _MM_ROUND_TOWARD_ZERO
+ MXCSR := a[31:0] AND ~_MM_ROUND_MASK
+
+ SSE
+
+ General Support
+
+
+
+ Macro: Get the flush zero bits from the MXCSR control and status register. The
+ flush zero may contain any of the following flags: _MM_FLUSH_ZERO_ON or
+ _MM_FLUSH_ZERO_OFF
+ dst[31:0] := MXCSR & _MM_FLUSH_MASK
+
+ SSE
+
+ General Support
+
+
+
+
+ Macro: Set the flush zero bits of the MXCSR control and status register to the
+ value in unsigned 32-bit integer "a". The flush zero may contain any of the following
+ flags: _MM_FLUSH_ZERO_ON or _MM_FLUSH_ZERO_OFF
+ MXCSR := a[31:0] AND ~_MM_FLUSH_MASK
+
+ SSE
+
+ General Support
+
+
+
+
+
+ Fetch the line of data from memory that contains address "p" to a location in
+ the cache hierarchy specified by the locality hint "i", which can be one of:<ul>
+ <li>_MM_HINT_T0 // 3, move data using the T0 hint. The PREFETCHT0 instruction will
+ be generated.</li>
+ <li>_MM_HINT_T1 // 2, move data using the T1 hint. The PREFETCHT1 instruction will
+ be generated.</li>
+ <li>_MM_HINT_T2 // 1, move data using the T2 hint. The PREFETCHT2 instruction will
+ be generated.</li>
+ <li>_MM_HINT_NTA // 0, move data using the non-temporal access (NTA) hint. The
+ PREFETCHNTA instruction will be generated.</li>
+
+
+
+
+
+ SSE
+
+ General Support
+
+
+
+
+ Perform a serializing operation on all store-to-memory instructions that were
+ issued prior to this instruction. Guarantees that every store instruction that precedes,
+ in program order, is globally visible before any store instruction which follows the
+ fence in program order.
+
+ SSE
+
+ General Support
+
+
+
+
+
+ Allocate "size" bytes of memory, aligned to the alignment specified in "align",
+ and return a pointer to the allocated memory. "_mm_free" should be used to free memory
+ that is allocated with "_mm_malloc".
+ SSE
+
+ General Support
+
+
+
+
+ Free aligned memory that was allocated with "_mm_malloc".
+ SSE
+
+ General Support
+
+
+
+
+ Return vector of type __m128 with undefined elements.
+ SSE
+
+ General Support
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ENDFOR
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ENDFOR
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ENDFOR
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ENDFOR
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ENDFOR
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ENDFOR
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ENDFOR
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ENDFOR
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst", and copy the upper 3 packed
+ elements from "a" to the upper element of "dst". [min_float_note]
+
+ dst[31:0] := MIN(a[31:0], b[31:0])
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst". [min_float_note]
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ENDFOR
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst", and copy the upper 3 packed
+ elements from "a" to the upper element of "dst". [max_float_note]
+
+ dst[31:0] := MAX(a[31:0], b[31:0])
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst". [max_float_note]
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ENDFOR
+
+
+ SSE
+
+ Special Math Functions
+
+
+
+
+
+ Multiply the packed unsigned 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed unsigned 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+
+
+ SSE
+
+ Arithmetic
+
+
+ Miscellaneous
+
+
+
+ Compute the absolute differences of packed unsigned 8-bit integers in "a" and
+ "b", then horizontally sum each consecutive 8 differences to produce four unsigned
+ 16-bit integers, and pack these unsigned 16-bit integers in the low 16 bits of "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i])
+ ENDFOR
+ dst[15:0] := tmp[7:0] + tmp[15:8] + tmp[23:16] + tmp[31:24] + tmp[39:32] + tmp[47:40] +
+ tmp[55:48] + tmp[63:56]
+ dst[63:16] := 0
+
+
+ SSE
+
+ Arithmetic
+
+
+ Miscellaneous
+
+
+
+ Compute the absolute differences of packed unsigned 8-bit integers in "a" and
+ "b", then horizontally sum each consecutive 8 differences to produce four unsigned
+ 16-bit integers, and pack these unsigned 16-bit integers in the low 16 bits of "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i])
+ ENDFOR
+ dst[15:0] := tmp[7:0] + tmp[15:8] + tmp[23:16] + tmp[31:24] + tmp[39:32] + tmp[47:40] +
+ tmp[55:48] + tmp[63:56]
+ dst[63:16] := 0
+
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Add the lower single-precision (32-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst", and copy the upper 3 packed elements
+ from "a" to the upper elements of "dst".
+
+ dst[31:0] := a[31:0] + b[31:0]
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Add packed single-precision (32-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ENDFOR
+
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Subtract the lower single-precision (32-bit) floating-point element in "b" from
+ the lower single-precision (32-bit) floating-point element in "a", store the result in
+ the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ dst[31:0] := a[31:0] - b[31:0]
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed single-precision (32-bit) floating-point elements in "b" from
+ packed single-precision (32-bit) floating-point elements in "a", and store the results
+ in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ENDFOR
+
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Multiply the lower single-precision (32-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst", and copy the upper 3 packed
+ elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := a[31:0] * b[31:0]
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed single-precision (32-bit) floating-point elements in "a" and
+ "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[i+31:i] * b[i+31:i]
+ ENDFOR
+
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide the lower single-precision (32-bit) floating-point element in "a" by the
+ lower single-precision (32-bit) floating-point element in "b", store the result in the
+ lower element of "dst", and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ dst[31:0] := a[31:0] / b[31:0]
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Divide packed single-precision (32-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := a[i+31:i] / b[i+31:i]
+ ENDFOR
+
+
+ SSE
+
+ Arithmetic
+
+
+
+
+
+ Average packed unsigned 8-bit integers in "a" and "b", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
+ ENDFOR
+
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+
+ Average packed unsigned 8-bit integers in "a" and "b", and store the results in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
+ ENDFOR
+
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+
+ Average packed unsigned 16-bit integers in "a" and "b", and store the results
+ in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
+ ENDFOR
+
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+
+ Average packed unsigned 16-bit integers in "a" and "b", and store the results
+ in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
+ ENDFOR
+
+
+ SSE
+
+ Probability/Statistics
+
+
+
+
+
+ Convert the signed 32-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := Convert_Int32_To_FP32(b[31:0])
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Convert
+
+
+
+
+
+ Convert the signed 32-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := Convert_Int32_To_FP32(b[31:0])
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Convert
+
+
+
+
+
+ Convert the signed 64-bit integer "b" to a single-precision (32-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := Convert_Int64_To_FP32(b[63:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ SSE
+
+ Convert
+
+
+
+
+
+ Convert packed 32-bit integers in "b" to packed single-precision (32-bit)
+ floating-point elements, store the results in the lower 2 elements of "dst", and copy
+ the upper 2 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := Convert_Int32_To_FP32(b[31:0])
+ dst[63:32] := Convert_Int32_To_FP32(b[63:32])
+ dst[95:64] := a[95:64]
+ dst[127:96] := a[127:96]
+
+
+ SSE
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "b" to packed single-precision
+ (32-bit) floating-point elements, store the results in the lower 2 elements of "dst",
+ and copy the upper 2 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := Convert_Int32_To_FP32(b[31:0])
+ dst[63:32] := Convert_Int32_To_FP32(b[63:32])
+ dst[95:64] := a[95:64]
+ dst[127:96] := a[127:96]
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert packed 16-bit integers in "a" to packed single-precision (32-bit)
+ floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ m := j*32
+ dst[m+31:m] := Convert_Int16_To_FP32(a[i+15:i])
+ ENDFOR
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert packed unsigned 16-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ m := j*32
+ dst[m+31:m] := Convert_Int16_To_FP32(a[i+15:i])
+ ENDFOR
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert the lower packed 8-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*8
+ m := j*32
+ dst[m+31:m] := Convert_Int8_To_FP32(a[i+7:i])
+ ENDFOR
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert the lower packed unsigned 8-bit integers in "a" to packed
+ single-precision (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*8
+ m := j*32
+ dst[m+31:m] := Convert_Int8_To_FP32(a[i+7:i])
+ ENDFOR
+
+ SSE
+
+ Convert
+
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, store the results in the lower 2 elements of "dst",
+ then covert the packed signed 32-bit integers in "b" to single-precision (32-bit)
+ floating-point element, and store the results in the upper 2 elements of "dst".
+
+ dst[31:0] := Convert_Int32_To_FP32(a[31:0])
+ dst[63:32] := Convert_Int32_To_FP32(a[63:32])
+ dst[95:64] := Convert_Int32_To_FP32(b[31:0])
+ dst[127:96] := Convert_Int32_To_FP32(b[63:32])
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 32-bit integer, and store the result in "dst".
+
+ dst[31:0] := Convert_FP32_To_Int32(a[31:0])
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 32-bit integer, and store the result in "dst".
+
+ dst[31:0] := Convert_FP32_To_Int32(a[31:0])
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 64-bit integer, and store the result in "dst".
+
+ dst[63:0] := Convert_FP32_To_Int64(a[31:0])
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Copy the lower single-precision (32-bit) floating-point element of "a" to
+ "dst".
+
+ dst[31:0] := a[31:0]
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ENDFOR
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ENDFOR
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 32-bit integer with truncation, and store the result in "dst".
+
+ dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0])
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 32-bit integer with truncation, and store the result in "dst".
+
+ dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0])
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "a" to a
+ 64-bit integer with truncation, and store the result in "dst".
+
+ dst[63:0] := Convert_FP32_To_Int64_Truncate(a[31:0])
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ENDFOR
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ENDFOR
+
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 16-bit integers, and store the results in "dst". Note: this intrinsic will
+ generate 0x7FFF, rather than 0x8000, for input values between 0x7FFF and 0x7FFFFFFF.
+
+ FOR j := 0 to 3
+ i := 16*j
+ k := 32*j
+ IF a[k+31:k] >= FP32(0x7FFF) && a[k+31:k] <= FP32(0x7FFFFFFF)
+ dst[i+15:i] := 0x7FFF
+ ELSE
+ dst[i+15:i] := Convert_FP32_To_Int16(a[k+31:k])
+ FI
+ ENDFOR
+
+ SSE
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 8-bit integers, and store the results in lower 4 elements of "dst". Note: this
+ intrinsic will generate 0x7F, rather than 0x80, for input values between 0x7F and
+ 0x7FFFFFFF.
+
+ FOR j := 0 to 3
+ i := 8*j
+ k := 32*j
+ IF a[k+31:k] >= FP32(0x7F) && a[k+31:k] <= FP32(0x7FFFFFFF)
+ dst[i+7:i] := 0x7F
+ ELSE
+ dst[i+7:i] := Convert_FP32_To_Int8(a[k+31:k])
+ FI
+ ENDFOR
+
+ SSE
+
+ Convert
+
+
+
+
+
+ Store 64-bits of integer data from "a" into memory using a non-temporal memory
+ hint.
+
+ MEM[mem_addr+63:mem_addr] := a[63:0]
+
+
+ SSE
+
+ Store
+
+
+
+
+
+
+ Conditionally store 8-bit integer elements from "a" into memory using "mask"
+ (elements are not stored when the highest bit is not set in the corresponding element)
+ and a non-temporal memory hint.
+
+ FOR j := 0 to 7
+ i := j*8
+ IF mask[i+7]
+ MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
+ FI
+ ENDFOR
+
+
+ SSE
+
+ Store
+
+
+
+
+
+
+ Conditionally store 8-bit integer elements from "a" into memory using "mask"
+ (elements are not stored when the highest bit is not set in the corresponding element).
+
+ FOR j := 0 to 7
+ i := j*8
+ IF mask[i+7]
+ MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
+ FI
+ ENDFOR
+
+
+ SSE
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from "a" into memory using a non-temporal memory hint.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ SSE
+
+ Store
+
+
+
+
+
+ Store the upper 2 single-precision (32-bit) floating-point elements from "a"
+ into memory.
+
+ MEM[mem_addr+31:mem_addr] := a[95:64]
+ MEM[mem_addr+63:mem_addr+32] := a[127:96]
+
+
+ SSE
+
+ Store
+
+
+
+
+
+ Store the lower 2 single-precision (32-bit) floating-point elements from "a"
+ into memory.
+
+ MEM[mem_addr+31:mem_addr] := a[31:0]
+ MEM[mem_addr+63:mem_addr+32] := a[63:32]
+
+
+ SSE
+
+ Store
+
+
+
+
+
+ Store the lower single-precision (32-bit) floating-point element from "a" into
+ memory. "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+31:mem_addr] := a[31:0]
+
+
+ SSE
+
+ Store
+
+
+
+
+
+ Store the lower single-precision (32-bit) floating-point element from "a" into
+ 4 contiguous elements in memory. "mem_addr" must be aligned on a 16-byte boundary or a
+ general-protection exception may be generated.
+
+ MEM[mem_addr+31:mem_addr] := a[31:0]
+ MEM[mem_addr+63:mem_addr+32] := a[31:0]
+ MEM[mem_addr+95:mem_addr+64] := a[31:0]
+ MEM[mem_addr+127:mem_addr+96] := a[31:0]
+
+ SSE
+
+ Store
+
+
+
+
+
+ Store the lower single-precision (32-bit) floating-point element from "a" into
+ 4 contiguous elements in memory. "mem_addr" must be aligned on a 16-byte boundary or a
+ general-protection exception may be generated.
+
+ MEM[mem_addr+31:mem_addr] := a[31:0]
+ MEM[mem_addr+63:mem_addr+32] := a[31:0]
+ MEM[mem_addr+95:mem_addr+64] := a[31:0]
+ MEM[mem_addr+127:mem_addr+96] := a[31:0]
+
+ SSE
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ SSE
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ SSE
+
+ Store
+
+
+
+
+
+ Store 4 single-precision (32-bit) floating-point elements from "a" into memory
+ in reverse order.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+31:mem_addr] := a[127:96]
+ MEM[mem_addr+63:mem_addr+32] := a[95:64]
+ MEM[mem_addr+95:mem_addr+64] := a[63:32]
+ MEM[mem_addr+127:mem_addr+96] := a[31:0]
+
+
+ SSE
+
+ Store
+
+
+
+
+ Create mask from the most significant bit of each 8-bit element in "a", and
+ store the result in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[j] := a[i+7]
+ ENDFOR
+ dst[MAX:8] := 0
+
+
+ SSE
+
+ Miscellaneous
+
+
+
+
+ Create mask from the most significant bit of each 8-bit element in "a", and
+ store the result in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[j] := a[i+7]
+ ENDFOR
+ dst[MAX:8] := 0
+
+
+ SSE
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask "dst" based on the most significant bit of the
+ corresponding packed single-precision (32-bit) floating-point element in "a".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF a[i+31]
+ dst[j] := 1
+ ELSE
+ dst[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:4] := 0
+
+
+ SSE
+
+ Miscellaneous
+
+
+
+
+ Compute the square root of the lower single-precision (32-bit) floating-point
+ element in "a", store the result in the lower element of "dst", and copy the upper 3
+ packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := SQRT(a[31:0])
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed single-precision (32-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := SQRT(a[i+31:i])
+ ENDFOR
+
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal of the lower single-precision (32-bit)
+ floating-point element in "a", store the result in the lower element of "dst", and copy
+ the upper 3 packed elements from "a" to the upper elements of "dst". The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ dst[31:0] := (1.0 / a[31:0])
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal of packed single-precision (32-bit)
+ floating-point elements in "a", and store the results in "dst". The maximum relative
+ error for this approximation is less than 1.5*2^-12.
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := (1.0 / a[i+31:i])
+ ENDFOR
+
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal square root of the lower single-precision
+ (32-bit) floating-point element in "a", store the result in the lower element of "dst",
+ and copy the upper 3 packed elements from "a" to the upper elements of "dst". The
+ maximum relative error for this approximation is less than 1.5*2^-12.
+
+ dst[31:0] := (1.0 / SQRT(a[31:0]))
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+ Compute the approximate reciprocal square root of packed single-precision
+ (32-bit) floating-point elements in "a", and store the results in "dst". The maximum
+ relative error for this approximation is less than 1.5*2^-12.
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
+ ENDFOR
+
+
+ SSE
+
+ Elementary Math Functions
+
+
+
+
+
+ Compute the bitwise AND of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
+ ENDFOR
+
+
+ SSE
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of packed single-precision (32-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
+ ENDFOR
+
+
+ SSE
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[i+31:i] OR b[i+31:i]
+ ENDFOR
+
+
+ SSE
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed single-precision (32-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
+ ENDFOR
+
+
+ SSE
+
+ Logical
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" for equality, store the result in the lower element of "dst", and copy the upper 3
+ packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := ( a[31:0] == b[31:0] ) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for equality, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" for less-than, store the result in the lower element of "dst", and copy the upper 3
+ packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := ( a[31:0] < b[31:0] ) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for less-than, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] < b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" for less-than-or-equal, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := ( a[31:0] <= b[31:0] ) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for less-than-or-equal, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] <= b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" for greater-than, store the result in the lower element of "dst", and copy the upper
+ 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := ( a[31:0] > b[31:0] ) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for greater-than, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] > b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" for greater-than-or-equal, store the result in the lower element of "dst", and copy
+ the upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := ( a[31:0] >= b[31:0] ) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for greater-than-or-equal, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] >= b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" for not-equal, store the result in the lower element of "dst", and copy the upper 3
+ packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := ( a[31:0] != b[31:0] ) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for not-equal, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] != b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" for not-less-than, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := (!( a[31:0] < b[31:0] )) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for not-less-than, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := !( a[i+31:i] < b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" for not-less-than-or-equal, store the result in the lower element of "dst", and copy
+ the upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := (!( a[31:0] <= b[31:0] )) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for not-less-than-or-equal, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := (!( a[i+31:i] <= b[i+31:i] )) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" for not-greater-than, store the result in the lower element of "dst", and copy the
+ upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := (!( a[31:0] > b[31:0] )) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for not-greater-than, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := (!( a[i+31:i] > b[i+31:i] )) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" for not-greater-than-or-equal, store the result in the lower element of "dst", and
+ copy the upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := (!( a[31:0] >= b[31:0] )) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ for not-greater-than-or-equal, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := (!( a[i+31:i] >= b[i+31:i] )) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" to see if neither is NaN, store the result in the lower element of "dst", and copy
+ the upper 3 packed elements from "a" to the upper elements of "dst".
+ dst[31:0] := ( a[31:0] != NaN AND b[31:0] != NaN ) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ to see if neither is NaN, and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] != NaN AND b[i+31:i] != NaN ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point elements in "a" and
+ "b" to see if either is NaN, store the result in the lower element of "dst", and copy
+ the upper 3 packed elements from "a" to the upper elements of "dst".
+ dst[31:0] := ( a[31:0] == NaN OR b[31:0] == NaN ) ? 0xFFFFFFFF : 0
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare packed single-precision (32-bit) floating-point elements in "a" and "b"
+ to see if either is NaN, and store the results in "dst".
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] == NaN OR b[i+31:i] == NaN ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for equality, and return the boolean result (0 or 1).
+ RETURN ( a[31:0] != NaN AND b[31:0] != NaN AND a[31:0] == b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for less-than, and return the boolean result (0 or 1).
+ RETURN ( a[31:0] != NaN AND b[31:0] != NaN AND a[31:0] < b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for less-than-or-equal, and return the boolean result (0 or 1).
+ RETURN ( a[31:0] != NaN AND b[31:0] != NaN AND a[31:0] <= b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for greater-than, and return the boolean result (0 or 1).
+ RETURN ( a[31:0] != NaN AND b[31:0] != NaN AND a[31:0] > b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for greater-than-or-equal, and return the boolean result (0 or 1).
+ RETURN ( a[31:0] != NaN AND b[31:0] != NaN AND a[31:0] >= b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for not-equal, and return the boolean result (0 or 1).
+ RETURN ( a[31:0] == NaN OR b[31:0] == NaN OR a[31:0] != b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for equality, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a[31:0] != NaN AND b[31:0] != NaN AND a[31:0] == b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for less-than, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a[31:0] != NaN AND b[31:0] != NaN AND a[31:0] < b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for less-than-or-equal, and return the boolean result (0 or 1). This instruction
+ will not signal an exception for QNaNs.
+ RETURN ( a[31:0] != NaN AND b[31:0] != NaN AND a[31:0] <= b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for greater-than, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a[31:0] != NaN AND b[31:0] != NaN AND a[31:0] > b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for greater-than-or-equal, and return the boolean result (0 or 1). This instruction
+ will not signal an exception for QNaNs.
+ RETURN ( a[31:0] != NaN AND b[31:0] != NaN AND a[31:0] >= b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+
+ Compare the lower single-precision (32-bit) floating-point element in "a" and
+ "b" for not-equal, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a[31:0] == NaN OR b[31:0] == NaN OR a[31:0] != b[31:0] ) ? 1 : 0
+
+
+ SSE
+
+ Compare
+
+
+
+
+ Copy single-precision (32-bit) floating-point element "a" to the lower element
+ of "dst", and zero the upper 3 elements.
+
+ dst[31:0] := a[31:0]
+ dst[127:32] := 0
+
+ SSE
+
+ Set
+
+
+
+
+ Broadcast single-precision (32-bit) floating-point value "a" to all elements of
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+
+ SSE
+
+ Set
+
+
+
+
+ Broadcast single-precision (32-bit) floating-point value "a" to all elements of
+ "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+
+ SSE
+
+ Set
+
+
+
+
+
+
+
+ Set packed single-precision (32-bit) floating-point elements in "dst" with the
+ supplied values.
+
+ dst[31:0] := e0
+ dst[63:32] := e1
+ dst[95:64] := e2
+ dst[127:96] := e3
+
+ SSE
+
+ Set
+
+
+
+
+
+
+
+ Set packed single-precision (32-bit) floating-point elements in "dst" with the
+ supplied values in reverse order.
+
+ dst[31:0] := e3
+ dst[63:32] := e2
+ dst[95:64] := e1
+ dst[127:96] := e0
+
+ SSE
+
+ Set
+
+
+
+
+ Return vector of type __m128 with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ SSE
+
+ Set
+
+
+
+
+
+ Load 2 single-precision (32-bit) floating-point elements from memory into the
+ upper 2 elements of "dst", and copy the lower 2 elements from "a" to "dst". "mem_addr"
+ does not need to be aligned on any particular boundary.
+
+ dst[31:0] := a[31:0]
+ dst[63:32] := a[63:32]
+ dst[95:64] := MEM[mem_addr+31:mem_addr]
+ dst[127:96] := MEM[mem_addr+63:mem_addr+32]
+
+
+ SSE
+
+ Load
+
+
+
+
+
+ Load 2 single-precision (32-bit) floating-point elements from memory into the
+ lower 2 elements of "dst", and copy the upper 2 elements from "a" to "dst". "mem_addr"
+ does not need to be aligned on any particular boundary.
+
+ dst[31:0] := MEM[mem_addr+31:mem_addr]
+ dst[63:32] := MEM[mem_addr+63:mem_addr+32]
+ dst[95:64] := a[95:64]
+ dst[127:96] := a[127:96]
+
+
+ SSE
+
+ Load
+
+
+
+
+ Load a single-precision (32-bit) floating-point element from memory into the
+ lower of "dst", and zero the upper 3 elements. "mem_addr" does not need to be aligned on
+ any particular boundary.
+
+ dst[31:0] := MEM[mem_addr+31:mem_addr]
+ dst[127:32] := 0
+
+
+ SSE
+
+ Load
+
+
+
+
+ Load a single-precision (32-bit) floating-point element from memory into all
+ elements of "dst".
+
+ dst[31:0] := MEM[mem_addr+31:mem_addr]
+ dst[63:32] := MEM[mem_addr+31:mem_addr]
+ dst[95:64] := MEM[mem_addr+31:mem_addr]
+ dst[127:96] := MEM[mem_addr+31:mem_addr]
+
+ SSE
+
+ Load
+
+
+
+
+ Load a single-precision (32-bit) floating-point element from memory into all
+ elements of "dst".
+
+ dst[31:0] := MEM[mem_addr+31:mem_addr]
+ dst[63:32] := MEM[mem_addr+31:mem_addr]
+ dst[95:64] := MEM[mem_addr+31:mem_addr]
+ dst[127:96] := MEM[mem_addr+31:mem_addr]
+
+ SSE
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+
+
+ SSE
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+
+
+ SSE
+
+ Load
+
+
+
+
+ Load 4 single-precision (32-bit) floating-point elements from memory into "dst"
+ in reverse order. mem_addr must be aligned on a 16-byte boundary or a general-protection
+ exception may be generated.
+
+ dst[31:0] := MEM[mem_addr+127:mem_addr+96]
+ dst[63:32] := MEM[mem_addr+95:mem_addr+64]
+ dst[95:64] := MEM[mem_addr+63:mem_addr+32]
+ dst[127:96] := MEM[mem_addr+31:mem_addr]
+
+ SSE
+
+ Load
+
+
+
+
+
+ Move the lower single-precision (32-bit) floating-point element from "b" to the
+ lower element of "dst", and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ dst[31:0] := b[31:0]
+ dst[127:32] := a[127:32]
+
+
+ SSE
+
+ Move
+
+
+
+
+
+ Move the upper 2 single-precision (32-bit) floating-point elements from "b" to
+ the lower 2 elements of "dst", and copy the upper 2 elements from "a" to the upper 2
+ elements of "dst".
+
+ dst[31:0] := b[95:64]
+ dst[63:32] := b[127:96]
+ dst[95:64] := a[95:64]
+ dst[127:96] := a[127:96]
+
+
+ SSE
+
+ Move
+
+
+
+
+
+ Move the lower 2 single-precision (32-bit) floating-point elements from "b" to
+ the upper 2 elements of "dst", and copy the lower 2 elements from "a" to the lower 2
+ elements of "dst".
+
+ dst[31:0] := a[31:0]
+ dst[63:32] := a[63:32]
+ dst[95:64] := b[31:0]
+ dst[127:96] := b[63:32]
+
+
+ SSE
+
+ Move
+
+
+
+
+
+
+ Return vector of type __m128d with undefined elements.
+ SSE2
+
+ General Support
+
+
+
+
+ Return vector of type __m128i with undefined elements.
+ SSE2
+
+ General Support
+
+
+
+
+ Provide a hint to the processor that the code sequence is a spin-wait loop.
+ This can help improve the performance and power consumption of spin-wait loops.
+
+ SSE2
+
+ General Support
+
+
+
+
+ Invalidate and flush the cache line that contains "p" from all levels of the
+ cache hierarchy.
+
+ SSE2
+
+ General Support
+
+
+
+
+ Perform a serializing operation on all load-from-memory instructions that were
+ issued prior to this instruction. Guarantees that every load instruction that precedes,
+ in program order, is globally visible before any load instruction which follows the
+ fence in program order.
+
+ SSE2
+
+ General Support
+
+
+
+
+ Perform a serializing operation on all load-from-memory and store-to-memory
+ instructions that were issued prior to this instruction. Guarantees that every memory
+ access that precedes, in program order, the memory fence instruction is globally visible
+ before any memory instruction which follows the fence in program order.
+
+ SSE2
+
+ General Support
+
+
+
+
+ Load unaligned 64-bit integer from memory into the first element of "dst".
+
+ dst[63:0] := MEM[mem_addr+63:mem_addr]
+ dst[MAX:64] := 0
+
+
+ SSE2
+
+ Load
+
+
+
+
+ Load unaligned 16-bit integer from memory into the first element of "dst".
+
+ dst[15:0] := MEM[mem_addr+15:mem_addr]
+ dst[MAX:16] := 0
+
+ SSE2
+
+ Load
+
+
+
+
+ Load unaligned 32-bit integer from memory into the first element of "dst".
+
+ dst[31:0] := MEM[mem_addr+31:mem_addr]
+ dst[MAX:32] := 0
+
+
+ SSE2
+
+ Load
+
+
+
+
+ Load 64-bit integer from memory into the first element of "dst".
+
+ dst[63:0] := MEM[mem_addr+63:mem_addr]
+ dst[MAX:64] := 0
+
+
+ SSE2
+
+ Load
+
+
+
+
+ Load 128-bits of integer data from memory into "dst".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+
+
+ SSE2
+
+ Load
+
+
+
+
+ Load 128-bits of integer data from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+
+
+ SSE2
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+
+
+ SSE2
+
+ Load
+
+
+
+
+ Load a double-precision (64-bit) floating-point element from memory into both
+ elements of "dst".
+
+ dst[63:0] := MEM[mem_addr+63:mem_addr]
+ dst[127:64] := MEM[mem_addr+63:mem_addr]
+
+
+ SSE2
+
+ Load
+
+
+
+
+ Load a double-precision (64-bit) floating-point element from memory into both
+ elements of "dst".
+
+ dst[63:0] := MEM[mem_addr+63:mem_addr]
+ dst[127:64] := MEM[mem_addr+63:mem_addr]
+
+
+ SSE2
+
+ Load
+
+
+
+
+ Load 2 double-precision (64-bit) floating-point elements from memory into "dst"
+ in reverse order. mem_addr must be aligned on a 16-byte boundary or a general-protection
+ exception may be generated.
+
+ dst[63:0] := MEM[mem_addr+127:mem_addr+64]
+ dst[127:64] := MEM[mem_addr+63:mem_addr]
+
+
+ SSE2
+
+ Load
+
+
+
+
+ Load 128-bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from memory into "dst".
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+
+
+ SSE2
+
+ Load
+
+
+
+
+ Load a double-precision (64-bit) floating-point element from memory into the
+ lower of "dst", and zero the upper element. "mem_addr" does not need to be aligned on
+ any particular boundary.
+
+ dst[63:0] := MEM[mem_addr+63:mem_addr]
+ dst[127:64] := 0
+
+
+ SSE2
+
+ Load
+
+
+
+
+
+ Load a double-precision (64-bit) floating-point element from memory into the
+ upper element of "dst", and copy the lower element from "a" to "dst". "mem_addr" does
+ not need to be aligned on any particular boundary.
+
+ dst[63:0] := a[63:0]
+ dst[127:64] := MEM[mem_addr+63:mem_addr]
+
+
+ SSE2
+
+ Load
+
+
+
+
+
+ Load a double-precision (64-bit) floating-point element from memory into the
+ lower element of "dst", and copy the upper element from "a" to "dst". "mem_addr" does
+ not need to be aligned on any particular boundary.
+
+ dst[63:0] := MEM[mem_addr+63:mem_addr]
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Load
+
+
+
+
+
+ Store 16-bit integer from the first element of "a" into memory. "mem_addr" does
+ not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+15:mem_addr] := a[15:0]
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 64-bit integer from the first element of "a" into memory. "mem_addr" does
+ not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+63:mem_addr] := a[63:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 32-bit integer from the first element of "a" into memory. "mem_addr" does
+ not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+31:mem_addr] := a[31:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+
+ Conditionally store 8-bit integer elements from "a" into memory using "mask"
+ (elements are not stored when the highest bit is not set in the corresponding element)
+ and a non-temporal memory hint. "mem_addr" does not need to be aligned on any particular
+ boundary.
+
+ FOR j := 0 to 15
+ i := j*8
+ IF mask[i+7]
+ MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 128-bits of integer data from "a" into memory.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 128-bits of integer data from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 64-bit integer from the first element of "a" into memory.
+
+ MEM[mem_addr+63:mem_addr] := a[63:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 128-bits of integer data from "a" into memory using a non-temporal memory
+ hint.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 32-bit integer "a" into memory using a non-temporal hint to minimize
+ cache pollution. If the cache line containing address "mem_addr" is already in the
+ cache, the cache will be updated.
+
+ MEM[mem_addr+31:mem_addr] := a[31:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 64-bit integer "a" into memory using a non-temporal hint to minimize
+ cache pollution. If the cache line containing address "mem_addr" is already in the
+ cache, the cache will be updated.
+
+ MEM[mem_addr+63:mem_addr] := a[63:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from "a" into memory using a non-temporal memory hint.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store the lower double-precision (64-bit) floating-point element from "a" into
+ memory. "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+63:mem_addr] := a[63:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store the lower double-precision (64-bit) floating-point element from "a" into
+ 2 contiguous elements in memory. "mem_addr" must be aligned on a 16-byte boundary or a
+ general-protection exception may be generated.
+
+ MEM[mem_addr+63:mem_addr] := a[63:0]
+ MEM[mem_addr+127:mem_addr+64] := a[63:0]
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store the lower double-precision (64-bit) floating-point element from "a" into
+ 2 contiguous elements in memory. "mem_addr" must be aligned on a 16-byte boundary or a
+ general-protection exception may be generated.
+
+ MEM[mem_addr+63:mem_addr] := a[63:0]
+ MEM[mem_addr+127:mem_addr+64] := a[63:0]
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point
+ elements) from "a" into memory.
+ "mem_addr" does not need to be aligned on any particular boundary.
+
+ MEM[mem_addr+127:mem_addr] := a[127:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store 2 double-precision (64-bit) floating-point elements from "a" into memory
+ in reverse order.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ MEM[mem_addr+63:mem_addr] := a[127:64]
+ MEM[mem_addr+127:mem_addr+64] := a[63:0]
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store the upper double-precision (64-bit) floating-point element from "a" into
+ memory.
+
+ MEM[mem_addr+63:mem_addr] := a[127:64]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Store the lower double-precision (64-bit) floating-point element from "a" into
+ memory.
+
+ MEM[mem_addr+63:mem_addr] := a[63:0]
+
+
+ SSE2
+
+ Store
+
+
+
+
+
+ Add packed 8-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := a[i+7:i] + b[i+7:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Add packed 16-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := a[i+15:i] + b[i+15:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Add packed 32-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Add 64-bit integers "a" and "b", and store the result in "dst".
+
+ dst[63:0] := a[63:0] + b[63:0]
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Add packed 64-bit integers in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Add packed signed 8-bit integers in "a" and "b" using saturation, and store the
+ results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Add packed signed 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers,
+ and pack the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) +
+ SignExtend32(a[i+15:i]*b[i+15:i])
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed signed 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed unsigned 16-bit integers in "a" and "b", producing
+ intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in
+ "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ tmp[31:0] := a[i+15:i] * b[i+15:i]
+ dst[i+15:i] := tmp[31:16]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 16-bit integers in "a" and "b", producing intermediate
+ 32-bit integers, and store the low 16 bits of the intermediate integers in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
+ dst[i+15:i] := tmp[15:0]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the low unsigned 32-bit integers from "a" and "b", and store the
+ unsigned 64-bit result in "dst".
+
+ dst[63:0] := a[31:0] * b[31:0]
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the low unsigned 32-bit integers from each packed 64-bit element in
+ "a" and "b", and store the unsigned 64-bit results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[i+31:i] * b[i+31:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+ Miscellaneous
+
+
+
+ Compute the absolute differences of packed unsigned 8-bit integers in "a" and
+ "b", then horizontally sum each consecutive 8 differences to produce two unsigned 16-bit
+ integers, and pack these unsigned 16-bit integers in the low 16 bits of 64-bit elements
+ in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i])
+ ENDFOR
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+15:i] := tmp[i+7:i] + tmp[i+15:i+8] + tmp[i+23:i+16] + tmp[i+31:i+24] + \
+ tmp[i+39:i+32] + tmp[i+47:i+40] + tmp[i+55:i+48] + tmp[i+63:i+56]
+ dst[i+63:i+16] := 0
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := a[i+7:i] - b[i+7:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := a[i+15:i] - b[i+15:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Subtract 64-bit integer "b" from 64-bit integer "a", and store the result in
+ "dst".
+
+ dst[63:0] := a[63:0] - b[63:0]
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and
+ store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a"
+ using saturation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in
+ "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit
+ integers in "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit
+ integers in "a" using saturation, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Add the lower double-precision (64-bit) floating-point element in "a" and "b",
+ store the result in the lower element of "dst", and copy the upper element from "a" to
+ the upper element of "dst".
+
+ dst[63:0] := a[63:0] + b[63:0]
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Add packed double-precision (64-bit) floating-point elements in "a" and "b",
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Divide the lower double-precision (64-bit) floating-point element in "a" by the
+ lower double-precision (64-bit) floating-point element in "b", store the result in the
+ lower element of "dst", and copy the upper element from "a" to the upper element of
+ "dst".
+
+ dst[63:0] := a[63:0] / b[63:0]
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Divide packed double-precision (64-bit) floating-point elements in "a" by
+ packed elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ dst[i+63:i] := a[i+63:i] / b[i+63:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Multiply the lower double-precision (64-bit) floating-point element in "a" and
+ "b", store the result in the lower element of "dst", and copy the upper element from "a"
+ to the upper element of "dst".
+
+ dst[63:0] := a[63:0] * b[63:0]
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[i+63:i] * b[i+63:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Subtract the lower double-precision (64-bit) floating-point element in "b" from
+ the lower double-precision (64-bit) floating-point element in "a", store the result in
+ the lower element of "dst", and copy the upper element from "a" to the upper element of
+ "dst".
+
+ dst[63:0] := a[63:0] - b[63:0]
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Subtract packed double-precision (64-bit) floating-point elements in "b" from
+ packed double-precision (64-bit) floating-point elements in "a", and store the results
+ in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ENDFOR
+
+
+ SSE2
+
+ Arithmetic
+
+
+
+
+
+ Average packed unsigned 8-bit integers in "a" and "b", and store the results in
+ "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
+ ENDFOR
+
+
+ SSE2
+
+ Probability/Statistics
+
+
+
+
+
+ Average packed unsigned 16-bit integers in "a" and "b", and store the results
+ in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
+ ENDFOR
+
+
+ SSE2
+
+ Probability/Statistics
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ENDFOR
+
+
+ SSE2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ENDFOR
+
+
+ SSE2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ENDFOR
+
+
+ SSE2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ENDFOR
+
+
+ SSE2
+
+ Special Math Functions
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the maximum value in the lower element of "dst", and copy the upper element
+ from "a" to the upper element of "dst". [max_float_note]
+
+ dst[63:0] := MAX(a[63:0], b[63:0])
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed maximum values in "dst". [max_float_note]
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
+ ENDFOR
+
+
+ SSE2
+
+ Special Math Functions
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b", store the minimum value in the lower element of "dst", and copy the upper element
+ from "a" to the upper element of "dst". [min_float_note]
+
+ dst[63:0] := MIN(a[63:0], b[63:0])
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and
+ "b", and store packed minimum values in "dst". [min_float_note]
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
+ ENDFOR
+
+
+ SSE2
+
+ Special Math Functions
+
+
+
+
+
+ Shift "a" left by "imm8" bytes while shifting in zeros, and store the results
+ in "dst".
+
+ tmp := imm8[7:0]
+ IF tmp > 15
+ tmp := 16
+ FI
+ dst[127:0] := a[127:0] << (tmp*8)
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift "a" left by "imm8" bytes while shifting in zeros, and store the results
+ in "dst".
+
+ tmp := imm8[7:0]
+ IF tmp > 15
+ tmp := 16
+ FI
+ dst[127:0] := a[127:0] << (tmp*8)
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift "a" right by "imm8" bytes while shifting in zeros, and store the results
+ in "dst".
+
+ tmp := imm8[7:0]
+ IF tmp > 15
+ tmp := 16
+ FI
+ dst[127:0] := a[127:0] >> (tmp*8)
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF imm8[7:0] > 31
dst[i+31:i] := 0
- ELSE
+ ELSE
dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
- ELSE
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF count[63:0] > 31
dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and
+ store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" left by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
+ ELSE
+ dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF imm8[7:0] > 31
dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
+ ELSE
dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF count[i+31:i] < 32
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0)
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF imm8[7:0] > 31
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in sign
+ bits, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF count[63:0] > 31
+ dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
+ ELSE
+ dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift "a" right by "imm8" bytes while shifting in zeros, and store the results
+ in "dst".
+
+ tmp := imm8[7:0]
+ IF tmp > 15
+ tmp := 16
+ FI
+ dst[127:0] := a[127:0] >> (tmp*8)
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF imm8[7:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 16-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF count[63:0] > 15
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF imm8[7:0] > 31
dst[i+31:i] := 0
- ELSE
+ ELSE
dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 32-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF count[63:0] > 31
dst[i+31:i] := 0
- FI
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by the amount specified by the corresponding element in "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- IF count[i+31:i] < 32
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Logical
-
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" (subject to writemask "k") if the intermediate value is non-zero.
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise AND of packed 32-bit integers in "a" and "b", producing intermediate 32-bit values, and set the corresponding bit in result mask "k" if the intermediate value is non-zero.
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ((a[i+31:i] AND b[i+31:i]) != 0) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise XOR of packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise XOR of 512 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[511:0] := (a[511:0] XOR b[511:0])
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
-
-
- Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Compute the bitwise XOR of packed 64-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
-
-
-
- Scatter single-precision (32-bit) floating-point elements from "a" into memory using 32-bit indices. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not stored when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Cast
-
-
- Cast vector of type __m512d to type __m512.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- Integer
- AVX512F/KNCNI
- Cast
-
-
- Cast vector of type __m512d to type __m512i.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F/KNCNI
- Cast
-
-
- Cast vector of type __m512 to type __m512d.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- Integer
- AVX512F/KNCNI
- Cast
-
-
- Cast vector of type __m512 to type __m512i.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F/KNCNI
- Cast
-
-
- Cast vector of type __m512i to type __m512d.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- AVX512F/KNCNI
- Cast
-
-
- Cast vector of type __m512i to type __m512.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Reduce the packed 32-bit integers in "a" by addition using mask "k". Returns the sum of all active elements in "a".
-
-dst[31:0] := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := dst[31:0] + a[i+31:i]
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Reduce the packed 64-bit integers in "a" by addition using mask "k". Returns the sum of all active elements in "a".
-
-dst[63:0] := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := dst[63:0] + a[i+63:i]
- FI
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Reduce the packed double-precision (64-bit) floating-point elements in "a" by addition using mask "k". Returns the sum of all active elements in "a".
-
-dst[63:0] := 0.0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := dst[63:0] + a[i+63:i]
- FI
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Reduce the packed single-precision (32-bit) floating-point elements in "a" by addition using mask "k". Returns the sum of all active elements in "a".
-
-dst[31:0] := 0.0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := dst[31:0] + a[i+31:i]
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Reduce the packed 32-bit integers in "a" by bitwise AND using mask "k". Returns the bitwise AND of all active elements in "a".
-
-dst[31:0] := 0xFFFFFFFF
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := dst[31:0] AND a[i+31:i]
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Reduce the packed 64-bit integers in "a" by bitwise AND using mask "k". Returns the bitwise AND of all active elements in "a".
-
-dst[63:0] := 0xFFFFFFFFFFFFFFFF
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := dst[63:0] AND a[i+63:i]
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed signed 32-bit integers in "a" by maximum using mask "k". Returns the maximum of all active elements in "a".
-
-dst[31:0] := Int32(-0x80000000)
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := (dst[31:0] > a[i+31:i] ? dst[31:0] : a[i+31:i])
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed signed 64-bit integers in "a" by maximum using mask "k". Returns the maximum of all active elements in "a".
-
-dst[63:0] := Int64(-0x8000000000000000)
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := (dst[63:0] > a[i+63:i] ? dst[63:0] : a[i+63:i])
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed unsigned 32-bit integers in "a" by maximum using mask "k". Returns the maximum of all active elements in "a".
-
-dst[31:0] := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := (dst[31:0] > a[i+31:i] ? dst[31:0] : a[i+31:i])
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed unsigned 64-bit integers in "a" by maximum using mask "k". Returns the maximum of all active elements in "a".
-
-dst[63:0] := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := (dst[63:0] > a[i+63:i] ? dst[63:0] : a[i+63:i])
- FI
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed double-precision (64-bit) floating-point elements in "a" by maximum using mask "k". Returns the maximum of all active elements in "a".
-
-dst[63:0] := Cast_FP64(0xFFEFFFFFFFFFFFFF)
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := (dst[63:0] > a[i+63:i] ? dst[63:0] : a[i+63:i])
- FI
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed single-precision (32-bit) floating-point elements in "a" by maximum using mask "k". Returns the maximum of all active elements in "a".
-
-dst[31:0] := Cast_FP32(0xFF7FFFFF)
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := (dst[31:0] > a[i+31:i] ? dst[31:0] : a[i+31:i])
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed signed 32-bit integers in "a" by maximum using mask "k". Returns the minimum of all active elements in "a".
-
-dst[31:0] := Int32(0x7FFFFFFF)
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := (dst[31:0] < a[i+31:i] ? dst[31:0] : a[i+31:i])
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed signed 64-bit integers in "a" by maximum using mask "k". Returns the minimum of all active elements in "a".
-
-dst[63:0] := Int64(0x7FFFFFFFFFFFFFFF)
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := (dst[63:0] < a[i+63:i] ? dst[63:0] : a[i+63:i])
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed unsigned 32-bit integers in "a" by maximum using mask "k". Returns the minimum of all active elements in "a".
-
-dst[31:0] := 0xFFFFFFFF
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := (dst[31:0] < a[i+31:i] ? dst[31:0] : a[i+31:i])
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed unsigned 64-bit integers in "a" by minimum using mask "k". Returns the minimum of all active elements in "a".
-
-dst[63:0] := 0xFFFFFFFFFFFFFFFF
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := (dst[63:0] < a[i+63:i] ? dst[63:0] : a[i+63:i])
- FI
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed double-precision (64-bit) floating-point elements in "a" by maximum using mask "k". Returns the minimum of all active elements in "a".
-
-dst[63:0] := Cast_FP64(0x7FEFFFFFFFFFFFFF)
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := (dst[63:0] < a[i+63:i] ? dst[63:0] : a[i+63:i])
- FI
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Special Math Functions
-
-
-
- Reduce the packed single-precision (32-bit) floating-point elements in "a" by maximum using mask "k". Returns the minimum of all active elements in "a".
-
-dst[31:0] := Cast_FP32(0x7F7FFFFF)
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := (dst[31:0] < a[i+31:i] ? dst[31:0] : a[i+31:i])
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Reduce the packed 32-bit integers in "a" by multiplication using mask "k". Returns the product of all active elements in "a".
-
-dst[31:0] := 1
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := dst[31:0] * a[i+31:i]
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Reduce the packed 64-bit integers in "a" by multiplication using mask "k". Returns the product of all active elements in "a".
-
-dst[63:0] := 1
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := dst[63:0] * a[i+63:i]
- FI
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Reduce the packed double-precision (64-bit) floating-point elements in "a" by multiplication using mask "k". Returns the product of all active elements in "a".
-
-dst[63:0] := 1.0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := dst[63:0] * a[i+63:i]
- FI
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
- Reduce the packed single-precision (32-bit) floating-point elements in "a" by multiplication using mask "k". Returns the product of all active elements in "a".
-
-dst[31:0] := FP32(1.0)
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := dst[31:0] * a[i+31:i]
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Reduce the packed 32-bit integers in "a" by bitwise OR using mask "k". Returns the bitwise OR of all active elements in "a".
-
-dst[31:0] := 0
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[31:0] := dst[31:0] OR a[i+31:i]
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
- Reduce the packed 64-bit integers in "a" by bitwise OR using mask "k". Returns the bitwise OR of all active elements in "a".
-
-dst[63:0] := 0
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[63:0] := dst[63:0] OR a[i+63:i]
- FI
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
- Reduce the packed 32-bit integers in "a" by addition. Returns the sum of all elements in "a".
-
-dst[31:0] := 0
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := dst[31:0] + a[i+31:i]
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
- Reduce the packed 64-bit integers in "a" by addition. Returns the sum of all elements in "a".
-
-dst[63:0] := 0
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := dst[63:0] + a[i+63:i]
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
- Reduce the packed double-precision (64-bit) floating-point elements in "a" by addition. Returns the sum of all elements in "a".
-
-dst[63:0] := 0.0
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := dst[63:0] + a[i+63:i]
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
- Reduce the packed single-precision (32-bit) floating-point elements in "a" by addition. Returns the sum of all elements in "a".
-
-dst[31:0] := 0.0
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := dst[31:0] + a[i+31:i]
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
- Reduce the packed 32-bit integers in "a" by bitwise AND. Returns the bitwise AND of all elements in "a".
-
-dst[31:0] := 0xFFFFFFFF
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := dst[31:0] AND a[i+31:i]
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
- Reduce the packed 64-bit integers in "a" by bitwise AND. Returns the bitwise AND of all elements in "a".
-
-dst[63:0] := 0xFFFFFFFFFFFFFFFF
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := dst[63:0] AND a[i+63:i]
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed signed 32-bit integers in "a" by maximum. Returns the maximum of all elements in "a".
-
-dst[31:0] := Int32(-0x80000000)
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := (dst[31:0] > a[i+31:i] ? dst[31:0] : a[i+31:i])
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed signed 64-bit integers in "a" by maximum. Returns the maximum of all elements in "a".
-
-dst[63:0] := Int64(-0x8000000000000000)
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := (dst[63:0] > a[i+63:i] ? dst[63:0] : a[i+63:i])
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed unsigned 32-bit integers in "a" by maximum. Returns the maximum of all elements in "a".
-
-dst[31:0] := 0
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := (dst[31:0] > a[i+31:i] ? dst[31:0] : a[i+31:i])
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed unsigned 64-bit integers in "a" by maximum. Returns the maximum of all elements in "a".
-
-dst[63:0] := 0
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := (dst[63:0] > a[i+63:i] ? dst[63:0] : a[i+63:i])
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed double-precision (64-bit) floating-point elements in "a" by maximum. Returns the maximum of all elements in "a".
-
-dst[63:0] := Cast_FP64(0xFFEFFFFFFFFFFFFF)
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := (dst[63:0] > a[i+63:i] ? dst[63:0] : a[i+63:i])
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed single-precision (32-bit) floating-point elements in "a" by maximum. Returns the maximum of all elements in "a".
-
-dst[31:0] := Cast_FP32(0xFF7FFFFF)
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := (dst[31:0] > a[i+31:i] ? dst[31:0] : a[i+31:i])
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed signed 32-bit integers in "a" by minimum. Returns the minimum of all elements in "a".
-
-dst[31:0] := Int32(0x7FFFFFFF)
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := (dst[31:0] < a[i+31:i] ? dst[31:0] : a[i+31:i])
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed signed 64-bit integers in "a" by minimum. Returns the minimum of all elements in "a".
-
-dst[63:0] := Int64(0x7FFFFFFFFFFFFFFF)
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := (dst[63:0] < a[i+63:i] ? dst[63:0] : a[i+63:i])
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed unsigned 32-bit integers in "a" by minimum. Returns the minimum of all elements in "a".
-
-dst[31:0] := 0xFFFFFFFF
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := (dst[31:0] < a[i+31:i] ? dst[31:0] : a[i+31:i])
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed unsigned 64-bit integers in "a" by minimum. Returns the minimum of all elements in "a".
-
-dst[63:0] := 0xFFFFFFFFFFFFFFFF
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := (dst[63:0] < a[i+63:i] ? dst[63:0] : a[i+63:i])
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed double-precision (64-bit) floating-point elements in "a" by minimum. Returns the minimum of all elements in "a".
-
-dst[63:0] := Cast_FP64(0x7FEFFFFFFFFFFFFF)
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := (dst[63:0] < a[i+63:i] ? dst[63:0] : a[i+63:i])
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Special Math Functions
-
-
- Reduce the packed single-precision (32-bit) floating-point elements in "a" by minimum. Returns the minimum of all elements in "a".
-
-dst[31:0] := Cast_FP32(0x7F7FFFFF)
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := (dst[31:0] < a[i+31:i] ? dst[31:0] : a[i+31:i])
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
- Reduce the packed 32-bit integers in "a" by multiplication. Returns the product of all elements in "a".
-
-dst[31:0] := 1
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := dst[31:0] * a[i+31:i]
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Arithmetic
-
-
- Reduce the packed 64-bit integers in "a" by multiplication. Returns the product of all elements in "a".
-
-dst[63:0] := 1
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := dst[63:0] * a[i+63:i]
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
- Reduce the packed double-precision (64-bit) floating-point elements in "a" by multiplication. Returns the product of all elements in "a".
-
-dst[63:0] := 1.0
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := dst[63:0] * a[i+63:i]
-ENDFOR
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
- Reduce the packed single-precision (32-bit) floating-point elements in "a" by multiplication. Returns the product of all elements in "a".
-
-dst[31:0] := FP32(1.0)
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := dst[31:0] * a[i+31:i]
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
- Reduce the packed 32-bit integers in "a" by bitwise OR. Returns the bitwise OR of all elements in "a".
-
-dst[31:0] := 0
-FOR j := 0 to 15
- i := j*32
- dst[31:0] := dst[31:0] OR a[i+31:i]
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
- Reduce the packed 64-bit integers in "a" by bitwise OR. Returns the bitwise OR of all elements in "a".
-
-dst[63:0] := 0
-FOR j := 0 to 7
- i := j*64
- dst[63:0] := dst[63:0] OR a[i+63:i]
-ENDFOR
-
-
-
-
- Integer
- AVX512F/KNCNI
- Logical
-
-
-
-
-
- Performs element-by-element bitwise AND between packed 32-bit integer elements of "v2" and "v3", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := v2[i+31:i] & v3[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Convert
-
-
- Performs element-by-element conversion of the lower half of packed single-precision (32-bit) floating-point elements in "v2" to packed double-precision (64-bit) floating-point elements, storing the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- n := j*64
- dst[n+63:n] := Convert_FP32_To_FP64(v2[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Convert
-
-
-
-
- Performs element-by-element conversion of the lower half of packed single-precision (32-bit) floating-point elements in "v2" to packed double-precision (64-bit) floating-point elements, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- l := j*64
- IF k[j]
- dst[l+63:l] := Convert_FP32_To_FP64(v2[i+31:i])
- ELSE
- dst[l+63:l] := src[l+63:l]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F/KNCNI
- Convert
-
-
- Performs element-by-element conversion of the lower half of packed 32-bit integer elements in "v2" to packed double-precision (64-bit) floating-point elements, storing the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- l := j*64
- dst[l+63:l] := Convert_Int32_To_FP64(v2[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F/KNCNI
- Convert
-
-
-
-
- Performs element-by-element conversion of the lower half of packed 32-bit integer elements in "v2" to packed double-precision (64-bit) floating-point elements, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- n := j*64
- IF k[j]
- dst[n+63:n] := Convert_Int32_To_FP64(v2[i+31:i])
- ELSE
- dst[n+63:n] := src[n+63:n]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F/KNCNI
- Convert
-
-
- Performs element-by-element conversion of the lower half of packed 32-bit unsigned integer elements in "v2" to packed double-precision (64-bit) floating-point elements, storing the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- n := j*64
- dst[n+63:n] := Convert_Int32_To_FP64(v2[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- AVX512F/KNCNI
- Convert
-
-
-
-
- Performs element-by-element conversion of the lower half of 32-bit unsigned integer elements in "v2" to packed double-precision (64-bit) floating-point elements, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- l := j*64
- IF k[j]
- dst[l+63:l] := Convert_Int32_To_FP64(v2[i+31:i])
- ELSE
- dst[l+63:l] := src[l+63:l]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
- Up-converts 16 memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale" using "conv" to 32-bit integer elements and stores them in "dst". AVX512 only supports _MM_UPCONV_EPI32_NONE.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_UPCONV_EPI32_NONE: dst[i+31:i] := MEM[addr+31:addr]
- _MM_UPCONV_EPI32_UINT8: dst[i+31:i] := ZeroExtend32(MEM[addr+7:addr])
- _MM_UPCONV_EPI32_SINT8: dst[i+31:i] := SignExtend32(MEM[addr+7:addr])
- _MM_UPCONV_EPI32_UINT16: dst[i+31:i] := ZeroExtend32(MEM[addr+15:addr])
- _MM_UPCONV_EPI32_SINT16: dst[i+31:i] := SignExtend32(MEM[addr+15:addr])
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
-
-
- Up-converts 16 single-precision (32-bit) memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale" using "conv" to 32-bit integer elements and stores them in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). AVX512 only supports _MM_UPCONV_EPI32_NONE.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_UPCONV_EPI32_NONE: dst[i+31:i] := MEM[addr+31:addr]
- _MM_UPCONV_EPI32_UINT8: dst[i+31:i] := ZeroExtend32(MEM[addr+7:addr])
- _MM_UPCONV_EPI32_SINT8: dst[i+31:i] := SignExtend32(MEM[addr+7:addr])
- _MM_UPCONV_EPI32_UINT16: dst[i+31:i] := ZeroExtend32(MEM[addr+15:addr])
- _MM_UPCONV_EPI32_SINT16: dst[i+31:i] := SignExtend32(MEM[addr+15:addr])
- ESAC
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
- Up-converts 8 double-precision (64-bit) memory locations starting at location "base_addr" at packed 32-bit integer indices stored in the lower half of "vindex" scaled by "scale" using "conv" to 64-bit integer elements and stores them in "dst".
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_UPCONV_EPI64_NONE: dst[i+63:i] := MEM[addr+63:addr]
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
-
-
- Up-converts 8 double-precision (64-bit) memory locations starting at location "base_addr" at packed 32-bit integer indices stored in the lower half of "vindex" scaled by "scale" using "conv" to 64-bit integer elements and stores them in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_UPCONV_EPI64_NONE: dst[i+63:i] := MEM[addr+63:addr]
- ESAC
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
- Up-converts 16 memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale" using "conv" to single-precision (32-bit) floating-point elements and stores them in "dst". AVX512 only supports _MM_UPCONV_PS_NONE.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_UPCONV_PS_NONE: dst[i+31:i] := MEM[addr+31:addr]
- _MM_UPCONV_PS_FLOAT16: dst[i+31:i] := Convert_FP16_To_FP32(MEM[addr+15:addr])
- _MM_UPCONV_PS_UINT8: dst[i+31:i] := Convert_UInt8_To_FP32(MEM[addr+7:addr])
- _MM_UPCONV_PS_SINT8: dst[i+31:i] := Convert_Int8_To_FP32(MEM[addr+7:addr])
- _MM_UPCONV_PS_UINT16: dst[i+31:i] := Convert_UInt16_To_FP32(MEM[addr+15:addr])
- _MM_UPCONV_PS_SINT16: dst[i+31:i] := Convert_Int16_To_FP32(MEM[addr+15:addr])
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
-
-
- Up-converts 16 single-precision (32-bit) memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale" using "conv" to single-precision (32-bit) floating-point elements and stores them in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). AVX512 only supports _MM_UPCONV_PS_NONE.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_UPCONV_PS_NONE: dst[i+31:i] := MEM[addr+31:addr]
- _MM_UPCONV_PS_FLOAT16: dst[i+31:i] := Convert_FP16_To_FP32(MEM[addr+15:addr])
- _MM_UPCONV_PS_UINT8: dst[i+31:i] := Convert_UInt8_To_FP32(MEM[addr+7:addr])
- _MM_UPCONV_PS_SINT8: dst[i+31:i] := Convert_Int8_To_FP32(MEM[addr+7:addr])
- _MM_UPCONV_PS_UINT16: dst[i+31:i] := Convert_UInt16_To_FP32(MEM[addr+15:addr])
- _MM_UPCONV_PS_SINT16: dst[i+31:i] := Convert_Int16_To_FP32(MEM[addr+15:addr])
- ESAC
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
- Up-converts 8 double-precision (64-bit) floating-point elements in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in the lower half of "vindex" scaled by "scale" using "conv" to 64-bit floating-point elements and stores them in "dst".
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_UPCONV_PD_NONE: dst[i+63:i] := MEM[addr+63:addr]
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
-
-
- Up-converts 8 double-precision (64-bit) floating-point elements in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in the lower half of "vindex" scaled by "scale" using "conv" to 64-bit floating-point elements and stores them in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- dst[i+63:i] := MEM[addr+63:addr]
- ESAC
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
-
-
-
-
- Down-converts 16 packed single-precision (32-bit) floating-point elements in "a" and stores them in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale" using "conv". AVX512 only supports _MM_DOWNCONV_PS_NONE.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_DOWNCONV_PS_NONE: MEM[addr+31:addr] := a[i+31:i]
- _MM_DOWNCONV_PS_FLOAT16: MEM[addr+15:addr] := Convert_FP32_To_FP16(a[i+31:i])
- _MM_DOWNCONV_PS_UINT8: MEM[addr+ 7:addr] := Convert_FP32_To_UInt8(a[i+31:i])
- _MM_DOWNCONV_PS_SINT8: MEM[addr+ 7:addr] := Convert_FP32_To_Int8(a[i+31:i])
- _MM_DOWNCONV_PS_UINT16: MEM[addr+15:addr] := Convert_FP32_To_UInt16(a[i+31:i])
- _MM_DOWNCONV_PS_SINT16: MEM[addr+15:addr] := Convert_FP32_To_Int16(a[i+31:i])
- ESAC
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
-
-
-
-
-
- Down-converts 16 packed single-precision (32-bit) floating-point elements in "a" according to "conv" and stores them in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale" using writemask "k" (elements are written only when the corresponding mask bit is not set). AVX512 only supports _MM_DOWNCONV_PS_NONE.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_DOWNCONV_PS_NONE: MEM[addr+31:addr] := a[i+31:i]
- _MM_DOWNCONV_PS_FLOAT16: MEM[addr+15:addr] := Convert_FP32_To_FP16(a[i+31:i])
- _MM_DOWNCONV_PS_UINT8: MEM[addr+ 7:addr] := Convert_FP32_To_UInt8(a[i+31:i])
- _MM_DOWNCONV_PS_SINT8: MEM[addr+ 7:addr] := Convert_FP32_To_Int8(a[i+31:i])
- _MM_DOWNCONV_PS_UINT16: MEM[addr+15:addr] := Convert_FP32_To_UInt16(a[i+31:i])
- _MM_DOWNCONV_PS_SINT16: MEM[addr+15:addr] := Convert_FP32_To_Int16(a[i+31:i])
- ESAC
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
-
-
-
-
- Down-converts 8 packed double-precision (64-bit) floating-point elements in "a" and stores them in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale" using "conv".
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_DOWNCONV_PD_NONE: MEM[addr+63:addr] := a[i+63:i]
- ESAC
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
-
-
-
-
-
- Down-converts 8 packed double-precision (64-bit) floating-point elements in "a" and stores them in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale" using "conv". Only those elements whose corresponding mask bit is set in writemask "k" are written to memory.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_DOWNCONV_PD_NONE: MEM[addr+63:addr] := a[i+63:i]
- ESAC
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Store
-
-
-
-
-
-
-
- Down-converts 8 packed 64-bit integer elements in "a" and stores them in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale" using "conv".
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_DOWNCONV_EPI64_NONE: MEM[addr+63:addr] := a[i+63:i]
- ESAC
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Store
-
-
-
-
-
-
-
-
- Down-converts 8 packed 64-bit integer elements in "a" and stores them in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale" using "conv". Only those elements whose corresponding mask bit is set in writemask "k" are written to memory.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_DOWNCONV_EPI64_NONE: MEM[addr+63:addr] := a[i+63:i]
- ESAC
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Convert
-
-
- Performs an element-by-element conversion of packed double-precision (64-bit) floating-point elements in "v2" to single-precision (32-bit) floating-point elements and stores them in "dst". The elements are stored in the lower half of the results vector, while the remaining upper half locations are set to 0.
-
-FOR j := 0 to 7
- i := j*64
- k := j*32
- dst[k+31:k] := Convert_FP64_To_FP32(v2[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Convert
-
-
-
-
- Performs an element-by-element conversion of packed double-precision (64-bit) floating-point elements in "v2" to single-precision (32-bit) floating-point elements and stores them in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The elements are stored in the lower half of the results vector, while the remaining upper half locations are set to 0.
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_FP64_To_FP32(v2[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
-
-
- Loads 8 64-bit integer elements from memory starting at location "base_addr" at packed 32-bit integer indices stored in the lower half of "vindex" scaled by "scale" and stores them in "dst".
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
- Loads 8 64-bit integer elements from memory starting at location "base_addr" at packed 32-bit integer indices stored in the lower half of "vindex" scaled by "scale" and stores them in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
-
-
- Loads 8 double-precision (64-bit) floating-point elements stored at memory locations starting at location "base_addr" at packed 32-bit integer indices stored in the lower half of "vindex" scaled by "scale" them in "dst".
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Load
-
-
-
-
-
-
- Loads 8 double-precision (64-bit) floating-point elements from memory starting at location "base_addr" at packed 32-bit integer indices stored in the lower half of "vindex" scaled by "scale" into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- dst[i+63:i] := MEM[addr+63:addr]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
-
-
- Stores 8 packed double-precision (64-bit) floating-point elements in "a" and to memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale".
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Store
-
-
-
-
-
-
- Stores 8 packed double-precision (64-bit) floating-point elements in "a" to memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale". Only those elements whose corresponding mask bit is set in writemask "k" are written to memory.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
- Finds the absolute value of each packed single-precision (32-bit) floating-point element in "v2", storing the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ABS(v2[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Finds the absolute value of each packed single-precision (32-bit) floating-point element in "v2", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ABS(v2[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
- Finds the absolute value of each packed double-precision (64-bit) floating-point element in "v2", storing the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ABS(v2[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Arithmetic
-
-
-
-
- Finds the absolute value of each packed double-precision (64-bit) floating-point element in "v2", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ABS(v2[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Elementary Math Functions
-
-
- Compute the base-2 logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := LOG(a[i+31:i]) / LOG(2.0)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512F/KNCNI
- Elementary Math Functions
-
-
-
-
- Compute the base-2 logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := LOG(a[i+31:i]) / LOG(2.0)
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Store
-
-
-
-
-
-
-
- Down-converts 16 packed 32-bit integer elements in "a" using "conv" and stores them in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale". "hint" indicates to the processor whether the data is non-temporal. AVX512 only supports _MM_DOWNCONV_EPI32_NONE.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_DOWNCONV_EPI32_NONE: MEM[addr+31:addr] := a[i+31:i]
- _MM_DOWNCONV_EPI32_UINT8: MEM[addr+ 7:addr] := Truncate8(a[i+31:i])
- _MM_DOWNCONV_EPI32_SINT8: MEM[addr+ 7:addr] := Saturate8(a[i+31:i])
- _MM_DOWNCONV_EPI32_UINT16: MEM[addr+15:addr] := Truncate16(a[i+31:i])
- _MM_DOWNCONV_EPI32_SINT16: MEM[addr+15:addr] := Saturate16(a[i+15:i])
- ESAC
-ENDFOR
-
-
-
-
-
- Integer
- AVX512F/KNCNI
- Store
-
-
-
-
-
-
-
-
- Down-converts 16 packed 32-bit integer elements in "a" using "conv" and stores them in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale". Elements are written using writemask "k" (elements are only written when the corresponding mask bit is set; otherwise, elements are left unchanged in memory). "hint" indicates to the processor whether the data is non-temporal. AVX512 only supports _MM_DOWNCONV_EPI32_NONE.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_DOWNCONV_EPI32_NONE: MEM[addr+31:addr] := a[i+31:i]
- _MM_DOWNCONV_EPI32_UINT8: MEM[addr+ 7:addr] := Truncate8(a[i+31:i])
- _MM_DOWNCONV_EPI32_SINT8: MEM[addr+ 7:addr] := Saturate8(a[i+31:i])
- _MM_DOWNCONV_EPI32_UINT16: MEM[addr+15:addr] := Truncate16(a[i+31:i])
- _MM_DOWNCONV_EPI32_SINT16: MEM[addr+15:addr] := Saturate16(a[i+15:i])
- ESAC
- FI
-ENDFOR
-
-
-
-
-
- AVX512IFMA52
- Arithmetic
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512IFMA52
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512IFMA52
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the low 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[51:0])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512IFMA52
- Arithmetic
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512IFMA52
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512IFMA52
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512IFMA52
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply packed unsigned 52-bit integers in each 64-bit element of "b" and "c" to form a 104-bit intermediate result. Add the high 52-bit unsigned integer from the intermediate result with the corresponding unsigned 64-bit integer in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp[127:0] := ZeroExtend64(b[i+51:i]) * ZeroExtend64(c[i+51:i])
- dst[i+63:i] := a[i+63:i] + ZeroExtend64(tmp[103:52])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512PF
- Load
-
-
-
-
-
- Prefetch single-precision (32-bit) floating-point elements from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged in cache. "scale" should be 1, 2, 4 or 8. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-
-FOR j:= 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF
- Load
-
-
-
-
-
-
- Prefetch single-precision (32-bit) floating-point elements from memory using 64-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged in cache using writemask "k" (elements are only brought into cache when their corresponding mask bit is set). "scale" should be 1, 2, 4 or 8.. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-
-FOR j:= 0 to 7
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
- FI
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF
- Store
-
-
-
-
-
- Prefetch single-precision (32-bit) floating-point elements with intent to write into memory using 64-bit indices. Elements are prefetched into cache level "hint", where "hint" is 0 or 1. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF
- Store
-
-
-
-
-
-
- Prefetch single-precision (32-bit) floating-point elements with intent to write into memory using 64-bit indices. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache. 32-bit elements are stored at addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not brought into cache when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
- FI
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF
- Load
-
-
-
-
-
- Prefetch double-precision (64-bit) floating-point elements from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged in cache. "scale" should be 1, 2, 4 or 8. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+63:addr], hint)
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF
- Load
-
-
-
-
-
-
- Prefetch double-precision (64-bit) floating-point elements from memory using 32-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged in cache using writemask "k" (elements are brought into cache only when their corresponding mask bits are set). "scale" should be 1, 2, 4 or 8. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+63:addr], hint)
- FI
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF
- Store
-
-
-
-
-
- Prefetch double-precision (64-bit) floating-point elements with intent to write using 32-bit indices. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache. 64-bit elements are brought into cache from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+63:addr], hint)
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF
- Store
-
-
-
-
-
-
- Prefetch double-precision (64-bit) floating-point elements with intent to write using 32-bit indices. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache. 64-bit elements are brought into cache from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not brought into cache when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+63:addr], hint)
- FI
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF
- Load
-
-
-
-
-
- Prefetch double-precision (64-bit) floating-point elements from memory into cache level specified by "hint" using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+63:addr], hint)
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF
- Load
-
-
-
-
-
-
- Prefetch double-precision (64-bit) floating-point elements from memory into cache level specified by "hint" using 64-bit indices. 64-bit elements are loaded from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). Prefetched elements are merged in cache using writemask "k" (elements are copied from memory when the corresponding mask bit is set). "scale" should be 1, 2, 4 or 8. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+63:addr], hint)
- FI
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF
- Store
-
-
-
-
-
- Prefetch double-precision (64-bit) floating-point elements with intent to write into memory using 64-bit indices. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache. 64-bit elements are brought into cache from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale"). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+63:addr], hint)
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF
- Store
-
-
-
-
-
-
- Prefetch double-precision (64-bit) floating-point elements with intent to write into memory using 64-bit indices. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache. 64-bit elements are brought into cache from addresses starting at "base_addr" and offset by each 64-bit element in "vindex" (each index is scaled by the factor in "scale") subject to mask "k" (elements are not brought into cache when the corresponding mask bit is not set). "scale" should be 1, 2, 4 or 8.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+63:addr], hint)
- FI
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF/KNCNI
- Load
-
-
-
-
-
-
- Prefetch single-precision (32-bit) floating-point elements from memory using 32-bit indices. 32-bit elements are loaded from addresses starting at "base_addr" and offset by each 32-bit element in "vindex" (each index is scaled by the factor in "scale"). Gathered elements are merged in cache using writemask "k" (elements are brought into cache only when their corresponding mask bits are set). "scale" should be 1, 2, 4 or 8. The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
- FI
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF/KNCNI
- Load
-
-
-
-
-
-
- Prefetches a set of 16 single-precision (32-bit) memory locations pointed by base address "base_addr" and 32-bit integer index vector "vindex" with scale "scale" to L1 or L2 level of cache depending on the value of "hint". The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-The "conv" parameter specifies the granularity used by compilers to better encode the instruction. It should be the same as the "conv" parameter specified for the subsequent gather intrinsic.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF/KNCNI
- Load
-
-
-
-
-
-
-
- Prefetches a set of 16 single-precision (32-bit) memory locations pointed by base address "base_addr" and 32-bit integer index vector "vindex" with scale "scale" to L1 or L2 level of cache depending on the value of "hint". Gathered elements are merged in cache using writemask "k" (elements are brought into cache only when their corresponding mask bits are set). The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-The "conv" parameter specifies the granularity used by compilers to better encode the instruction. It should be the same as the "conv" parameter specified for the subsequent gather intrinsic.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
- FI
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF/KNCNI
- Store
-
-
-
-
-
-
- Prefetches a set of 16 single-precision (32-bit) memory locations pointed by base address "base_addr" and 32-bit integer index vector "vindex" with scale "scale" to L1 or L2 level of cache depending on the value of "hint", with a request for exclusive ownership. The "hint" parameter may be one of the following: _MM_HINT_T0 = 1 for prefetching to L1 cache, _MM_HINT_T1 = 2 for prefetching to L2 cache, _MM_HINT_T2 = 3 for prefetching to L2 cache non-temporal, _MM_HINT_NTA = 0 for prefetching to L1 cache non-temporal. The "conv" parameter specifies the granularity used by compilers to better encode the instruction. It should be the same as the "conv" parameter specified for the subsequent scatter intrinsic.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF/KNCNI
- Store
-
-
-
-
-
-
-
- Prefetches a set of 16 single-precision (32-bit) memory locations pointed by base address "base_addr" and 32-bit integer index vector "vindex" with scale "scale" to L1 or L2 level of cache depending on the value of "hint". The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-The "conv" parameter specifies the granularity used by compilers to better encode the instruction. It should be the same as the "conv" parameter specified for the subsequent gather intrinsic. Only those elements whose corresponding mask bit in "k" is set are loaded into cache.
-
-cachev := 0
-FOR j := 0 to 15
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
- FI
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF/KNCNI
- Load
-
-
-
-
-
- Prefetches 16 single-precision (32-bit) floating-point elements in memory starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale". The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF/KNCNI
- Store
-
-
-
-
-
- Prefetches 16 single-precision (32-bit) floating-point elements in memory starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale". The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
-ENDFOR
-
-
-
-
-
-
- Floating Point
- AVX512PF/KNCNI
- Store
-
-
-
-
-
-
- Prefetches 16 single-precision (32-bit) floating-point elements in memory starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale". The "hint" parameter may be 1 (_MM_HINT_T0) for prefetching to L1 cache, or 2 (_MM_HINT_T1) for prefetching to L2 cache. Only those elements whose corresponding mask bit in "k" is set are loaded into the desired cache.
-
-FOR j := 0 to 15
- i := j*32
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- Prefetch(MEM[addr+31:addr], hint)
- FI
-ENDFOR
-
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 64-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := POPCNT(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 64-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := POPCNT(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 64-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := POPCNT(a[i+63:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 64-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := POPCNT(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 64-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := POPCNT(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 64-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := POPCNT(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 32-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := POPCNT(a[i+31:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 32-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := POPCNT(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 32-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := POPCNT(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 32-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := POPCNT(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 32-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := POPCNT(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- AVX512VL
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 32-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := POPCNT(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 32-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := POPCNT(a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 32-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := POPCNT(a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 32-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := POPCNT(a[i+31:i])
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 64-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := POPCNT(a[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 64-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := POPCNT(a[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VPOPCNTDQ
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 64-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := POPCNT(a[i+63:i])
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by the 4 corresponding packed elements in "b", accumulate with the corresponding elements in "src", and store the results in "dst".
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- FOR m := 0 to 3
- addr := b + m * 32
- dst.fp32[i] := dst.fp32[i] + a{m}.fp32[i] * Cast_FP32(MEM[addr+31:addr])
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by the 4 corresponding packed elements in "b", accumulate with the corresponding elements in "src", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- FOR m := 0 to 3
- addr := b + m * 32
- IF k[i]
- dst.fp32[i] := dst.fp32[i] + a{m}.fp32[i] * Cast_FP32(MEM[addr+31:addr])
- FI
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by the 4 corresponding packed elements in "b", accumulate with the corresponding elements in "src", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- FOR m := 0 to 3
- addr := b + m * 32
- IF k[i]
- dst.fp32[i] := dst.fp32[i] + a{m}.fp32[i] * Cast_FP32(MEM[addr+31:addr])
- ELSE
- dst.fp32[i] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by the 4 corresponding packed elements in "b", accumulate the negated intermediate result with the corresponding elements in "src", and store the results in "dst".
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- FOR m := 0 to 3
- addr := b + m * 32
- dst.fp32[i] := dst.fp32[i] - a{m}.fp32[i] * Cast_FP32(MEM[addr+31:addr])
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by the 4 corresponding packed elements in "b", accumulate the negated intermediate result with the corresponding elements in "src", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- FOR m := 0 to 3
- addr := b + m * 32
- IF k[i]
- dst.fp32[i] := dst.fp32[i] - a{m}.fp32[i] * Cast_FP32(MEM[addr+31:addr])
- FI
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by the 4 corresponding packed elements in "b", accumulate the negated intermediate result with the corresponding elements in "src", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- FOR m := 0 to 3
- addr := b + m * 32
- IF k[i]
- dst.fp32[i] := dst.fp32[i] - a{m}.fp32[i] * Cast_FP32(MEM[addr+31:addr])
- ELSE
- dst.fp32[i] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by corresponding element in "b", accumulate with the lower element in "a", and store the result in the lower element of "dst".
-
-dst[127:0] := src[127:0]
-FOR m := 0 to 3
- addr := b + m * 32
- dst.fp32[0] := dst.fp32[0] + a{m}.fp32[0] * Cast_FP32(MEM[addr+31:addr])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by corresponding element in "b", accumulate with the lower element in "a", and store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set).
-
-dst[127:0] := src[127:0]
-IF k[0]
- FOR m := 0 to 3
- addr := b + m * 32
- dst.fp32[0] := dst.fp32[0] + a{m}.fp32[0] * Cast_FP32(MEM[addr+31:addr])
- ENDFOR
-FI
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by corresponding element in "b", accumulate with the lower element in "a", and store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set).
-
-dst[127:0] := src[127:0]
-IF k[0]
- FOR m := 0 to 3
- addr := b + m * 32
- dst.fp32[0] := dst.fp32[0] + a{m}.fp32[0] * Cast_FP32(MEM[addr+31:addr])
- ENDFOR
-ELSE
- dst.fp32[0] := 0
-FI
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by corresponding element in "b", accumulate the negated intermediate result with the lower element in "src", and store the result in the lower element of "dst".
-
-dst[127:0] := src[127:0]
-FOR m := 0 to 3
- addr := b + m * 32
- dst.fp32[0] := dst.fp32[0] - a{m}.fp32[0] * Cast_FP32(MEM[addr+31:addr])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by corresponding element in "b", accumulate the negated intermediate result with the lower element in "src", and store the result in the lower element of "dst" using writemask "k" (the element is copied from "a" when mask bit 0 is not set).
-
-dst[127:0] := src[127:0]
-IF k[0]
- FOR m := 0 to 3
- addr := b + m * 32
- dst.fp32[0] := dst.fp32[0] - a{m}.fp32[0] * Cast_FP32(MEM[addr+31:addr])
- ENDFOR
-FI
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_4FMAPS
- Arithmetic
-
-
-
-
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements specified in 4 consecutive operands "a0" through "a3" by corresponding element in "b", accumulate the negated intermediate result with the lower element in "src", and store the result in the lower element of "dst" using zeromask "k" (the element is zeroed out when mask bit 0 is not set).
-
-dst[127:0] := src[127:0]
-IF k[0]
- FOR m := 0 to 3
- addr := b + m * 32
- dst.fp32[0] := dst.fp32[0] - a{m}.fp32[0] * Cast_FP32(MEM[addr+31:addr])
- ENDFOR
-ELSE
- dst.fp32[0] := 0
-FI
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_4VNNIW
- Arithmetic
-
-
-
-
-
-
-
- Compute 4 sequential operand source-block dot-products of two signed 16-bit element operands with 32-bit element accumulation, and store the results in "dst".
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- FOR m := 0 to 3
- lim_base := b + m*32
- t.dword := MEM[lim_base+31:lim_base]
- p1.dword := SignExtend32(a{m}.word[2*i+0]) * SignExtend32(Cast_Int16(t.word[0]))
- p2.dword := SignExtend32(a{m}.word[2*i+1]) * SignExtend32(Cast_Int16(t.word[1]))
- dst.dword[i] := dst.dword[i] + p1.dword + p2.dword
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_4VNNIW
- Arithmetic
-
-
-
-
-
-
-
-
- Compute 4 sequential operand source-block dot-products of two signed 16-bit element operands with 32-bit element accumulation with mask, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- IF k[i]
- FOR m := 0 to 3
- lim_base := b + m*32
- t.dword := MEM[lim_base+31:lim_base]
- p1.dword := SignExtend32(a{m}.word[2*i+0]) * SignExtend32(Cast_Int16(t.word[0]))
- p2.dword := SignExtend32(a{m}.word[2*i+1]) * SignExtend32(Cast_Int16(t.word[1]))
- dst.dword[i] := dst.dword[i] + p1.dword + p2.dword
- ENDFOR
- ELSE
- dst.dword[i] := src.dword[i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_4VNNIW
- Arithmetic
-
-
-
-
-
-
-
-
- Compute 4 sequential operand source-block dot-products of two signed 16-bit element operands with 32-bit element accumulation with mask, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- IF k[i]
- FOR m := 0 to 3
- lim_base := b + m*32
- t.dword := MEM[lim_base+31:lim_base]
- p1.dword := SignExtend32(a{m}.word[2*i+0]) * SignExtend32(Cast_Int16(t.word[0]))
- p2.dword := SignExtend32(a{m}.word[2*i+1]) * SignExtend32(Cast_Int16(t.word[1]))
- dst.dword[i] := dst.dword[i] + p1.dword + p2.dword
- ENDFOR
- ELSE
- dst.dword[i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_4VNNIW
- Arithmetic
-
-
-
-
-
-
-
- Compute 4 sequential operand source-block dot-products of two signed 16-bit element operands with 32-bit element accumulation and signed saturation, and store the results in "dst".
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- FOR m := 0 to 3
- lim_base := b + m*32
- t.dword := MEM[lim_base+31:lim_base]
- p1.dword := SignExtend32(a{m}.word[2*i+0]) * SignExtend32(Cast_Int16(t.word[0]))
- p2.dword := SignExtend32(a{m}.word[2*i+1]) * SignExtend32(Cast_Int16(t.word[1]))
- dst.dword[i] := Saturate32(dst.dword[i] + p1.dword + p2.dword)
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_4VNNIW
- Arithmetic
-
-
-
-
-
-
-
-
- Compute 4 sequential operand source-block dot-products of two signed 16-bit element operands with 32-bit element accumulation with mask and signed saturation, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set)..
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- IF k[i]
- FOR m := 0 to 3
- lim_base := b + m*32
- t.dword := MEM[lim_base+31:lim_base]
- p1.dword := SignExtend32(a{m}.word[2*i+0]) * SignExtend32(Cast_Int16(t.word[0]))
- p2.dword := SignExtend32(a{m}.word[2*i+1]) * SignExtend32(Cast_Int16(t.word[1]))
- dst.dword[i] := Saturate32(dst.dword[i] + p1.dword + p2.dword)
- ENDFOR
- ELSE
- dst.dword[i] := src.dword[i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_4VNNIW
- Arithmetic
-
-
-
-
-
-
-
-
- Compute 4 sequential operand source-block dot-products of two signed 16-bit element operands with 32-bit element accumulation with mask and signed saturation, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set)..
-
-dst[511:0] := src[511:0]
-FOR i := 0 to 15
- IF k[i]
- FOR m := 0 to 3
- lim_base := b + m*32
- t.dword := MEM[lim_base+31:lim_base]
- p1.dword := SignExtend32(a{m}.word[2*i+0]) * SignExtend32(Cast_Int16(t.word[0]))
- p2.dword := SignExtend32(a{m}.word[2*i+1]) * SignExtend32(Cast_Int16(t.word[1]))
- dst.dword[i] := Saturate32(dst.dword[i] + p1.dword + p2.dword)
- ENDFOR
- ELSE
- dst.dword[i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in two vectors "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in single vector "dst".
-
-FOR j := 0 to 7
- IF j < 4
- t := b.fp32[j]
- ELSE
- t := a.fp32[j-4]
- FI
- dst.word[j] := Convert_FP32_To_BF16(t)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in two vectors "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in single vector "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- IF j < 4
- t := b.fp32[j]
- ELSE
- t := a.fp32[j-4]
- FI
- dst.word[j] := Convert_FP32_To_BF16(t)
- ELSE
- dst.word[j] := src.word[j]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in two vectors "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in single vector "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- IF j < 4
- t := b.fp32[j]
- ELSE
- t := a.fp32[j-4]
- FI
- dst.word[j] := Convert_FP32_To_BF16(t)
- ELSE
- dst.word[j] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in two vectors "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in single vector "dst".
-
-FOR j := 0 to 15
- IF j < 8
- t := b.fp32[j]
- ELSE
- t := a.fp32[j-8]
- FI
- dst.word[j] := Convert_FP32_To_BF16(t)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in two vectors "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in single vector "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- IF j < 8
- t := b.fp32[j]
- ELSE
- t := a.fp32[j-8]
- FI
- dst.word[j] := Convert_FP32_To_BF16(t)
- ELSE
- dst.word[j] := src.word[j]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in two vectors "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in single vector "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- IF j < 8
- t := b.fp32[j]
- ELSE
- t := a.fp32[j-8]
- FI
- dst.word[j] := Convert_FP32_To_BF16(t)
- ELSE
- dst.word[j] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in two vectors "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in single vector "dst".
-
-FOR j := 0 to 31
- IF j < 16
- t := b.fp32[j]
- ELSE
- t := a.fp32[j-16]
- FI
- dst.word[j] := Convert_FP32_To_BF16(t)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512F
- Convert
-
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in two vectors "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in single vector "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- IF k[j]
- IF j < 16
- t := b.fp32[j]
- ELSE
- t := a.fp32[j-16]
- FI
- dst.word[j] := Convert_FP32_To_BF16(t)
- ELSE
- dst.word[j] := src.word[j]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in two vectors "a" and "b" to packed BF16 (16-bit) floating-point elements, and store the results in single vector "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- IF k[j]
- IF j < 16
- t := b.fp32[j]
- ELSE
- t := a.fp32[j-16]
- FI
- dst.word[j] := Convert_FP32_To_BF16(t)
- ELSE
- dst.word[j] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed BF16 (16-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed BF16 (16-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- IF k[j]
- dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
- ELSE
- dst.word[j] := src.word[j]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed BF16 (16-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- IF k[j]
- dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
- ELSE
- dst.word[j] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed BF16 (16-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 7
- dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed BF16 (16-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
- ELSE
- dst.word[j] := src.word[j]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed BF16 (16-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
- ELSE
- dst.word[j] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512F
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed BF16 (16-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 15
- dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512F
- Convert
-
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed BF16 (16-bit) floating-point elements, and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
- ELSE
- dst.word[j] := src.word[j]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512F
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed BF16 (16-bit) floating-point elements, and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- dst.word[j] := Convert_FP32_To_BF16(a.fp32[j])
- ELSE
- dst.word[j] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Arithmetic
-
-
-
-
- Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b", accumulating the intermediate single-precision (32-bit) floating-point elements with elements in "src", and store the results in "dst".
-
-DEFINE make_fp32(x[15:0]) {
- y.fp32 := 0.0
- y[31:16] := x[15:0]
- RETURN y
-}
-dst := src
-FOR j := 0 to 3
- dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
- dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Arithmetic
-
-
-
-
-
- Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b", accumulating the intermediate single-precision (32-bit) floating-point elements with elements in "src", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE make_fp32(x[15:0]) {
- y.fp32 := 0.0
- y[31:16] := x[15:0]
- RETURN y
-}
-dst := src
-FOR j := 0 to 3
- IF k[j]
- dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
- dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Arithmetic
-
-
-
-
-
- Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b", accumulating the intermediate single-precision (32-bit) floating-point elements with elements in "src", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE make_fp32(x[15:0]) {
- y.fp32 := 0.0
- y[31:16] := x[15:0]
- RETURN y
-}
-dst := src
-FOR j := 0 to 3
- IF k[j]
- dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
- dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Arithmetic
-
-
-
-
- Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b", accumulating the intermediate single-precision (32-bit) floating-point elements with elements in "src", and store the results in "dst".
-
-DEFINE make_fp32(x[15:0]) {
- y.fp32 := 0.0
- y[31:16] := x[15:0]
- RETURN y
-}
-dst := src
-FOR j := 0 to 7
- dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
- dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Arithmetic
-
-
-
-
-
- Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b", accumulating the intermediate single-precision (32-bit) floating-point elements with elements in "src", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE make_fp32(x[15:0]) {
- y.fp32 := 0.0
- y[31:16] := x[15:0]
- RETURN y
-}
-dst := src
-FOR j := 0 to 7
- IF k[j]
- dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
- dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512VL
- Arithmetic
-
-
-
-
-
- Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b", accumulating the intermediate single-precision (32-bit) floating-point elements with elements in "src", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE make_fp32(x[15:0]) {
- y.fp32 := 0.0
- y[31:16] := x[15:0]
- RETURN y
-}
-dst := src
-FOR j := 0 to 7
- IF k[j]
- dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
- dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512F
- Arithmetic
-
-
-
-
- Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b", accumulating the intermediate single-precision (32-bit) floating-point elements with elements in "src", and store the results in "dst".
-
-DEFINE make_fp32(x[15:0]) {
- y.fp32 := 0.0
- y[31:16] := x[15:0]
- RETURN y
-}
-dst := src
-FOR j := 0 to 15
- dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
- dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512F
- Arithmetic
-
-
-
-
-
- Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b", accumulating the intermediate single-precision (32-bit) floating-point elements with elements in "src", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE make_fp32(x[15:0]) {
- y.fp32 := 0.0
- y[31:16] := x[15:0]
- RETURN y
-}
-dst := src
-FOR j := 0 to 15
- IF k[j]
- dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
- dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- AVX512_BF16
- AVX512F
- Arithmetic
-
-
-
-
-
- Compute dot-product of BF16 (16-bit) floating-point pairs in "a" and "b", accumulating the intermediate single-precision (32-bit) floating-point elements with elements in "src", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE make_fp32(x[15:0]) {
- y.fp32 := 0.0
- y[31:16] := x[15:0]
- RETURN y
-}
-dst := src
-FOR j := 0 to 15
- IF k[j]
- dst.fp32[j] += make_fp32(a.bf16[2*j+1]) * make_fp32(b.bf16[2*j+1])
- dst.fp32[j] += make_fp32(a.bf16[2*j+0]) * make_fp32(b.bf16[2*j+0])
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512_BITALG
- Bit Manipulation
-
-
-
-
- Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8 corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit element of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR i := 0 to 7 //Qword
- FOR j := 0 to 7 // Byte
- IF k[i*8+j]
- m := c.qword[i].byte[j] & 0x3F
- dst[i*8+j] := b.qword[i].bit[m]
- ELSE
- dst[i*8+j] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512_BITALG
- Bit Manipulation
-
-
-
- Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8 corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit element of "dst".
-
-FOR i := 0 to 7 //Qword
- FOR j := 0 to 7 // Byte
- m := c.qword[i].byte[j] & 0x3F
- dst[i*8+j] := b.qword[i].bit[m]
- ENDFOR
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
-
- Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8 corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit element of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR i := 0 to 3 //Qword
- FOR j := 0 to 7 // Byte
- IF k[i*8+j]
- m := c.qword[i].byte[j] & 0x3F
- dst[i*8+j] := b.qword[i].bit[m]
- ELSE
- dst[i*8+j] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
- Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8 corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit element of "dst".
-
-FOR i := 0 to 3 //Qword
- FOR j := 0 to 7 // Byte
- m := c.qword[i].byte[j] & 0x3F
- dst[i*8+j] := b.qword[i].bit[m]
- ENDFOR
-ENDFOR
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
-
- Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8 corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit element of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR i := 0 to 1 //Qword
- FOR j := 0 to 7 // Byte
- IF k[i*8+j]
- m := c.qword[i].byte[j] & 0x3F
- dst[i*8+j] := b.qword[i].bit[m]
- ELSE
- dst[i*8+j] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
- Gather 64 bits from "b" using selection bits in "c". For each 64-bit element in "b", gather 8 bits from the 64-bit element in "b" at 8 bit position controlled by the 8 corresponding 8-bit elements of "c", and store the result in the corresponding 8-bit element of "dst".
-
-FOR i := 0 to 1 //Qword
- FOR j := 0 to 7 // Byte
- m := c.qword[i].byte[j] & 0x3F
- dst[i*8+j] := b.qword[i].bit[m]
- ENDFOR
-ENDFOR
-dst[MAX:16] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 16-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := POPCNT(a[i+15:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 16-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := POPCNT(a[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 16-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := POPCNT(a[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 16-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := POPCNT(a[i+15:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 16-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := POPCNT(a[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 16-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := POPCNT(a[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 16-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := POPCNT(a[i+15:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 16-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := POPCNT(a[i+15:i])
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 16-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := POPCNT(a[i+15:i])
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 8-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 63
- i := j*8
- dst[i+7:i] := POPCNT(a[i+7:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 8-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := POPCNT(a[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 8-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := POPCNT(a[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 8-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 31
- i := j*8
- dst[i+7:i] := POPCNT(a[i+7:i])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 8-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := POPCNT(a[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 8-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := POPCNT(a[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
- Count the number of logical 1 bits in packed 8-bit integers in "a", and store the results in "dst".
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := POPCNT(a[i+7:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
-
- Count the number of logical 1 bits in packed 8-bit integers in "a", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := POPCNT(a[i+7:i])
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_BITALG
- AVX512VL
- Bit Manipulation
-
-
-
- Count the number of logical 1 bits in packed 8-bit integers in "a", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE POPCNT(a) {
- count := 0
- DO WHILE a > 0
- count += a[0]
- a >>= 1
- OD
- RETURN count
-}
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := POPCNT(a[i+7:i])
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512_VBMI
- Bit Manipulation
-
-
-
- For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular shift control within the corresponding 64-bit element of "a", and store the 8 assembled bytes to the corresponding 64-bit element of "dst".
-
-FOR i := 0 to 7
- q := i * 64
- FOR j := 0 to 7
- tmp8 := 0
- ctrl := a[q+j*8+7:q+j*8] & 63
- FOR l := 0 to 7
- tmp8[l] := b[q+((ctrl+l) & 63)]
- ENDFOR
- dst[q+j*8+7:q+j*8] := tmp8[7:0]
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512_VBMI
- Bit Manipulation
-
-
-
-
-
- For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular shift control within the corresponding 64-bit element of "a", and store the 8 assembled bytes to the corresponding 64-bit element of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR i := 0 to 7
- q := i * 64
- FOR j := 0 to 7
- tmp8 := 0
- ctrl := a[q+j*8+7:q+j*8] & 63
- FOR l := 0 to 7
- tmp8[l] := b[q+((ctrl+l) & 63)]
- ENDFOR
- IF k[i*8+j]
- dst[q+j*8+7:q+j*8] := tmp8[7:0]
- ELSE
- dst[q+j*8+7:q+j*8] := src[q+j*8+7:q+j*8]
- FI
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512_VBMI
- Bit Manipulation
-
-
-
-
- For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular shift control within the corresponding 64-bit element of "a", and store the 8 assembled bytes to the corresponding 64-bit element of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR i := 0 to 7
- q := i * 64
- FOR j := 0 to 7
- tmp8 := 0
- ctrl := a[q+j*8+7:q+j*8] & 63
- FOR l := 0 to 7
- tmp8[l] := b[q+((ctrl+l) & 63)]
- ENDFOR
- IF k[i*8+j]
- dst[q+j*8+7:q+j*8] := tmp8[7:0]
- ELSE
- dst[q+j*8+7:q+j*8] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Bit Manipulation
-
-
-
- For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular shift control within the corresponding 64-bit element of "a", and store the 8 assembled bytes to the corresponding 64-bit element of "dst".
-
-FOR i := 0 to 3
- q := i * 64
- FOR j := 0 to 7
- tmp8 := 0
- ctrl := a[q+j*8+7:q+j*8] & 63
- FOR l := 0 to 7
- tmp8[l] := b[q+((ctrl+l) & 63)]
- ENDFOR
- dst[q+j*8+7:q+j*8] := tmp8[7:0]
- ENDFOR
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Bit Manipulation
-
-
-
-
-
- For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular shift control within the corresponding 64-bit element of "a", and store the 8 assembled bytes to the corresponding 64-bit element of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR i := 0 to 3
- q := i * 64
- FOR j := 0 to 7
- tmp8 := 0
- ctrl := a[q+j*8+7:q+j*8] & 63
- FOR l := 0 to 7
- tmp8[l] := b[q+((ctrl+l) & 63)]
- ENDFOR
- IF k[i*8+j]
- dst[q+j*8+7:q+j*8] := tmp8[7:0]
- ELSE
- dst[q+j*8+7:q+j*8] := src[q+j*8+7:q+j*8]
- FI
- ENDFOR
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Bit Manipulation
-
-
-
-
- For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular shift control within the corresponding 64-bit element of "a", and store the 8 assembled bytes to the corresponding 64-bit element of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR i := 0 to 3
- q := i * 64
- FOR j := 0 to 7
- tmp8 := 0
- ctrl := a[q+j*8+7:q+j*8] & 63
- FOR l := 0 to 7
- tmp8[l] := b[q+((ctrl+l) & 63)]
- ENDFOR
- IF k[i*8+j]
- dst[q+j*8+7:q+j*8] := tmp8[7:0]
- ELSE
- dst[q+j*8+7:q+j*8] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Bit Manipulation
-
-
-
- For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular shift control within the corresponding 64-bit element of "a", and store the 8 assembled bytes to the corresponding 64-bit element of "dst".
-
-FOR i := 0 to 1
- q := i * 64
- FOR j := 0 to 7
- tmp8 := 0
- ctrl := a[q+j*8+7:q+j*8] & 63
- FOR l := 0 to 7
- tmp8[l] := b[q+((ctrl+l) & 63)]
- ENDFOR
- dst[q+j*8+7:q+j*8] := tmp8[7:0]
- ENDFOR
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Bit Manipulation
-
-
-
-
-
- For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular shift control within the corresponding 64-bit element of "a", and store the 8 assembled bytes to the corresponding 64-bit element of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR i := 0 to 1
- q := i * 64
- FOR j := 0 to 7
- tmp8 := 0
- ctrl := a[q+j*8+7:q+j*8] & 63
- FOR l := 0 to 7
- tmp8[l] := b[q+((ctrl+l) & 63)]
- ENDFOR
- IF k[i*8+j]
- dst[q+j*8+7:q+j*8] := tmp8[7:0]
- ELSE
- dst[q+j*8+7:q+j*8] := src[q+j*8+7:q+j*8]
- FI
- ENDFOR
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Bit Manipulation
-
-
-
-
- For each 64-bit element in "b", select 8 unaligned bytes using a byte-granular shift control within the corresponding 64-bit element of "a", and store the 8 assembled bytes to the corresponding 64-bit element of "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR i := 0 to 1
- q := i * 64
- FOR j := 0 to 7
- tmp8 := 0
- ctrl := a[q+j*8+7:q+j*8] & 63
- FOR l := 0 to 7
- tmp8[l] := b[q+((ctrl+l) & 63)]
- ENDFOR
- IF k[i*8+j]
- dst[q+j*8+7:q+j*8] := tmp8[7:0]
- ELSE
- dst[q+j*8+7:q+j*8] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512_VBMI
- Swizzle
-
-
-
- Shuffle 8-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- id := idx[i+5:i]*8
- dst[i+7:i] := a[id+7:id]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512_VBMI
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- id := idx[i+5:i]*8
- IF k[j]
- dst[i+7:i] := a[id+7:id]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512_VBMI
- Swizzle
-
-
-
-
- Shuffle 8-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- id := idx[i+5:i]*8
- IF k[j]
- dst[i+7:i] := a[id+7:id]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
- Shuffle 8-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- id := idx[i+4:i]*8
- dst[i+7:i] := a[id+7:id]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- id := idx[i+4:i]*8
- IF k[j]
- dst[i+7:i] := a[id+7:id]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
- Shuffle 8-bit integers in "a" across lanes using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- id := idx[i+4:i]*8
- IF k[j]
- dst[i+7:i] := a[id+7:id]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
- Shuffle 8-bit integers in "a" using the corresponding index in "idx", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- id := idx[i+3:i]*8
- dst[i+7:i] := a[id+7:id]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" using the corresponding index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- id := idx[i+3:i]*8
- IF k[j]
- dst[i+7:i] := a[id+7:id]
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
- Shuffle 8-bit integers in "a" using the corresponding index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- id := idx[i+3:i]*8
- IF k[j]
- dst[i+7:i] := a[id+7:id]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512_VBMI
- Swizzle
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 63
- i := j*8
- off := 8*idx[i+5:i]
- dst[i+7:i] := idx[i+6] ? b[off+7:off] : a[off+7:off]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512_VBMI
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- off := 8*idx[i+5:i]
- dst[i+7:i] := idx[i+6] ? b[off+7:off] : a[off+7:off]
- ELSE
- dst[i+7:i] := a[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512_VBMI
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- off := 8*idx[i+5:i]
- dst[i+7:i] := idx[i+6] ? b[off+7:off] : a[off+7:off]
- ELSE
- dst[i+7:i] := idx[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- AVX512_VBMI
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- off := 8*idx[i+5:i]
- dst[i+7:i] := idx[i+6] ? b[off+7:off] : a[off+7:off]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 31
- i := j*8
- off := 8*idx[i+4:i]
- dst[i+7:i] := idx[i+5] ? b[off+7:off] : a[off+7:off]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- off := 8*idx[i+4:i]
- dst[i+7:i] := idx[i+5] ? b[off+7:off] : a[off+7:off]
- ELSE
- dst[i+7:i] := a[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- off := 8*idx[i+4:i]
- dst[i+7:i] := idx[i+5] ? b[off+7:off] : a[off+7:off]
- ELSE
- dst[i+7:i] := idx[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" across lanes using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- off := 8*idx[i+4:i]
- dst[i+7:i] := idx[i+5] ? b[off+7:off] : a[off+7:off]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- off := 8*idx[i+3:i]
- dst[i+7:i] := idx[i+4] ? b[off+7:off] : a[off+7:off]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- off := 8*idx[i+3:i]
- dst[i+7:i] := idx[i+4] ? b[off+7:off] : a[off+7:off]
- ELSE
- dst[i+7:i] := a[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- off := 8*idx[i+3:i]
- dst[i+7:i] := idx[i+4] ? b[off+7:off] : a[off+7:off]
- ELSE
- dst[i+7:i] := idx[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- AVX512_VBMI
- AVX512VL
- Swizzle
-
-
-
-
-
- Shuffle 8-bit integers in "a" and "b" using the corresponding selector and index in "idx", and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- off := 8*idx[i+3:i]
- dst[i+7:i] := idx[i+4] ? b[off+7:off] : a[off+7:off]
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] & 63)
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 64-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] & 63)
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 64-bits in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] & 63)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] & 63)
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 64-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] & 63)
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 64-bits in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] & 63)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] & 63)
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 64-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] & 63)
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 64-bits in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> (c[i+63:i] & 63)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 32-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 32-bits in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 32-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 32-bits in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 32-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 32-bits in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> (c[i+31:i] & 31)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 16-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 16-bits in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 16-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 16-bits in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 16-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by the amount specified in the corresponding element of "c", and store the lower 16-bits in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> (c[i+15:i] & 15)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in "dst" using writemask "k" (elements are copied from "src"" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in "dst" using writemask "k" (elements are copied from "src"" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in "dst" using writemask "k" (elements are copied from "src"" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "b" and "a" producing an intermediate 128-bit result. Shift the result right by "imm8" bits, and store the lower 64-bits in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ((b[i+63:i] << 64)[127:0] | a[i+63:i]) >> imm8[5:0]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "b" and "a" producing an intermediate 64-bit result. Shift the result right by "imm8" bits, and store the lower 32-bits in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ((b[i+31:i] << 32)[63:0] | a[i+31:i]) >> imm8[4:0]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in "dst".
-
-FOR j := 0 to 31
- i := j*16
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in "dst".
-
-FOR j := 0 to 15
- i := j*16
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "b" and "a" producing an intermediate 32-bit result. Shift the result right by "imm8" bits, and store the lower 16-bits in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := ((b[i+15:i] << 16)[31:0] | a[i+15:i]) >> imm8[3:0]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 64-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 64-bits in "dst".
-
-FOR j := 0 to 7
- i := j*64
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
- dst[i+63:i] := tmp[127:64]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 64-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 64-bits in "dst".
-
-FOR j := 0 to 3
- i := j*64
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
- dst[i+63:i] := tmp[127:64]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 64-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 64-bits in "dst".
-
-FOR j := 0 to 1
- i := j*64
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << (c[i+63:i] & 63)
- dst[i+63:i] := tmp[127:64]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 32-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 32-bits in "dst".
-
-FOR j := 0 to 15
- i := j*32
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
- dst[i+31:i] := tmp[63:32]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 32-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 32-bits in "dst".
-
-FOR j := 0 to 7
- i := j*32
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
- dst[i+31:i] := tmp[63:32]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 32-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 32-bits in "dst".
-
-FOR j := 0 to 3
- i := j*32
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << (c[i+31:i] & 31)
- dst[i+31:i] := tmp[63:32]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 16-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 16-bits in "dst".
-
-FOR j := 0 to 31
- i := j*16
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 16-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 16-bits in "dst".
-
-FOR j := 0 to 15
- i := j*16
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 16-bits in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by the amount specified in the corresponding element of "c", and store the upper 16-bits in "dst".
-
-FOR j := 0 to 7
- i := j*16
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << (c[i+15:i] & 15)
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in "dst").
-
-FOR j := 0 to 7
- i := j*64
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
- dst[i+63:i] := tmp[127:64]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in "dst").
-
-FOR j := 0 to 3
- i := j*64
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
- dst[i+63:i] := tmp[127:64]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 1
- i := j*64
- IF k[j]
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
- dst[i+63:i] := tmp[127:64]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 64-bit integers in "a" and "b" producing an intermediate 128-bit result. Shift the result left by "imm8" bits, and store the upper 64-bits in "dst").
-
-FOR j := 0 to 1
- i := j*64
- tmp[127:0] := ((a[i+63:i] << 64)[127:0] | b[i+63:i]) << imm8[5:0]
- dst[i+63:i] := tmp[127:64]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in "dst".
-
-FOR j := 0 to 15
- i := j*32
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
- dst[i+31:i] := tmp[63:32]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in "dst".
-
-FOR j := 0 to 7
- i := j*32
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
- dst[i+31:i] := tmp[63:32]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- i := j*32
- IF k[j]
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
- dst[i+31:i] := tmp[63:32]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 32-bit integers in "a" and "b" producing an intermediate 64-bit result. Shift the result left by "imm8" bits, and store the upper 32-bits in "dst".
-
-FOR j := 0 to 3
- i := j*32
- tmp[63:0] := ((a[i+31:i] << 32)[63:0] | b[i+31:i]) << imm8[4:0]
- dst[i+31:i] := tmp[63:32]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in "dst").
-
-FOR j := 0 to 31
- i := j*16
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in "dst").
-
-FOR j := 0 to 15
- i := j*16
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
- dst[i+15:i] := tmp[31:16]
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Shift
-
-
-
-
- Concatenate packed 16-bit integers in "a" and "b" producing an intermediate 32-bit result. Shift the result left by "imm8" bits, and store the upper 16-bits in "dst").
-
-FOR j := 0 to 7
- i := j*16
- tmp[31:0] := ((a[i+15:i] << 16)[31:0] | b[i+15:i]) << imm8[3:0]
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Load
- Swizzle
-
-
-
- Load contiguous active 16-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
- m := m + 16
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Load
- Swizzle
-
-
-
-
- Load contiguous active 16-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
- m := m + 16
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Swizzle
-
-
-
- Load contiguous active 16-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[m+15:m]
- m := m + 16
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Swizzle
-
-
-
-
- Load contiguous active 16-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[i+15:i] := a[m+15:m]
- m := m + 16
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Load
- Swizzle
-
-
-
- Load contiguous active 16-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
- m := m + 16
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Load
- Swizzle
-
-
-
-
- Load contiguous active 16-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
- m := m + 16
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
- Load contiguous active 16-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[m+15:m]
- m := m + 16
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
-
- Load contiguous active 16-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[i+15:i] := a[m+15:m]
- m := m + 16
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Load
- Swizzle
-
-
-
- Load contiguous active 16-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
- m := m + 16
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Load
- Swizzle
-
-
-
-
- Load contiguous active 16-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := MEM[mem_addr+m+15:mem_addr+m]
- m := m + 16
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
- Load contiguous active 16-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[m+15:m]
- m := m + 16
- ELSE
- dst[i+15:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
-
- Load contiguous active 16-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[i+15:i] := a[m+15:m]
- m := m + 16
- ELSE
- dst[i+15:i] := src[i+15:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Load
- Swizzle
-
-
-
- Load contiguous active 8-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
- m := m + 8
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Load
- Swizzle
-
-
-
-
- Load contiguous active 8-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
- m := m + 8
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Load
- Swizzle
-
-
-
- Load contiguous active 8-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
- m := m + 8
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Load
- Swizzle
-
-
-
-
- Load contiguous active 8-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
- m := m + 8
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Load
- Swizzle
-
-
-
- Load contiguous active 8-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
- m := m + 8
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Load
- Swizzle
-
-
-
-
- Load contiguous active 8-bit integers from unaligned memory at "mem_addr" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := MEM[mem_addr+m+7:mem_addr+m]
- m := m + 8
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Swizzle
-
-
-
- Load contiguous active 8-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[m+7:m]
- m := m + 8
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Swizzle
-
-
-
-
- Load contiguous active 8-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[i+7:i] := a[m+7:m]
- m := m + 8
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
- Load contiguous active 8-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[m+7:m]
- m := m + 8
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
-
- Load contiguous active 8-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[i+7:i] := a[m+7:m]
- m := m + 8
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
- Load contiguous active 8-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[m+7:m]
- m := m + 8
- ELSE
- dst[i+7:i] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
-
- Load contiguous active 8-bit integers from "a" (those with their respective bit set in mask "k"), and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-m := 0
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[i+7:i] := a[m+7:m]
- m := m + 8
- ELSE
- dst[i+7:i] := src[i+7:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Store
- Swizzle
-
-
-
-
- Contiguously store the active 16-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 16
-m := base_addr
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- MEM[m+size-1:m] := a[i+15:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Store
- Swizzle
-
-
-
-
- Contiguously store the active 16-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 16
-m := base_addr
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- MEM[m+size-1:m] := a[i+15:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Store
- Swizzle
-
-
-
-
- Contiguously store the active 16-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 16
-m := base_addr
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- MEM[m+size-1:m] := a[i+15:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Swizzle
-
-
-
- Contiguously store the active 16-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 16
-m := 0
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[m+size-1:m] := a[i+15:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := 0
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Swizzle
-
-
-
-
- Contiguously store the active 16-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 16
-m := 0
-FOR j := 0 to 31
- i := j*16
- IF k[j]
- dst[m+size-1:m] := a[i+15:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := src[511:m]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
- Contiguously store the active 16-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 16
-m := 0
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[m+size-1:m] := a[i+15:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
-
- Contiguously store the active 16-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 16
-m := 0
-FOR j := 0 to 15
- i := j*16
- IF k[j]
- dst[m+size-1:m] := a[i+15:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := src[255:m]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
- Contiguously store the active 16-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 16
-m := 0
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[m+size-1:m] := a[i+15:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
-
- Contiguously store the active 16-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 16
-m := 0
-FOR j := 0 to 7
- i := j*16
- IF k[j]
- dst[m+size-1:m] := a[i+15:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := src[127:m]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Store
- Swizzle
-
-
-
-
- Contiguously store the active 8-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 8
-m := base_addr
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- MEM[m+size-1:m] := a[i+7:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Store
- Swizzle
-
-
-
-
- Contiguously store the active 8-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 8
-m := base_addr
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- MEM[m+size-1:m] := a[i+7:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Store
- Swizzle
-
-
-
-
- Contiguously store the active 8-bit integers in "a" (those with their respective bit set in writemask "k") to unaligned memory at "base_addr".
-
-size := 8
-m := base_addr
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- MEM[m+size-1:m] := a[i+7:i]
- m := m + size
- FI
-ENDFOR
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Swizzle
-
-
-
- Contiguously store the active 8-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 8
-m := 0
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[m+size-1:m] := a[i+7:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := 0
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- Swizzle
-
-
-
-
- Contiguously store the active 8-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 8
-m := 0
-FOR j := 0 to 63
- i := j*8
- IF k[j]
- dst[m+size-1:m] := a[i+7:i]
- m := m + size
- FI
-ENDFOR
-dst[511:m] := src[511:m]
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
- Contiguously store the active 8-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 8
-m := 0
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[m+size-1:m] := a[i+7:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := 0
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
-
- Contiguously store the active 8-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 8
-m := 0
-FOR j := 0 to 31
- i := j*8
- IF k[j]
- dst[m+size-1:m] := a[i+7:i]
- m := m + size
- FI
-ENDFOR
-dst[255:m] := src[255:m]
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
- Contiguously store the active 8-bit integers in "a" (those with their respective bit set in zeromask "k") to "dst", and set the remaining elements to zero.
-
-size := 8
-m := 0
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[m+size-1:m] := a[i+7:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := 0
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VBMI2
- AVX512VL
- Swizzle
-
-
-
-
- Contiguously store the active 8-bit integers in "a" (those with their respective bit set in writemask "k") to "dst", and pass through the remaining elements from "src".
-
-size := 8
-m := 0
-FOR j := 0 to 15
- i := j*8
- IF k[j]
- dst[m+size-1:m] := a[i+7:i]
- m := m + size
- FI
-ENDFOR
-dst[127:m] := src[127:m]
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 15
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 7
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 3
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := src.dword[j] + tmp1 + tmp2
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := src.dword[j] + tmp1 + tmp2
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 15
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := src.dword[j] + tmp1 + tmp2
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := src.dword[j] + tmp1 + tmp2
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := src.dword[j] + tmp1 + tmp2
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 7
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := src.dword[j] + tmp1 + tmp2
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := src.dword[j] + tmp1 + tmp2
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- IF k[j]
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := src.dword[j] + tmp1 + tmp2
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply groups of 2 adjacent pairs of signed 16-bit integers in "a" with corresponding 16-bit integers in "b", producing 2 intermediate signed 32-bit results. Sum these 2 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 3
- tmp1.dword := SignExtend32(a.word[2*j]) * SignExtend32(b.word[2*j])
- tmp2.dword := SignExtend32(a.word[2*j+1]) * SignExtend32(b.word[2*j+1])
- dst.dword[j] := src.dword[j] + tmp1 + tmp2
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 15
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 7
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src" using signed saturation, and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 3
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := Saturate32(src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- Arithmetic
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 15
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 7
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
- ELSE
- dst.dword[j] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 3
- IF k[j]
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
- ELSE
- dst.dword[j] := src.dword[j]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VNNI
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply groups of 4 adjacent pairs of unsigned 8-bit integers in "a" with corresponding signed 8-bit integers in "b", producing 4 intermediate signed 16-bit results. Sum these 4 results with the corresponding 32-bit integer in "src", and store the packed 32-bit results in "dst".
-
-FOR j := 0 to 3
- tmp1.word := Signed(ZeroExtend16(a.byte[4*j]) * SignExtend16(b.byte[4*j]))
- tmp2.word := Signed(ZeroExtend16(a.byte[4*j+1]) * SignExtend16(b.byte[4*j+1]))
- tmp3.word := Signed(ZeroExtend16(a.byte[4*j+2]) * SignExtend16(b.byte[4*j+2]))
- tmp4.word := Signed(ZeroExtend16(a.byte[4*j+3]) * SignExtend16(b.byte[4*j+3]))
- dst.dword[j] := src.dword[j] + tmp1 + tmp2 + tmp3 + tmp4
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- AVX512_VP2INTERSECT
- AVX512VL
- Mask
-
-
-
-
-
- Compute intersection of packed 32-bit integer vectors "a" and "b", and store indication of match in the corresponding bit of two mask registers specified by "k1" and "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the corresponding bit of the mask registers.
-
-MEM[k1+7:k1] := 0
-MEM[k2+7:k2] := 0
-FOR i := 0 TO 3
- FOR j := 0 TO 3
- match := (a.dword[i] == b.dword[j] ? 1 : 0)
- MEM[k1+7:k1].bit[i] |= match
- MEM[k2+7:k2].bit[j] |= match
- ENDFOR
-ENDFOR
-
-
-
-
-
- Integer
- AVX512_VP2INTERSECT
- AVX512VL
- Mask
-
-
-
-
-
- Compute intersection of packed 32-bit integer vectors "a" and "b", and store indication of match in the corresponding bit of two mask registers specified by "k1" and "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the corresponding bit of the mask registers.
-
-MEM[k1+7:k1] := 0
-MEM[k2+7:k2] := 0
-FOR i := 0 TO 7
- FOR j := 0 TO 7
- match := (a.dword[i] == b.dword[j] ? 1 : 0)
- MEM[k1+7:k1].bit[i] |= match
- MEM[k2+7:k2].bit[j] |= match
- ENDFOR
-ENDFOR
-
-
-
-
-
- Integer
- AVX512_VP2INTERSECT
- AVX512F
- Mask
-
-
-
-
-
- Compute intersection of packed 32-bit integer vectors "a" and "b", and store indication of match in the corresponding bit of two mask registers specified by "k1" and "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the corresponding bit of the mask registers.
-
-MEM[k1+15:k1] := 0
-MEM[k2+15:k2] := 0
-FOR i := 0 TO 15
- FOR j := 0 TO 15
- match := (a.dword[i] == b.dword[j] ? 1 : 0)
- MEM[k1+15:k1].bit[i] |= match
- MEM[k2+15:k2].bit[j] |= match
- ENDFOR
-ENDFOR
-
-
-
-
-
- Integer
- AVX512_VP2INTERSECT
- AVX512VL
- Mask
-
-
-
-
-
- Compute intersection of packed 64-bit integer vectors "a" and "b", and store indication of match in the corresponding bit of two mask registers specified by "k1" and "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the corresponding bit of the mask registers.
-
-MEM[k1+7:k1] := 0
-MEM[k2+7:k2] := 0
-FOR i := 0 TO 1
- FOR j := 0 TO 1
- match := (a.qword[i] == b.qword[j] ? 1 : 0)
- MEM[k1+7:k1].bit[i] |= match
- MEM[k2+7:k2].bit[j] |= match
- ENDFOR
-ENDFOR
-
-
-
-
-
- Integer
- AVX512_VP2INTERSECT
- AVX512VL
- Mask
-
-
-
-
-
- Compute intersection of packed 64-bit integer vectors "a" and "b", and store indication of match in the corresponding bit of two mask registers specified by "k1" and "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the corresponding bit of the mask registers.
-
-MEM[k1+7:k1] := 0
-MEM[k2+7:k2] := 0
-FOR i := 0 TO 3
- FOR j := 0 TO 3
- match := (a.qword[i] == b.qword[j] ? 1 : 0)
- MEM[k1+7:k1].bit[i] |= match
- MEM[k2+7:k2].bit[j] |= match
- ENDFOR
-ENDFOR
-
-
-
-
-
- Integer
- AVX512_VP2INTERSECT
- AVX512F
- Mask
-
-
-
-
-
- Compute intersection of packed 64-bit integer vectors "a" and "b", and store indication of match in the corresponding bit of two mask registers specified by "k1" and "k2". A match in corresponding elements of "a" and "b" is indicated by a set bit in the corresponding bit of the mask registers.
-
-MEM[k1+7:k1] := 0
-MEM[k2+7:k2] := 0
-FOR i := 0 TO 7
- FOR j := 0 TO 7
- match := (a.qword[i] == b.qword[j] ? 1 : 0)
- MEM[k1+7:k1].bit[i] |= match
- MEM[k2+7:k2].bit[j] |= match
- ENDFOR
-ENDFOR
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
-
-
- Extract contiguous bits from unsigned 32-bit integer "a", and store the result in "dst". Extract the number of bits specified by "len", starting at the bit specified by "start".
-
-tmp[511:0] := a
-dst[31:0] := ZeroExtend32(tmp[(start[7:0] + len[7:0] - 1):start[7:0]])
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
-
- Extract contiguous bits from unsigned 32-bit integer "a", and store the result in "dst". Extract the number of bits specified by bits 15:8 of "control", starting at the bit specified by bits 0:7 of "control".
-
-start := control[7:0]
-len := control[15:8]
-tmp[511:0] := a
-dst[31:0] := ZeroExtend32(tmp[(start[7:0] + len[7:0] - 1):start[7:0]])
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
-
-
- Extract contiguous bits from unsigned 64-bit integer "a", and store the result in "dst". Extract the number of bits specified by "len", starting at the bit specified by "start".
-
-tmp[511:0] := a
-dst[63:0] := ZeroExtend64(tmp[(start[7:0] + len[7:0] - 1):start[7:0]])
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
-
- Extract contiguous bits from unsigned 64-bit integer "a", and store the result in "dst". Extract the number of bits specified by bits 15:8 of "control", starting at the bit specified by bits 0:7 of "control"..
-
-start := control[7:0]
-len := control[15:8]
-tmp[511:0] := a
-dst[63:0] := ZeroExtend64(tmp[(start[7:0] + len[7:0] - 1):start[7:0]])
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
- Extract the lowest set bit from unsigned 32-bit integer "a" and set the corresponding bit in "dst". All other bits in "dst" are zeroed, and all bits are zeroed if no bits are set in "a".
-
-dst := (-a) AND a
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
- Extract the lowest set bit from unsigned 64-bit integer "a" and set the corresponding bit in "dst". All other bits in "dst" are zeroed, and all bits are zeroed if no bits are set in "a".
-
-dst := (-a) AND a
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
- Set all the lower bits of "dst" up to and including the lowest set bit in unsigned 32-bit integer "a".
-
-dst := (a - 1) XOR a
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
- Set all the lower bits of "dst" up to and including the lowest set bit in unsigned 64-bit integer "a".
-
-dst := (a - 1) XOR a
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
- Copy all bits from unsigned 32-bit integer "a" to "dst", and reset (set to 0) the bit in "dst" that corresponds to the lowest set bit in "a".
-
-dst := (a - 1) AND a
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
- Copy all bits from unsigned 64-bit integer "a" to "dst", and reset (set to 0) the bit in "dst" that corresponds to the lowest set bit in "a".
-
-dst := (a - 1) AND a
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
-
- Compute the bitwise NOT of 32-bit integer "a" and then AND with b, and store the results in dst.
-
-dst[31:0] := ((NOT a[31:0]) AND b[31:0])
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
-
- Compute the bitwise NOT of 64-bit integer "a" and then AND with b, and store the results in dst.
-
-dst[63:0] := ((NOT a[63:0]) AND b[63:0])
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
- Count the number of trailing zero bits in unsigned 32-bit integer "a", and return that count in "dst".
-
-tmp := 0
-dst := 0
-DO WHILE ((tmp < 32) AND a[tmp] == 0)
- tmp := tmp + 1
- dst := dst + 1
-OD
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
- Count the number of trailing zero bits in unsigned 64-bit integer "a", and return that count in "dst".
-
-tmp := 0
-dst := 0
-DO WHILE ((tmp < 64) AND a[tmp] == 0)
- tmp := tmp + 1
- dst := dst + 1
-OD
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
- Count the number of trailing zero bits in unsigned 32-bit integer "a", and return that count in "dst".
-
-tmp := 0
-dst := 0
-DO WHILE ((tmp < 32) AND a[tmp] == 0)
- tmp := tmp + 1
- dst := dst + 1
-OD
-
-
-
-
-
- Integer
- BMI1
- Bit Manipulation
-
-
- Count the number of trailing zero bits in unsigned 64-bit integer "a", and return that count in "dst".
-
-tmp := 0
-dst := 0
-DO WHILE ((tmp < 64) AND a[tmp] == 0)
- tmp := tmp + 1
- dst := dst + 1
-OD
-
-
-
-
-
- Integer
- BMI2
- Bit Manipulation
-
-
-
- Copy all bits from unsigned 32-bit integer "a" to "dst", and reset (set to 0) the high bits in "dst" starting at "index".
-
-n := index[7:0]
-dst := a
-IF (n < 32)
- dst[31:n] := 0
-FI
-
-
-
-
-
- Integer
- BMI2
- Bit Manipulation
-
-
-
- Copy all bits from unsigned 64-bit integer "a" to "dst", and reset (set to 0) the high bits in "dst" starting at "index".
-
-n := index[7:0]
-dst := a
-IF (n < 64)
- dst[63:n] := 0
-FI
-
-
-
-
-
- Integer
- BMI2
- Bit Manipulation
-
-
-
- Deposit contiguous low bits from unsigned 32-bit integer "a" to "dst" at the corresponding bit locations specified by "mask"; all other bits in "dst" are set to zero.
-
-tmp := a
-dst := 0
-m := 0
-k := 0
-DO WHILE m < 32
- IF mask[m] == 1
- dst[m] := tmp[k]
- k := k + 1
- FI
- m := m + 1
-OD
-
-
-
-
-
- Integer
- BMI2
- Bit Manipulation
-
-
-
- Deposit contiguous low bits from unsigned 64-bit integer "a" to "dst" at the corresponding bit locations specified by "mask"; all other bits in "dst" are set to zero.
-
-tmp := a
-dst := 0
-m := 0
-k := 0
-DO WHILE m < 64
- IF mask[m] == 1
- dst[m] := tmp[k]
- k := k + 1
- FI
- m := m + 1
-OD
-
-
-
-
-
- Integer
- BMI2
- Bit Manipulation
-
-
-
- Extract bits from unsigned 32-bit integer "a" at the corresponding bit locations specified by "mask" to contiguous low bits in "dst"; the remaining upper bits in "dst" are set to zero.
-
-tmp := a
-dst := 0
-m := 0
-k := 0
-DO WHILE m < 32
- IF mask[m] == 1
- dst[k] := tmp[m]
- k := k + 1
- FI
- m := m + 1
-OD
-
-
-
-
-
- Integer
- BMI2
- Bit Manipulation
-
-
-
- Extract bits from unsigned 64-bit integer "a" at the corresponding bit locations specified by "mask" to contiguous low bits in "dst"; the remaining upper bits in "dst" are set to zero.
-
-tmp := a
-dst := 0
-m := 0
-k := 0
-DO WHILE m < 64
- IF mask[m] == 1
- dst[k] := tmp[m]
- k := k + 1
- FI
- m := m + 1
-OD
-
-
-
-
-
- Integer
- BMI2
- Arithmetic
-
-
-
-
- Multiply unsigned 32-bit integers "a" and "b", store the low 32-bits of the result in "dst", and store the high 32-bits in "hi". This does not read or write arithmetic flags.
-
-dst[31:0] := (a * b)[31:0]
-MEM[hi+31:hi] := (a * b)[63:32]
-
-
-
-
-
- Integer
- BMI2
- Arithmetic
-
-
-
-
- Multiply unsigned 64-bit integers "a" and "b", store the low 64-bits of the result in "dst", and store the high 64-bits in "hi". This does not read or write arithmetic flags.
-
-dst[63:0] := (a * b)[63:0]
-MEM[hi+63:hi] := (a * b)[127:64]
-
-
-
-
-
- CET_SS
- Miscellaneous
-
-
- Increment the shadow stack pointer by 4 times the value specified in bits [7:0] of "a".
-
-SSP := SSP + a[7:0] * 4
-
-
-
-
-
- CET_SS
- Miscellaneous
-
-
- Increment the shadow stack pointer by 8 times the value specified in bits [7:0] of "a".
-
-SSP := SSP + a[7:0] * 8
-
-
-
-
-
- CET_SS
- Miscellaneous
-
-
- Read the low 32-bits of the current shadow stack pointer, and store the result in "dst".
- dst := SSP[31:0]
-
-
-
-
-
- CET_SS
- Miscellaneous
-
-
- Read the current shadow stack pointer, and store the result in "dst".
- dst := SSP[63:0]
-
-
-
-
-
- CET_SS
- Miscellaneous
-
-
- Save the previous shadow stack pointer context.
-
-
-
-
- CET_SS
- Miscellaneous
-
-
- Restore the saved shadow stack pointer from the shadow stack restore token previously created on shadow stack by saveprevssp.
-
-
-
-
- CET_SS
- Miscellaneous
-
-
-
- Write 32-bit value in "val" to a shadow stack page in memory specified by "p".
-
-
-
-
- CET_SS
- Miscellaneous
-
-
-
- Write 64-bit value in "val" to a shadow stack page in memory specified by "p".
-
-
-
-
- CET_SS
- Miscellaneous
-
-
-
- Write 32-bit value in "val" to a user shadow stack page in memory specified by "p".
-
-
-
-
- CET_SS
- Miscellaneous
-
-
-
- Write 64-bit value in "val" to a user shadow stack page in memory specified by "p".
-
-
-
-
- CET_SS
- Miscellaneous
-
-
- Mark shadow stack pointed to by IA32_PL0_SSP as busy.
-
-
-
-
- CET_SS
- Miscellaneous
-
-
- Mark shadow stack pointed to by "p" as not busy.
-
-
-
-
- CET_SS
- Miscellaneous
-
-
- If CET is enabled, read the low 32-bits of the current shadow stack pointer, and store the result in "dst". Otherwise return 0.
- dst := SSP[31:0]
-
-
-
-
-
- CET_SS
- Miscellaneous
-
-
- If CET is enabled, read the current shadow stack pointer, and store the result in "dst". Otherwise return 0.
- dst := SSP[63:0]
-
-
-
-
-
- CET_SS
- Miscellaneous
-
-
- Increment the shadow stack pointer by 4 times the value specified in bits [7:0] of "a".
-
-SSP := SSP + a[7:0] * 4
-
-
-
-
-
- CLDEMOTE
- Miscellaneous
-
-
- Hint to hardware that the cache line that contains "p" should be demoted from the cache closest to the processor core to a level more distant from the processor core.
-
-
-
-
- CLFLUSHOPT
- General Support
-
-
- Invalidate and flush the cache line that contains "p" from all levels of the cache hierarchy.
-
-
-
-
- CLWB
- General Support
-
-
- Write back to memory the cache line that contains "p" from any level of the cache hierarchy in the cache coherence domain.
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (a[63:0] * b[63:0]) + c[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the intermediate result to the lower element in "c". Store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := (a[31:0] * b[31:0]) + c[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively add and subtract packed elements in "c" to/from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (a[63:0] * b[63:0]) - c[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the intermediate result. Store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := (a[31:0] * b[31:0]) - c[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- IF ((j & 1) == 0)
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) + c[i+63:i]
- ELSE
- dst[i+63:i] := (a[i+63:i] * b[i+63:i]) - c[i+63:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", alternatively subtract and add packed elements in "c" from/to the intermediate result, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- IF ((j & 1) == 0)
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) - c[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) + c[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", add the negated intermediate result to packed elements in "c", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) + c[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := -(a[63:0] * b[63:0]) + c[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and add the negated intermediate result to the lower element in "c". Store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := -(a[31:0] * b[31:0]) + c[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := -(a[i+63:i] * b[i+63:i]) - c[i+63:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", subtract packed elements in "c" from the negated intermediate result, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- dst[i+31:i] := -(a[i+31:i] * b[i+31:i]) - c[i+31:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply the lower double-precision (64-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := -(a[63:0] * b[63:0]) - c[63:0]
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FMA
- Arithmetic
-
-
-
-
- Multiply the lower single-precision (32-bit) floating-point elements in "a" and "b", and subtract the lower element in "c" from the negated intermediate result. Store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := -(a[31:0] * b[31:0]) - c[31:0]
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
-
-
- Floating Point
- FP16C
- Convert
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*32
- m := j*16
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Floating Point
- FP16C
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst".
- [sae_note]
-
-FOR j := 0 to 7
- i := 16*j
- l := 32*j
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- FP16C
- Convert
-
-
- Convert packed half-precision (16-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- m := j*16
- dst[i+31:i] := Convert_FP16_To_FP32(a[m+15:m])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- FP16C
- Convert
-
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed half-precision (16-bit) floating-point elements, and store the results in "dst".
- [sae_note]
-
-FOR j := 0 to 3
- i := 16*j
- l := 32*j
- dst[i+15:i] := Convert_FP32_To_FP16(a[l+31:l])
-ENDFOR
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- FSGSBASE
- General Support
-
- Read the FS segment base register and store the 32-bit result in "dst".
- dst[31:0] := FS_Segment_Base_Register
-dst[63:32] := 0
-
-
-
-
-
- Integer
- FSGSBASE
- General Support
-
- Read the FS segment base register and store the 64-bit result in "dst".
- dst[63:0] := FS_Segment_Base_Register
-
-
-
-
-
- Integer
- FSGSBASE
- General Support
-
- Read the GS segment base register and store the 32-bit result in "dst".
- dst[31:0] := GS_Segment_Base_Register
-dst[63:32] := 0
-
-
-
-
-
- Integer
- FSGSBASE
- General Support
-
- Read the GS segment base register and store the 64-bit result in "dst".
- dst[63:0] := GS_Segment_Base_Register
-
-
-
-
-
- Integer
- FSGSBASE
- General Support
-
-
- Write the unsigned 32-bit integer "a" to the FS segment base register.
-
-FS_Segment_Base_Register[31:0] := a[31:0]
-FS_Segment_Base_Register[63:32] := 0
-
-
-
-
-
- Integer
- FSGSBASE
- General Support
-
-
- Write the unsigned 64-bit integer "a" to the FS segment base register.
-
-FS_Segment_Base_Register[63:0] := a[63:0]
-
-
-
-
-
- Integer
- FSGSBASE
- General Support
-
-
- Write the unsigned 32-bit integer "a" to the GS segment base register.
-
-GS_Segment_Base_Register[31:0] := a[31:0]
-GS_Segment_Base_Register[63:32] := 0
-
-
-
-
-
- Integer
- FSGSBASE
- General Support
-
-
- Write the unsigned 64-bit integer "a" to the GS segment base register.
-
-GS_Segment_Base_Register[63:0] := a[63:0]
-
-
-
-
-
- FXSR
- OS-Targeted
-
-
- Reload the x87 FPU, MMX technology, XMM, and MXCSR registers from the 512-byte memory image at "mem_addr". This data should have been written to memory previously using the FXSAVE instruction, and in the same format as required by the operating mode. "mem_addr" must be aligned on a 16-byte boundary.
- state_x87_fpu_mmx_sse := fxrstor(MEM[mem_addr+512*8:mem_addr])
-
-
-
-
-
- FXSR
- OS-Targeted
-
-
- Reload the x87 FPU, MMX technology, XMM, and MXCSR registers from the 512-byte memory image at "mem_addr". This data should have been written to memory previously using the FXSAVE64 instruction, and in the same format as required by the operating mode. "mem_addr" must be aligned on a 16-byte boundary.
- state_x87_fpu_mmx_sse := fxrstor64(MEM[mem_addr+512*8:mem_addr])
-
-
-
-
-
- FXSR
- OS-Targeted
-
-
- Save the current state of the x87 FPU, MMX technology, XMM, and MXCSR registers to a 512-byte memory location at "mem_addr". The layout of the 512-byte region depends on the operating mode. Bytes [511:464] are available for software use and will not be overwritten by the processor.
- MEM[mem_addr+512*8:mem_addr] := fxsave(state_x87_fpu_mmx_sse)
-
-
-
-
-
- FXSR
- OS-Targeted
-
-
- Save the current state of the x87 FPU, MMX technology, XMM, and MXCSR registers to a 512-byte memory location at "mem_addr". The layout of the 512-byte region depends on the operating mode. Bytes [511:464] are available for software use and will not be overwritten by the processor.
- MEM[mem_addr+512*8:mem_addr] := fxsave64(state_x87_fpu_mmx_sse)
-
-
-
-
-
- Integer
- GFNI
- AVX512F
- Arithmetic
-
-
-
-
- Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The field GF(2^8) is represented in polynomial representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
-
-DEFINE gf2p8mul_byte(src1byte, src2byte) {
- tword := 0
- FOR i := 0 to 7
- IF src2byte.bit[i]
- tword := tword XOR (src1byte << i)
- FI
- ENDFOR
- FOR i := 14 downto 8
- p := 0x11B << (i-8)
- IF tword.bit[i]
- tword := tword XOR p
- FI
- ENDFOR
- RETURN tword.byte[0]
-}
-FOR j := 0 TO 63
- IF k[j]
- dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
- ELSE
- dst.byte[j] := 0
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512F
- Arithmetic
-
-
-
-
-
- Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8), and store the results in "dst" using writemask "k" (elements are copied from "src"" when the corresponding mask bit is not set). The field GF(2^8) is represented in polynomial representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
-
-DEFINE gf2p8mul_byte(src1byte, src2byte) {
- tword := 0
- FOR i := 0 to 7
- IF src2byte.bit[i]
- tword := tword XOR (src1byte << i)
- FI
- ENDFOR
- FOR i := 14 downto 8
- p := 0x11B << (i-8)
- IF tword.bit[i]
- tword := tword XOR p
- FI
- ENDFOR
- RETURN tword.byte[0]
-}
-FOR j := 0 TO 63
- IF k[j]
- dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
- ELSE
- dst.byte[j] := src.byte[j]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512F
- Arithmetic
-
-
-
- Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8), and store the results in "dst". The field GF(2^8) is represented in polynomial representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
-
-DEFINE gf2p8mul_byte(src1byte, src2byte) {
- tword := 0
- FOR i := 0 to 7
- IF src2byte.bit[i]
- tword := tword XOR (src1byte << i)
- FI
- ENDFOR
- FOR i := 14 downto 8
- p := 0x11B << (i-8)
- IF tword.bit[i]
- tword := tword XOR p
- FI
- ENDFOR
- RETURN tword.byte[0]
-}
-FOR j := 0 TO 63
- dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The field GF(2^8) is represented in polynomial representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
-
-DEFINE gf2p8mul_byte(src1byte, src2byte) {
- tword := 0
- FOR i := 0 to 7
- IF src2byte.bit[i]
- tword := tword XOR (src1byte << i)
- FI
- ENDFOR
- FOR i := 14 downto 8
- p := 0x11B << (i-8)
- IF tword.bit[i]
- tword := tword XOR p
- FI
- ENDFOR
- RETURN tword.byte[0]
-}
-FOR j := 0 TO 31
- IF k[j]
- dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
- ELSE
- dst.byte[j] := 0
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8), and store the results in "dst" using writemask "k" (elements are copied from "src"" when the corresponding mask bit is not set). The field GF(2^8) is represented in polynomial representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
-
-DEFINE gf2p8mul_byte(src1byte, src2byte) {
- tword := 0
- FOR i := 0 to 7
- IF src2byte.bit[i]
- tword := tword XOR (src1byte << i)
- FI
- ENDFOR
- FOR i := 14 downto 8
- p := 0x11B << (i-8)
- IF tword.bit[i]
- tword := tword XOR p
- FI
- ENDFOR
- RETURN tword.byte[0]
-}
-FOR j := 0 TO 31
- IF k[j]
- dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
- ELSE
- dst.byte[j] := src.byte[j]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
- Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8), and store the results in "dst". The field GF(2^8) is represented in polynomial representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
-
-DEFINE gf2p8mul_byte(src1byte, src2byte) {
- tword := 0
- FOR i := 0 to 7
- IF src2byte.bit[i]
- tword := tword XOR (src1byte << i)
- FI
- ENDFOR
- FOR i := 14 downto 8
- p := 0x11B << (i-8)
- IF tword.bit[i]
- tword := tword XOR p
- FI
- ENDFOR
- RETURN tword.byte[0]
-}
-FOR j := 0 TO 31
- dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
- Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8), and store the results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set). The field GF(2^8) is represented in polynomial representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
-
-DEFINE gf2p8mul_byte(src1byte, src2byte) {
- tword := 0
- FOR i := 0 to 7
- IF src2byte.bit[i]
- tword := tword XOR (src1byte << i)
- FI
- ENDFOR
- FOR i := 14 downto 8
- p := 0x11B << (i-8)
- IF tword.bit[i]
- tword := tword XOR p
- FI
- ENDFOR
- RETURN tword.byte[0]
-}
-FOR j := 0 TO 15
- IF k[j]
- dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
- ELSE
- dst.byte[j] := 0
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8), and store the results in "dst" using writemask "k" (elements are copied from "src"" when the corresponding mask bit is not set). The field GF(2^8) is represented in polynomial representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
-
-DEFINE gf2p8mul_byte(src1byte, src2byte) {
- tword := 0
- FOR i := 0 to 7
- IF src2byte.bit[i]
- tword := tword XOR (src1byte << i)
- FI
- ENDFOR
- FOR i := 14 downto 8
- p := 0x11B << (i-8)
- IF tword.bit[i]
- tword := tword XOR p
- FI
- ENDFOR
- RETURN tword.byte[0]
-}
-FOR j := 0 TO 15
- IF k[j]
- dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
- ELSE
- dst.byte[j] := src.byte[j]
- FI
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
- Multiply the packed 8-bit integers in "a" and "b" in the finite field GF(2^8), and store the results in "dst". The field GF(2^8) is represented in polynomial representation with the reduction polynomial x^8 + x^4 + x^3 + x + 1.
-
-DEFINE gf2p8mul_byte(src1byte, src2byte) {
- tword := 0
- FOR i := 0 to 7
- IF src2byte.bit[i]
- tword := tword XOR (src1byte << i)
- FI
- ENDFOR
- FOR i := 14 downto 8
- p := 0x11B << (i-8)
- IF tword.bit[i]
- tword := tword XOR p
- FI
- ENDFOR
- RETURN tword.byte[0]
-}
-FOR j := 0 TO 15
- dst.byte[j] := gf2p8mul_byte(a.byte[j], b.byte[j])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512F
- Arithmetic
-
-
-
-
-
- Compute an affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed 8-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 7
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Compute an affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed 8-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 7
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := src.qword[j].byte[i]
- FI
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512F
- Arithmetic
-
-
-
-
- Compute an affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed 8-bit results in "dst".
-
-DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 7
- FOR i := 0 to 7
- dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Compute an affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed 8-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 3
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
-
-
- Compute an affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed 8-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 3
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := src.qword[j].byte[i]
- FI
- ENDFOR
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
- Compute an affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed 8-bit results in "dst".
-
-DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 3
- FOR i := 0 to 7
- dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
- ENDFOR
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Compute an affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed 8-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
-
-DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 1
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
-
-
- Compute an affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed 8-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 1
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := src.qword[j].byte[i]
- FI
- ENDFOR
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
- Compute an affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. Store the packed 8-bit results in "dst".
-
-DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND src1byte) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 1
- FOR i := 0 to 7
- dst.qword[j].byte[i] := affine_byte(A.qword[j], x.qword[j].byte[i], b)
- ENDFOR
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512F
- Arithmetic
-
-
-
-
-
- Compute an inverse affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3 + x + 1. Store the packed 8-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 7
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512F
- Arithmetic
-
-
-
-
-
-
- Compute an inverse affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3 + x + 1. Store the packed 8-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 7
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := src.qword[j].byte[b]
- FI
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512F
- Arithmetic
-
-
-
-
- Compute an inverse affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3 + x + 1. Store the packed 8-bit results in "dst".
- DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 7
- FOR i := 0 to 7
- dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
- ENDFOR
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Compute an inverse affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3 + x + 1. Store the packed 8-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 3
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
-
-
- Compute an inverse affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3 + x + 1. Store the packed 8-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 3
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := src.qword[j].byte[i]
- FI
- ENDFOR
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
- Compute an inverse affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3 + x + 1. Store the packed 8-bit results in "dst".
- DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 3
- FOR i := 0 to 7
- dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
- ENDFOR
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
-
- Compute an inverse affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3 + x + 1. Store the packed 8-bit results in "dst" using zeromask "k" (elements are zeroed out when the corresponding mask bit is not set).
- DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 1
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := 0
- FI
- ENDFOR
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
-
-
- Compute an inverse affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3 + x + 1. Store the packed 8-bit results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 1
- FOR i := 0 to 7
- IF k[j*8+i]
- dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
- ELSE
- dst.qword[j].byte[i] := src.qword[j].byte[i]
- FI
- ENDFOR
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- Integer
- GFNI
- AVX512VL
- Arithmetic
-
-
-
-
- Compute an inverse affine transformation in the Galois Field 2^8. An affine transformation is defined by "A" * "x" + "b", where "A" represents an 8 by 8 bit matrix, "x" represents an 8-bit vector, and "b" is a constant immediate byte. The inverse of the 8-bit values in "x" is defined with respect to the reduction polynomial x^8 + x^4 + x^3 + x + 1. Store the packed 8-bit results in "dst".
- DEFINE parity(x) {
- t := 0
- FOR i := 0 to 7
- t := t XOR x.bit[i]
- ENDFOR
- RETURN t
-}
-DEFINE affine_inverse_byte(tsrc2qw, src1byte, imm8) {
- FOR i := 0 to 7
- retbyte.bit[i] := parity(tsrc2qw.byte[7-i] AND inverse(src1byte)) XOR imm8.bit[i]
- ENDFOR
- RETURN retbyte
-}
-FOR j := 0 TO 1
- FOR i := 0 to 7
- dst.qword[j].byte[i] := affine_inverse_byte(A.qword[j], x.qword[j].byte[i], b)
- ENDFOR
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
-
- INVPCID
- OS-Targeted
-
-
-
- Invalidate mappings in the Translation Lookaside Buffers (TLBs) and paging-structure caches for the processor context identifier (PCID) specified by "descriptor" based on the invalidation type specified in "type".
- The PCID "descriptor" is specified as a 16-byte memory operand (with no alignment restrictions) where bits [11:0] specify the PCID, and bits [127:64] specify the linear address; bits [63:12] are reserved.
- The types supported are:
- 0) Individual-address invalidation: If "type" is 0, the logical processor invalidates mappings for a single linear address and tagged with the PCID specified in "descriptor", except global translations. The instruction may also invalidate global translations, mappings for other linear addresses, or mappings tagged with other PCIDs.
- 1) Single-context invalidation: If "type" is 1, the logical processor invalidates all mappings tagged with the PCID specified in "descriptor" except global translations. In some cases, it may invalidate mappings for other PCIDs as well.
- 2) All-context invalidation: If "type" is 2, the logical processor invalidates all mappings tagged with any PCID.
- 3) All-context invalidation, retaining global translations: If "type" is 3, the logical processor invalidates all mappings tagged with any PCID except global translations, ignoring "descriptor". The instruction may also invalidate global translations as well.
-
-CASE type[1:0] OF
-0: // individual-address invalidation retaining global translations
- OP_PCID := MEM[descriptor+11:descriptor]
- ADDR := MEM[descriptor+127:descriptor+64]
- BREAK
-1: // single PCID invalidation retaining globals
- OP_PCID := MEM[descriptor+11:descriptor]
- // invalidate all mappings tagged with OP_PCID except global translations
- BREAK
-2: // all PCID invalidation
- // invalidate all mappings tagged with any PCID
- BREAK
-3: // all PCID invalidation retaining global translations
- // invalidate all mappings tagged with any PCID except global translations
- BREAK
-ESAC
-
-
-
-
-
- KNCNI
- General Support
-
-
-
- Fetch the line of data from memory that contains address "p" to a location in the cache hierarchy specified by the locality hint "i".
-
-
-
-
-
-
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Compute the bitwise NOT of 16-bit masks "a" and then AND with "b", and store the result in "k".
-
-k[15:0] := (NOT a[15:0]) AND b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Compute the bitwise AND of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := a[15:0] AND b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
- Copy 16-bit mask "a" to "k".
-
-k[15:0] := a[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
- Compute the bitwise NOT of 16-bit mask "a", and store the result in "k".
-
-k[15:0] := NOT a[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Compute the bitwise OR of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := a[15:0] OR b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Compute the bitwise XNOR of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := NOT (a[15:0] XOR b[15:0])
-k[MAX:16] := 0
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Compute the bitwise XOR of 16-bit masks "a" and "b", and store the result in "k".
-
-k[15:0] := a[15:0] XOR b[15:0]
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- KNCNI
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than, and store the results in mask vector "k".
-
-FOR j := 0 to 15
- i := j*32
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Integer
- Mask
- KNCNI
- Compare
-
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than-or-equal, and store the results in mask vector "k" using zeromask "k1" (elements are zeroed out when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k[j] := ( a[i+31:i] < b[i+31:i] ) ? 1 : 0
- ELSE
- k[j] := 0
- FI
-ENDFOR
-k[MAX:16] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
- Depending on "bc", loads 1, 4, or 16 elements of type and size determined by "conv" from memory address "mt" and converts all elements to single-precision (32-bit) floating-point elements, storing the results in "dst". "hint" indicates to the processor whether the data is non-temporal.
- addr := MEM[mt]
-FOR j := 0 to 15
- i := j*32
- CASE bc OF
- _MM_BROADCAST32_NONE:
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- n := j*32
- dst[i+31:i] := addr[n+31:n]
- _MM_UPCONV_PS_FLOAT16:
- n := j*16
- dst[i+31:i] := Convert_FP16_To_FP32(addr[n+15:n])
- _MM_UPCONV_PS_UINT8:
- n := j*8
- dst[i+31:i] := Convert_UInt8_To_FP32(addr[n+7:n])
- _MM_UPCONV_PS_SINT8:
- n := j*8
- dst[i+31:i] := Convert_Int8_To_FP32(addr[n+7:n])
- _MM_UPCONV_PS_UINT16:
- n := j*16
- dst[i+31:i] := Convert_UInt16_To_FP32(addr[n+15:n])
- _MM_UPCONV_PS_SINT16:
- n := j*16
- dst[i+31:i] := Convert_Int16_To_FP32(addr[n+15:n])
- ESAC
- _MM_BROADCAST_1X16:
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- n := j*32
- dst[i+31:i] := addr[31:0]
- _MM_UPCONV_PS_FLOAT16:
- n := j*16
- dst[i+31:i] := Convert_FP16_To_FP32(addr[15:0])
- _MM_UPCONV_PS_UINT8:
- n := j*8
- dst[i+31:i] := Convert_UInt8_To_FP32(addr[7:0])
- _MM_UPCONV_PS_SINT8:
- n := j*8
- dst[i+31:i] := Convert_Int8_To_FP32(addr[7:0])
- _MM_UPCONV_PS_UINT16:
- n := j*16
- dst[i+31:i] := Convert_UInt16_To_FP32(addr[15:0])
- _MM_UPCONV_PS_SINT16:
- n := j*16
- dst[i+31:i] := Convert_Int16_To_FP32(addr[15:0])
- ESAC
- _MM_BROADCAST_4X16:
- mod := j%4
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- n := mod*32
- dst[i+31:i] := addr[n+31:n]
- _MM_UPCONV_PS_FLOAT16:
- n := mod*16
- dst[i+31:i] := Convert_FP16_To_FP32(addr[n+15:n])
- _MM_UPCONV_PS_UINT8:
- n := mod*8
- dst[i+31:i] := Convert_UInt8_To_FP32(addr[n+7:n])
- _MM_UPCONV_PS_SINT8:
- n := mod*8
- dst[i+31:i] := Convert_Int8_To_FP32(addr[n+7:n])
- _MM_UPCONV_PS_UINT16:
- n := mod*16
- dst[i+31:i] := Convert_UInt16_To_FP32(addr[n+15:n])
- _MM_UPCONV_PS_SINT16:
- n := mod*16
- dst[i+31:i] := Convert_Int16_To_FP32(addr[n+15:n])
- ESAC
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
-
-
- Depending on "bc", loads 1, 4, or 16 elements of type and size determined by "conv" from memory address "mt" and converts all elements to single-precision (32-bit) floating-point elements, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "hint" indicates to the processor whether the data is non-temporal.
- addr := MEM[mt]
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- CASE bc OF
- _MM_BROADCAST32_NONE:
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- n := j*32
- dst[i+31:i] := addr[n+31:n]
- _MM_UPCONV_PS_FLOAT16:
- n := j*16
- dst[i+31:i] := Convert_FP16_To_FP32(addr[n+15:n])
- _MM_UPCONV_PS_UINT8:
- n := j*8
- dst[i+31:i] := Convert_UInt8_To_FP32(addr[n+7:n])
- _MM_UPCONV_PS_SINT8:
- n := j*8
- dst[i+31:i] := Convert_Int8_To_FP32(addr[n+7:n])
- _MM_UPCONV_PS_UINT16:
- n := j*16
- dst[i+31:i] := Convert_UInt16_To_FP32(addr[n+15:n])
- _MM_UPCONV_PS_SINT16:
- n := j*16
- dst[i+31:i] := Convert_Int16_To_FP32(addr[n+15:n])
- ESAC
- _MM_BROADCAST_1X16:
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- n := j*32
- dst[i+31:i] := addr[31:0]
- _MM_UPCONV_PS_FLOAT16:
- n := j*16
- dst[i+31:i] := Convert_FP16_To_FP32(addr[15:0])
- _MM_UPCONV_PS_UINT8:
- n := j*8
- dst[i+31:i] := Convert_UInt8_To_FP32(addr[7:0])
- _MM_UPCONV_PS_SINT8:
- n := j*8
- dst[i+31:i] := Convert_Int8_To_FP32(addr[7:0])
- _MM_UPCONV_PS_UINT16:
- n := j*16
- dst[i+31:i] := Convert_UInt16_To_FP32(addr[15:0])
- _MM_UPCONV_PS_SINT16:
- n := j*16
- dst[i+31:i] := Convert_Int16_To_FP32(addr[15:0])
- ESAC
- _MM_BROADCAST_4X16:
- mod := j%4
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- n := mod*32
- dst[i+31:i] := addr[n+31:n]
- _MM_UPCONV_PS_FLOAT16:
- n := mod*16
- dst[i+31:i] := Convert_FP16_To_FP32(addr[n+15:n])
- _MM_UPCONV_PS_UINT8:
- n := mod*8
- dst[i+31:i] := Convert_UInt8_To_FP32(addr[n+7:n])
- _MM_UPCONV_PS_SINT8:
- n := mod*8
- dst[i+31:i] := Convert_Int8_To_FP32(addr[n+7:n])
- _MM_UPCONV_PS_UINT16:
- n := mod*16
- dst[i+31:i] := Convert_UInt16_To_FP32(addr[n+15:n])
- _MM_UPCONV_PS_SINT16:
- n := mod*16
- dst[i+31:i] := Convert_Int16_To_FP32(addr[n+15:n])
- ESAC
- ESAC
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
- Depending on "bc", loads 1, 4, or 16 elements of type and size determined by "conv" from memory address "mt" and converts all elements to 32-bit integer elements, storing the results in "dst". "hint" indicates to the processor whether the data is non-temporal.
- addr := MEM[mt]
-FOR j := 0 to 15
- i := j*32
- CASE bc OF
- _MM_BROADCAST32_NONE:
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- n := j*32
- dst[i+31:i] := addr[n+31:n]
- _MM_UPCONV_EPI32_UINT8:
- n := j*8
- dst[i+31:i] := ZeroExtend32(addr[n+7:n])
- _MM_UPCONV_EPI32_SINT8:
- n := j*8
- dst[i+31:i] := SignExtend32(addr[n+7:n])
- _MM_UPCONV_EPI32_UINT16:
- n := j*16
- dst[i+31:i] := ZeroExtend32(addr[n+15:n])
- _MM_UPCONV_EPI32_SINT16:
- n := j*16
- dst[i+31:i] := SignExtend32(addr[n+15:n])
- ESAC
- _MM_BROADCAST_1X16:
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- n := j*32
- dst[i+31:i] := addr[31:0]
- _MM_UPCONV_EPI32_UINT8:
- n := j*8
- dst[i+31:i] := ZeroExtend32(addr[7:0])
- _MM_UPCONV_EPI32_SINT8:
- n := j*8
- dst[i+31:i] := SignExtend32(addr[7:0])
- _MM_UPCONV_EPI32_UINT16:
- n := j*16
- dst[i+31:i] := ZeroExtend32(addr[15:0])
- _MM_UPCONV_EPI32_SINT16:
- n := j*16
- dst[i+31:i] := SignExtend32(addr[15:0])
- ESAC
- _MM_BROADCAST_4X16:
- mod := j%4
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- n := mod*32
- dst[i+31:i] := addr[n+31:n]
- _MM_UPCONV_EPI32_UINT8:
- n := mod*8
- dst[i+31:i] := ZeroExtend32(addr[n+7:n])
- _MM_UPCONV_EPI32_SINT8:
- n := mod*8
- dst[i+31:i] := SignExtend32(addr[n+7:n])
- _MM_UPCONV_EPI32_UINT16:
- n := mod*16
- dst[i+31:i] := ZeroExtend32(addr[n+15:n])
- _MM_UPCONV_EPI32_SINT16:
- n := mod*16
- dst[i+31:i] := SignExtend32(addr[n+15:n])
- ESAC
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
-
-
- Depending on "bc", loads 1, 4, or 16 elements of type and size determined by "conv" from memory address "mt" and converts all elements to 32-bit integer elements, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "hint" indicates to the processor whether the data is non-temporal.
- addr := MEM[mt]
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- CASE bc OF
- _MM_BROADCAST32_NONE:
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- n := j*32
- dst[i+31:i] := addr[n+31:n]
- _MM_UPCONV_EPI32_UINT8:
- n := j*8
- dst[i+31:i] := ZeroExtend32(addr[n+7:n])
- _MM_UPCONV_EPI32_SINT8:
- n := j*8
- dst[i+31:i] := SignExtend32(addr[n+7:n])
- _MM_UPCONV_EPI32_UINT16:
- n := j*16
- dst[i+31:i] := ZeroExtend32(addr[n+15:n])
- _MM_UPCONV_EPI32_SINT16:
- n := j*16
- dst[i+31:i] := SignExtend32(addr[n+15:n])
- ESAC
- _MM_BROADCAST_1X16:
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- n := j*32
- dst[i+31:i] := addr[31:0]
- _MM_UPCONV_EPI32_UINT8:
- n := j*8
- dst[i+31:i] := ZeroExtend32(addr[7:0])
- _MM_UPCONV_EPI32_SINT8:
- n := j*8
- dst[i+31:i] := SignExtend32(addr[7:0])
- _MM_UPCONV_EPI32_UINT16:
- n := j*16
- dst[i+31:i] := ZeroExtend32(addr[15:0])
- _MM_UPCONV_EPI32_SINT16:
- n := j*16
- dst[i+31:i] := SignExtend32(addr[15:0])
- ESAC
- _MM_BROADCAST_4X16:
- mod := j%4
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- n := mod*32
- dst[i+31:i] := addr[n+31:n]
- _MM_UPCONV_EPI32_UINT8:
- n := mod*8
- dst[i+31:i] := ZeroExtend32(addr[n+7:n])
- _MM_UPCONV_EPI32_SINT8:
- n := mod*8
- dst[i+31:i] := SignExtend32(addr[n+7:n])
- _MM_UPCONV_EPI32_UINT16:
- n := mod*16
- dst[i+31:i] := ZeroExtend32(addr[n+15:n])
- _MM_UPCONV_EPI32_SINT16:
- n := mod*16
- dst[i+31:i] := SignExtend32(addr[n+15:n])
- ESAC
- ESAC
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
- Depending on "bc", loads 1, 4, or 8 elements of type and size determined by "conv" from memory address "mt" and converts all elements to double-precision (64-bit) floating-point elements, storing the results in "dst". "hint" indicates to the processor whether the data is non-temporal.
- addr := MEM[mt]
-FOR j := 0 to 7
- i := j*64
- CASE bc OF
- _MM_BROADCAST64_NONE:
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- n := j*64
- dst[i+63:i] := addr[n+63:n]
- ESAC
- _MM_BROADCAST_1X8:
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- n := j*64
- dst[i+63:i] := addr[63:0]
- ESAC
- _MM_BROADCAST_4X8:
- mod := j%4
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- n := mod*64
- dst[i+63:i] := addr[n+63:n]
- ESAC
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
-
-
- Depending on "bc", loads 1, 4, or 8 elements of type and size determined by "conv" from memory address "mt" and converts all elements to double-precision (64-bit) floating-point elements, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "hint" indicates to the processor whether the data is non-temporal.
- addr := MEM[mt]
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- CASE bc OF
- _MM_BROADCAST64_NONE:
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- n := j*64
- dst[i+63:i] := addr[n+63:n]
- ESAC
- _MM_BROADCAST_1X8:
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- n := j*64
- dst[i+63:i] := addr[63:0]
- ESAC
- _MM_BROADCAST_4X8:
- mod := j%4
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- n := mod*64
- dst[i+63:i] := addr[n+63:n]
- ESAC
- ESAC
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
- Depending on "bc", loads 1, 4, or 8 elements of type and size determined by "conv" from memory address "mt" and converts all elements to 64-bit integer elements, storing the results in "dst". "hint" indicates to the processor whether the data is non-temporal.
- addr := MEM[mt]
-FOR j := 0 to 7
- i := j*64
- CASE bc OF
- _MM_BROADCAST64_NONE:
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- n := j*64
- dst[i+63:i] := addr[n+63:n]
- ESAC
- _MM_BROADCAST_1X8:
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- n := j*64
- dst[i+63:i] := addr[63:0]
- ESAC
- _MM_BROADCAST_4X8:
- mod := j%4
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- n := mod*64
- dst[i+63:i] := addr[n+63:n]
- ESAC
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
-
-
- Depending on "bc", loads 1, 4, or 8 elements of type and size determined by "conv" from memory address "mt" and converts all elements to 64-bit integer elements, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "hint" indicates to the processor whether the data is non-temporal.
- addr := MEM[mt]
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- CASE bc OF
- _MM_BROADCAST64_NONE:
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- n := j*64
- dst[i+63:i] := addr[n+63:n]
- ESAC
- _MM_BROADCAST_1X8:
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- n := j*64
- dst[i+63:i] := addr[63:0]
- ESAC
- _MM_BROADCAST_4X8:
- mod := j%4
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- n := mod*64
- dst[i+63:i] := addr[n+63:n]
- ESAC
- ESAC
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
-
-
- Floating Point
- KNCNI
- Swizzle
-
-
-
- Performs a swizzle transformation of each of the four groups of packed 4xsingle-precision (32-bit) floating-point elements in "v" using swizzle parameter "s", storing the results in "dst".
- CASE s OF
-_MM_SWIZ_REG_NONE:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_DCBA:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_CDAB:
- FOR j := 0 to 7
- i := j*64
- dst[i+31:i] := v[i+63:i+32]
- dst[i+63:i+32] := v[i+31:i]
- ENDFOR
-_MM_SWIZ_REG_BADC:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+95:i+64]
- dst[i+63:i+32] := v[i+127:i+96]
- dst[i+95:i+64] := v[i+31:i]
- dst[i+127:i+96] := v[i+63:i+32]
- ENDFOR
-_MM_SWIZ_REG_AAAA:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+31:i]
- dst[i+63:i+32] := v[i+31:i]
- dst[i+95:i+64] := v[i+31:i]
- dst[i+127:i+96] := v[i+31:i]
- ENDFOR
-_MM_SWIZ_REG_BBBB:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+63:i+32]
- dst[i+63:i+32] := v[i+63:i+32]
- dst[i+95:i+64] := v[i+63:i+32]
- dst[i+127:i+96] := v[i+63:i+32]
- ENDFOR
-_MM_SWIZ_REG_CCCC:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+95:i+64]
- dst[i+63:i+32] := v[i+95:i+64]
- dst[i+95:i+64] := v[i+95:i+64]
- dst[i+127:i+96] := v[i+95:i+64]
- ENDFOR
-_MM_SWIZ_REG_DDDD:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+127:i+96]
- dst[i+63:i+32] := v[i+127:i+96]
- dst[i+95:i+64] := v[i+127:i+96]
- dst[i+127:i+96] := v[i+127:i+96]
- ENDFOR
-_MM_SWIZ_REG_DACB:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+63:i+32]
- dst[i+63:i+32] := v[i+95:i+64]
- dst[i+95:i+64] := v[i+31:i]
- dst[i+127:i+96] := v[i+127:i+96]
- ENDFOR
-ESAC
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- KNCNI
- Swizzle
-
-
-
- Performs a swizzle transformation of each of the two groups of packed 4x double-precision (64-bit) floating-point elements in "v" using swizzle parameter "s", storing the results in "dst".
- CASE s OF
-_MM_SWIZ_REG_NONE:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_DCBA:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_CDAB:
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := v[i+127:i+64]
- dst[i+127:i+64] := v[i+63:i]
- ENDFOR
-_MM_SWIZ_REG_BADC:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+191:i+128]
- dst[i+127:i+64] := v[i+255:i+192]
- dst[i+191:i+128] := v[i+63:i]
- dst[i+255:i+192] := v[i+127:i+64]
- ENDFOR
-_MM_SWIZ_REG_AAAA:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+63:i]
- dst[i+127:i+64] := v[i+63:i]
- dst[i+191:i+128] := v[i+63:i]
- dst[i+255:i+192] := v[i+63:i]
- ENDFOR
-_MM_SWIZ_REG_BBBB:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+127:i+63]
- dst[i+127:i+64] := v[i+127:i+63]
- dst[i+191:i+128] := v[i+127:i+63]
- dst[i+255:i+192] := v[i+127:i+63]
- ENDFOR
-_MM_SWIZ_REG_CCCC:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+191:i+128]
- dst[i+127:i+64] := v[i+191:i+128]
- dst[i+191:i+128] := v[i+191:i+128]
- dst[i+255:i+192] := v[i+191:i+128]
- ENDFOR
-_MM_SWIZ_REG_DDDD:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+255:i+192]
- dst[i+127:i+64] := v[i+255:i+192]
- dst[i+191:i+128] := v[i+255:i+192]
- dst[i+255:i+192] := v[i+255:i+192]
- ENDFOR
-_MM_SWIZ_REG_DACB:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+127:i+64]
- dst[i+127:i+64] := v[i+191:i+128]
- dst[i+191:i+128] := v[i+63:i]
- dst[i+255:i+192] := v[i+255:i+192]
- ENDFOR
-ESAC
-dst[MAX:512] := 0
-
-
-
-
- Integer
- KNCNI
- Swizzle
-
-
-
- Performs a swizzle transformation of each of the four groups of packed 4x 32-bit integer elements in "v" using swizzle parameter "s", storing the results in "dst".
- CASE s OF
-_MM_SWIZ_REG_NONE:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_DCBA:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_CDAB:
- FOR j := 0 to 7
- i := j*64
- dst[i+31:i] := v[i+63:i+32]
- dst[i+63:i+32] := v[i+31:i]
- ENDFOR
-_MM_SWIZ_REG_BADC:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+95:i+64]
- dst[i+63:i+32] := v[i+127:i+96]
- dst[i+95:i+64] := v[i+31:i]
- dst[i+127:i+96] := v[i+63:i+32]
- ENDFOR
-_MM_SWIZ_REG_AAAA:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+31:i]
- dst[i+63:i+32] := v[i+31:i]
- dst[i+95:i+64] := v[i+31:i]
- dst[i+127:i+96] := v[i+31:i]
- ENDFOR
-_MM_SWIZ_REG_BBBB:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+63:i+32]
- dst[i+63:i+32] := v[i+63:i+32]
- dst[i+95:i+64] := v[i+63:i+32]
- dst[i+127:i+96] := v[i+63:i+32]
- ENDFOR
-_MM_SWIZ_REG_CCCC:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+95:i+64]
- dst[i+63:i+32] := v[i+95:i+64]
- dst[i+95:i+64] := v[i+95:i+64]
- dst[i+127:i+96] := v[i+95:i+64]
- ENDFOR
-_MM_SWIZ_REG_DDDD:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+127:i+96]
- dst[i+63:i+32] := v[i+127:i+96]
- dst[i+95:i+64] := v[i+127:i+96]
- dst[i+127:i+96] := v[i+127:i+96]
- ENDFOR
-_MM_SWIZ_REG_DACB:
- FOR j := 0 to 3
- i := j*128
- dst[i+31:i] := v[i+63:i+32]
- dst[i+63:i+32] := v[i+95:i+64]
- dst[i+95:i+64] := v[i+31:i]
- dst[i+127:i+96] := v[i+127:i+96]
- ENDFOR
-ESAC
-dst[MAX:512] := 0
-
-
-
-
- Integer
- KNCNI
- Swizzle
-
-
-
- Performs a swizzle transformation of each of the two groups of packed 4x64-bit integer elements in "v" using swizzle parameter "s", storing the results in "dst".
- CASE s OF
-_MM_SWIZ_REG_NONE:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_DCBA:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_CDAB:
- FOR j := 0 to 3
- i := j*64
- dst[i+63:i] := v[i+127:i+64]
- dst[i+127:i+64] := v[i+63:i]
- ENDFOR
-_MM_SWIZ_REG_BADC:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+191:i+128]
- dst[i+127:i+64] := v[i+255:i+192]
- dst[i+191:i+128] := v[i+63:i]
- dst[i+255:i+192] := v[i+127:i+64]
- ENDFOR
-_MM_SWIZ_REG_AAAA:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+63:i]
- dst[i+127:i+64] := v[i+63:i]
- dst[i+191:i+128] := v[i+63:i]
- dst[i+255:i+192] := v[i+63:i]
- ENDFOR
-_MM_SWIZ_REG_BBBB:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+127:i+63]
- dst[i+127:i+64] := v[i+127:i+63]
- dst[i+191:i+128] := v[i+127:i+63]
- dst[i+255:i+192] := v[i+127:i+63]
- ENDFOR
-_MM_SWIZ_REG_CCCC:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+191:i+128]
- dst[i+127:i+64] := v[i+191:i+128]
- dst[i+191:i+128] := v[i+191:i+128]
- dst[i+255:i+192] := v[i+191:i+128]
- ENDFOR
-_MM_SWIZ_REG_DDDD:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+255:i+192]
- dst[i+127:i+64] := v[i+255:i+192]
- dst[i+191:i+128] := v[i+255:i+192]
- dst[i+255:i+192] := v[i+255:i+192]
- ENDFOR
-_MM_SWIZ_REG_DACB:
- FOR j := 0 to 1
- i := j*256
- dst[i+63:i] := v[i+127:i+64]
- dst[i+127:i+64] := v[i+191:i+128]
- dst[i+191:i+128] := v[i+63:i]
- dst[i+255:i+192] := v[i+255:i+192]
- ENDFOR
-ESAC
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- KNCNI
- Swizzle
-
-
-
-
-
- Performs a swizzle transformation of each of the four groups of packed 4x single-precision (32-bit) floating-point elements in "v" using swizzle parameter "s", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- CASE s OF
-_MM_SWIZ_REG_NONE:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_DCBA:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_CDAB:
- FOR j := 0 to 7
- i := j*64
- IF k[j*2]
- dst[i+31:i] := v[i+63:i+32]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*2+1]
- dst[i+63:i+32] := v[i+31:i]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- ENDFOR
-_MM_SWIZ_REG_BADC:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+95:i+64]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+127:i+96]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+31:i]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+63:i+32]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-_MM_SWIZ_REG_AAAA:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+31:i]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+31:i]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+31:i]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-_MM_SWIZ_REG_BBBB:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+63:i+32]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+63:i+32]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+63:i+32]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+63:i+32]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-_MM_SWIZ_REG_CCCC:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+95:i+64]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+95:i+64]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+95:i+64]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+95:i+64]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-_MM_SWIZ_REG_DDDD:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+127:i+96]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+127:i+96]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+127:i+96]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+127:i+96]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-_MM_SWIZ_REG_DACB:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+63:i+32]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+95:i+64]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+31:i]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+127:i+96]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-ESAC
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- KNCNI
- Swizzle
-
-
-
-
-
- Performs a swizzle transformation of each of the two groups of packed 4x double-precision (64-bit) floating-point elements in "v" using swizzle parameter "s", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- CASE s OF
-_MM_SWIZ_REG_NONE:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_DCBA:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_CDAB:
- FOR j := 0 to 3
- i := j*64
- IF k[j*2]
- dst[i+63:i] := v[i+127:i+64]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*2+1]
- dst[i+127:i+64] := v[i+63:i]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- ENDFOR
-_MM_SWIZ_REG_BADC:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+191:i+128]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+255:i+192]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+63:i]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+127:i+64]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-_MM_SWIZ_REG_AAAA:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+63:i]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+63:i]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+63:i]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-_MM_SWIZ_REG_BBBB:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+127:i+63]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+127:i+63]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+127:i+63]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+127:i+63]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-_MM_SWIZ_REG_CCCC:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+191:i+128]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+191:i+128]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+191:i+128]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+191:i+128]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-_MM_SWIZ_REG_DDDD:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+255:i+192]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+255:i+192]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+255:i+192]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+255:i+192]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-_MM_SWIZ_REG_DACB:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+127:i+64]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+191:i+128]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+63:i]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+255:i+192]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-ESAC
-dst[MAX:512] := 0
-
-
-
-
- Integer
- KNCNI
- Swizzle
-
-
-
-
-
- Performs a swizzle transformation of each of the four groups of packed 4x32-bit integer elements in "v" using swizzle parameter "s", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- CASE s OF
-_MM_SWIZ_REG_NONE:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_DCBA:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_CDAB:
- FOR j := 0 to 7
- i := j*64
- IF k[j*2]
- dst[i+31:i] := v[i+63:i+32]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*2+1]
- dst[i+63:i+32] := v[i+31:i]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- ENDFOR
-_MM_SWIZ_REG_BADC:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+95:i+64]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+127:i+96]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+31:i]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+63:i+32]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-_MM_SWIZ_REG_AAAA:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+31:i]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+31:i]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+31:i]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-_MM_SWIZ_REG_BBBB:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+63:i+32]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+63:i+32]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+63:i+32]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+63:i+32]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-_MM_SWIZ_REG_CCCC:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+95:i+64]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+95:i+64]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+95:i+64]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+95:i+64]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-_MM_SWIZ_REG_DDDD:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+127:i+96]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+127:i+96]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+127:i+96]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+127:i+96]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-_MM_SWIZ_REG_DACB:
- FOR j := 0 to 3
- i := j*128
- IF k[j*4]
- dst[i+31:i] := v[i+63:i+32]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
- IF k[j*4+1]
- dst[i+63:i+32] := v[i+95:i+64]
- ELSE
- dst[i+63:i+32] := src[i+63:i+32]
- FI
- IF k[j*4+2]
- dst[i+95:i+64] := v[i+31:i]
- ELSE
- dst[i+95:i+64] := src[i+95:i+64]
- FI
- IF k[j*4+3]
- dst[i+127:i+96] := v[i+127:i+96]
- ELSE
- dst[i+127:i+96] := src[i+127:i+96]
- FI
- ENDFOR
-ESAC
-dst[MAX:512] := 0
-
-
-
-
- Integer
- KNCNI
- Swizzle
-
-
-
-
-
- Performs a swizzle transformation of each of the four groups of packed 4x64-bit integer elements in "v" using swizzle parameter "s", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- CASE s OF
-_MM_SWIZ_REG_NONE:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_DCBA:
- dst[511:0] := v[511:0]
-_MM_SWIZ_REG_CDAB:
- FOR j := 0 to 3
- i := j*64
- IF k[j*2]
- dst[i+63:i] := v[i+127:i+64]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*2+1]
- dst[i+127:i+64] := v[i+63:i]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- ENDFOR
-_MM_SWIZ_REG_BADC:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+191:i+128]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+255:i+192]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+63:i]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+127:i+64]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-_MM_SWIZ_REG_AAAA:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+63:i]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+63:i]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+63:i]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-_MM_SWIZ_REG_BBBB:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+127:i+63]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+127:i+63]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+127:i+63]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+127:i+63]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-_MM_SWIZ_REG_CCCC:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+191:i+128]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+191:i+128]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+191:i+128]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+191:i+128]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-_MM_SWIZ_REG_DDDD:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+255:i+192]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+255:i+192]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+255:i+192]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+255:i+192]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-_MM_SWIZ_REG_DACB:
- FOR j := 0 to 1
- i := j*256
- IF k[j*4]
- dst[i+63:i] := v[i+127:i+64]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
- IF k[j*4+1]
- dst[i+127:i+64] := v[i+191:i+128]
- ELSE
- dst[i+127:i+64] := src[i+127:i+64]
- FI
- IF k[j*4+2]
- dst[i+191:i+128] := v[i+63:i]
- ELSE
- dst[i+191:i+128] := src[i+191:i+128]
- FI
- IF k[j*4+3]
- dst[i+255:i+192] := v[i+255:i+192]
- ELSE
- dst[i+255:i+192] := src[i+255:i+192]
- FI
- ENDFOR
-ESAC
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
- Downconverts packed single-precision (32-bit) floating-point elements stored in "v" to a smaller type depending on "conv" and stores them in memory location "mt". "hint" indicates to the processor whether the data is non-temporal.
-
-addr := MEM[mt]
-FOR j := 0 to 15
- i := j*32
- CASE conv OF
- _MM_DOWNCONV_PS_NONE:
- addr[i+31:i] := v[i+31:i]
- _MM_DOWNCONV_PS_FLOAT16:
- n := j*16
- addr[n+15:n] := Convert_FP32_To_FP16(v[i+31:i])
- _MM_DOWNCONV_PS_UINT8:
- n := j*8
- addr[n+7:n] := Convert_FP32_To_UInt8(v[i+31:i])
- _MM_DOWNCONV_PS_SINT8:
- n := j*8
- addr[n+7:n] := Convert_FP32_To_Int8(v[i+31:i])
- _MM_DOWNCONV_PS_UINT16:
- n := j*16
- addr[n+15:n] := Convert_FP32_To_UInt16(v[i+31:i])
- _MM_DOWNCONV_PS_SINT16:
- n := j*16
- addr[n+15:n] := Convert_FP32_To_Int16(v[i+31:i])
- ESAC
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
- Downconverts packed 32-bit integer elements stored in "v" to a smaller type depending on "conv" and stores them in memory location "mt". "hint" indicates to the processor whether the data is non-temporal.
- addr := MEM[mt]
-FOR j := 0 to 15
- i := j*32
- CASE conv OF
- _MM_DOWNCONV_EPI32_NONE:
- addr[i+31:i] := v[i+31:i]
- _MM_DOWNCONV_EPI32_UINT8:
- n := j*8
- addr[n+7:n] := Int32ToUInt8(v[i+31:i])
- _MM_DOWNCONV_EPI32_SINT8:
- n := j*8
- addr[n+7:n] := Int32ToSInt8(v[i+31:i])
- _MM_DOWNCONV_EPI32_UINT16:
- n := j*16
- addr[n+15:n] := Int32ToUInt16(v[i+31:i])
- _MM_DOWNCONV_EPI32_SINT16:
- n := j*16
- addr[n+15:n] := Int32ToSInt16(v[i+31:i])
- ESAC
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
- Downconverts packed double-precision (64-bit) floating-point elements stored in "v" to a smaller type depending on "conv" and stores them in memory location "mt". "hint" indicates to the processor whether the data is non-temporal.
-
-addr := MEM[mt]
-FOR j := 0 to 7
- i := j*64
- CASE conv OF
- _MM_DOWNCONV_PS_NONE:
- addr[i+63:i] := v[i+63:i]
- ESAC
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
- Downconverts packed 64-bit integer elements stored in "v" to a smaller type depending on "conv" and stores them in memory location "mt". "hint" indicates to the processor whether the data is non-temporal.
-
-addr := MEM[mt]
-FOR j := 0 to 7
- i := j*64
- CASE conv OF
- _MM_DOWNCONV_EPI64_NONE: addr[i+63:i] := v[i+63:i]
- ESAC
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
-
- Downconverts packed single-precision (32-bit) floating-point elements stored in "v" to a smaller type depending on "conv" and stores them in memory location "mt" using writemask "k" (elements are not written to memory when the corresponding mask bit is not set). "hint" indicates to the processor whether the data is non-temporal.
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- CASE conv OF
- _MM_DOWNCONV_PS_NONE:
- mt[i+31:i] := v[i+31:i]
- _MM_DOWNCONV_PS_FLOAT16:
- n := j*16
- mt[n+15:n] := Convert_FP32_To_FP16(v[i+31:i])
- _MM_DOWNCONV_PS_UINT8:
- n := j*8
- mt[n+7:n] := Convert_FP32_To_UInt8(v[i+31:i])
- _MM_DOWNCONV_PS_SINT8:
- n := j*8
- mt[n+7:n] := Convert_FP32_To_Int8(v[i+31:i])
- _MM_DOWNCONV_PS_UINT16:
- n := j*16
- mt[n+15:n] := Convert_FP32_To_UInt16(v[i+31:i])
- _MM_DOWNCONV_PS_SINT16:
- n := j*16
- mt[n+15:n] := Convert_FP32_To_Int16(v[i+31:i])
- ESAC
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
-
- Downconverts packed double-precision (64-bit) floating-point elements stored in "v" to a smaller type depending on "conv" and stores them in memory location "mt" (elements in "mt" are unaltered when the corresponding mask bit is not set). "hint" indicates to the processor whether the data is non-temporal.
-
-addr := MEM[mt]
-FOR j := 0 to 7
- i := j*64
- CASE conv OF
- _MM_DOWNCONV_PD_NONE:
- IF k[j]
- mt[i+63:i] := v[i+63:i]
- FI
- ESAC
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
- Downconverts packed 32-bit integer elements stored in "v" to a smaller type depending on "conv" and stores them in memory location "mt" (elements in "mt" are unaltered when the corresponding mask bit is not set). "hint" indicates to the processor whether the data is non-temporal.
- addr := MEM[mt]
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- CASE conv OF
- _MM_DOWNCONV_EPI32_NONE:
- addr[i+31:i] := v[i+31:i]
- _MM_DOWNCONV_EPI32_UINT8:
- n := j*8
- addr[n+7:n] := Int32ToUInt8(v[i+31:i])
- _MM_DOWNCONV_EPI32_SINT8:
- n := j*8
- addr[n+7:n] := Int32ToSInt8(v[i+31:i])
- _MM_DOWNCONV_EPI32_UINT16:
- n := j*16
- addr[n+15:n] := Int32ToUInt16(v[i+31:i])
- _MM_DOWNCONV_EPI32_SINT16:
- n := j*16
- addr[n+15:n] := Int32ToSInt16(v[i+31:i])
- ESAC
- FI
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
- Downconverts packed 64-bit integer elements stored in "v" to a smaller type depending on "conv" and stores them in memory location "mt" (elements in "mt" are unaltered when the corresponding mask bit is not set). "hint" indicates to the processor whether the data is non-temporal.
-
-addr := MEM[mt]
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- CASE conv OF
- _MM_DOWNCONV_EPI64_NONE: addr[i+63:i] := v[i+63:i]
- ESAC
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
- Stores packed single-precision (32-bit) floating-point elements from "v" to memory address "mt" with a no-read hint to the processor.
-
-addr := MEM[mt]
-FOR j := 0 to 15
- i := j*32
- addr[i+31:i] := v[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
- Stores packed double-precision (64-bit) floating-point elements from "v" to memory address "mt" with a no-read hint to the processor.
-
-addr := MEM[mt]
-FOR j := 0 to 7
- i := j*64
- addr[i+63:i] := v[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
- Stores packed single-precision (32-bit) floating-point elements from "v" to memory address "mt" with a no-read hint and using a weakly-ordered memory consistency model (stores performed with this function are not globally ordered, and subsequent stores from the same thread can be observed before them).
-
-addr := MEM[mt]
-FOR j := 0 to 15
- i := j*32
- addr[i+31:i] := v[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
- Stores packed double-precision (64-bit) floating-point elements from "v" to memory address "mt" with a no-read hint and using a weakly-ordered memory consistency model (stores performed with this function are not globally ordered, and subsequent stores from the same thread can be observed before them).
-
-addr := MEM[mt]
-FOR j := 0 to 7
- i := j*64
- addr[i+63:i] := v[i+63:i]
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
- Performs element-by-element addition of packed 32-bit integers in "v2" and "v3" and the corresponding bit in "k2", storing the result of the addition in "dst" and the result of the carry in "k2_res".
- FOR j := 0 to 15
- i := j*32
- k2_res[j] := Carry(v2[i+31:i] + v3[i+31:i] + k2[j])
- dst[i+31:i] := v2[i+31:i] + v3[i+31:i] + k2[j]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs element-by-element addition of packed 32-bit integers in "v2" and "v3" and the corresponding bit in "k2", storing the result of the addition in "dst" and the result of the carry in "k2_res" using writemask "k1" (elements are copied from "v2" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k1[j]
- k2_res[j] := Carry(v2[i+31:i] + v3[i+31:i] + k2[j])
- dst[i+31:i] := v2[i+31:i] + v3[i+31:i] + k2[j]
- ELSE
- dst[i+31:i] := v2[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
- Performs element-by-element addition between packed double-precision (64-bit) floating-point elements in "v2" and "v3" and negates their sum, storing the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := -(v2[i+63:i] + v3[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
- Performs element-by-element addition between packed double-precision (64-bit) floating-point elements in "v2" and "v3" and negates their sum, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(v2[i+63:i] + v3[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
- Performs element-by-element addition between packed single-precision (32-bit) floating-point elements in "v2" and "v3" and negates their sum, storing the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := -(v2[i+31:i] + v3[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
- Performs element-by-element addition between packed single-precision (32-bit) floating-point elements in "v2" and "v3" and negates their sum, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(v2[i+31:i] + v3[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
- Performs element by element addition between packed double-precision (64-bit) floating-point elements in "v2" and "v3" and negates the sum, storing the result in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := -(v2[i+63:i] + v3[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs element by element addition between packed double-precision (64-bit) floating-point elements in "v2" and "v3" and negates the sum, storing the result in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := -(v2[i+63:i] + v3[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
- Performs element by element addition between packed single-precision (32-bit) floating-point elements in "v2" and "v3" and negates the sum, storing the result in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := -(v2[i+31:i] + v3[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs element by element addition between packed single-precision (32-bit) floating-point elements in "v2" and "v3" and negates the sum, storing the result in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := -(v2[i+31:i] + v3[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
- Performs element-by-element subtraction of packed double-precision (64-bit) floating-point elements in "v2" from "v3" storing the results in "dst".
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := v3[i+63:i] - v2[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
- Performs element-by-element subtraction of packed double-precision (64-bit) floating-point elements in "v2" from "v3" storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := v3[i+63:i] - v2[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
- Performs element-by-element subtraction of packed single-precision (32-bit) floating-point elements in "v2" from "v3" storing the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v3[i+31:i] - v2[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
- Performs element-by-element subtraction of packed single-precision (32-bit) floating-point elements in "v2" from "v3" storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := v3[i+31:i] - v2[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
- Performs element-by-element subtraction of packed double-precision (64-bit) floating-point elements in "v2" from "v3" storing the results in "dst".
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := v3[i+63:i] - v2[i+63:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs element-by-element subtraction of packed double-precision (64-bit) floating-point elements in "v2" from "v3" storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := v3[i+63:i] - v2[i+63:i]
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
- Performs element-by-element subtraction of packed single-precision (32-bit) floating-point elements in "v2" from "v3" storing the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v3[i+31:i] - v2[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs element-by-element subtraction of packed single-precision (32-bit) floating-point elements in "v2" from "v3" storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := v3[i+31:i] - v2[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
- Performs element-by-element subtraction of packed 32-bit integer elements in "v2" from "v3" storing the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v3[i+31:i] - v2[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
- Performs element-by-element subtraction of packed 32-bit integer elements in "v2" from "v3" storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set)
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := v3[i+31:i] - v2[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
- Performs element-by-element addition of packed 32-bit integer elements in "v2" and "v3", storing the resultant carry in "k2_res" (carry flag) and the addition results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v2[i+31:i] + v3[i+31:i]
- k2_res[j] := Carry(v2[i+31:i] + v3[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs element-by-element addition of packed 32-bit integer elements in "v2" and "v3", storing the resultant carry in "k2_res" (carry flag) and the addition results in "dst" using writemask "k" (elements are copied from "v2" and "k_old" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := v2[i+31:i] + v3[i+31:i]
- ELSE
- dst[i+31:i] := v2[i+31:i]
- k2_res[j] := k_old[j]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
- Performs an element-by-element addition of packed 32-bit integer elements in "v2" and "v3", storing the results in "dst" and the sign of the sum in "sign" (sign flag).
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v2[i+31:i] + v3[i+31:i]
- sign[j] := v2[i+31:i] & v3[i+31:i] & 0x80000000
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs an element-by-element addition of packed 32-bit integer elements in "v2" and "v3", storing the results in "dst" and the sign of the sum in "sign" (sign flag). Results are stored using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := v2[i+31:i] + v3[i+31:i]
- sign[j] := v2[i+31:i] & v3[i+31:i] & 0x80000000
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
- Performs an element-by-element addition of packed single-precision (32-bit) floating-point elements in "v2" and "v3", storing the results in "dst" and the sign of the sum in "sign" (sign flag).
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v2[i+31:i] + v3[i+31:i]
- sign[j] := v2[i+31:i] & v3[i+31:i] & 0x80000000
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs an element-by-element addition of packed single-precision (32-bit) floating-point elements in "v2" and "v3", storing the results in "dst" and the sign of the sum in "sign" (sign flag). Results are stored using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := v2[i+31:i] + v3[i+31:i]
- sign[j] := v2[i+31:i] & v3[i+31:i] & 0x80000000
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
- Performs an element-by-element addition of packed single-precision (32-bit) floating-point elements in "v2" and "v3", storing the results in "dst" and the sign of the sum in "sign" (sign flag).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v2[i+31:i] + v3[i+31:i]
- sign[j] := v2[i+31:i] & v3[i+31:i] & 0x80000000
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
-
-
- Performs an element-by-element addition of packed single-precision (32-bit) floating-point elements in "v2" and "v3", storing the results in "dst" and the sign of the sum in "sign" (sign flag). Results are stored using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := v2[i+31:i] + v3[i+31:i]
- sign[j] := v2[i+31:i] & v3[i+31:i] & 0x80000000
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
- Performs element-by-element subtraction of packed 32-bit integer elements in "v3" from "v2", storing the results in "dst" and the nth borrow bit in the nth position of "borrow" (borrow flag).
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v2[i+31:i] - v3[i+31:i]
- borrow[j] := Borrow(v2[i+31:i] - v3[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs element-by-element subtraction of packed 32-bit integer elements in "v3" from "v2", storing the results in "dst" and the nth borrow bit in the nth position of "borrow" (borrow flag). Results are stored using writemask "k" (elements are copied from "v2" and "k_old" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := v2[i+31:i] - v3[i+31:i]
- borrow[j] := Borrow(v2[i+31:i] - v3[i+31:i])
- ELSE
- dst[i+31:i] := v3[i+31:i]
- borrow[j] := k_old[j]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
- Performs element-by-element subtraction of packed 32-bit integer elements in "v2" from "v3", storing the results in "dst" and "v2". The borrowed value from the subtraction difference for the nth element is written to the nth bit of "borrow" (borrow flag).
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v3[i+31:i] - v2[i+31:i]
- borrow[j] := Borrow(v3[i+31:i] - v2[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs element-by-element subtraction of packed 32-bit integer elements in "v2" from "v3", storing the results in "dst" and "v2". The borrowed value from the subtraction difference for the nth element is written to the nth bit of "borrow" (borrow flag). Results are written using writemask "k" (elements are copied from "k" to "k_old" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- diff := v3[i+31:i] - v2[i+31:i]
- borrow[j] := Borrow(v3[i+31:i] - v2[i+31:i])
- dst[i+31:i] := diff
- v2[i+31:i] := diff
- ELSE
- borrow[j] := k_old[j]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
- Performs element-by-element three-input subtraction of packed 32-bit integer elements of "v3" as well as the corresponding bit from "k" from "v2". The borrowed value from the subtraction difference for the nth element is written to the nth bit of "borrow" (borrow flag). Results are stored in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v2[i+31:i] - v3[i+31:i] - k[j]
- borrow[j] := Borrow(v2[i+31:i] - v3[i+31:i] - k[j])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs element-by-element three-input subtraction of packed 32-bit integer elements of "v3" as well as the corresponding bit from "k2" from "v2". The borrowed value from the subtraction difference for the nth element is written to the nth bit of "borrow" (borrow flag). Results are stored in "dst" using writemask "k1" (elements are copied from "v2" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k1[j]
- dst[i+31:i] := v2[i+31:i] - v3[i+31:i] - k2[j]
- borrow[j] := Borrow(v2[i+31:i] - v3[i+31:i] - k2[j])
- ELSE
- dst[i+31:i] := v2[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
- Performs element-by-element three-input subtraction of packed 32-bit integer elements of "v2" as well as the corresponding bit from "k" from "v3". The borrowed value from the subtraction difference for the nth element is written to the nth bit of "borrow" (borrow flag). Results are stored in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v3[i+31:i] - v2[i+31:i] - k[j]
- borrow[j] := Borrow(v2[i+31:i] - v3[i+31:i] - k[j])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Performs element-by-element three-input subtraction of packed 32-bit integer elements of "v2" as well as the corresponding bit from "k2" from "v3". The borrowed value from the subtraction difference for the nth element is written to the nth bit of "borrow" (borrow flag). Results are stored in "dst" using writemask "k1" (elements are copied from "v2" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k1[j]
- dst[i+31:i] := v3[i+31:i] - v2[i+31:i] - k2[j]
- borrow[j] := Borrow(v2[i+31:i] - v3[i+31:i] - k2[j])
- ELSE
- dst[i+31:i] := v2[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Convert
-
-
-
- Performs element-by-element conversion of packed double-precision (64-bit) floating-point elements in "v2" to packed single-precision (32-bit) floating-point elements, storing the results in "dst". Results are written to the lower half of "dst", and the upper half locations are set to '0'.
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- k := j*32
- dst[k+31:k] := Convert_FP64_To_FP32(v2[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Convert
-
-
-
-
-
- Performs element-by-element conversion of packed double-precision (64-bit) floating-point elements in "v2" to packed single-precision (32-bit) floating-point elements, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). Results are written to the lower half of "dst", and the upper half locations are set to '0'.
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_FP64_To_FP32(v2[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- KNCNI
- Convert
-
-
-
- Performs element-by-element conversion of packed double-precision (64-bit) floating-point elements in "v2" to packed 32-bit unsigned integer elements, storing the results in "dst". Results are written to the lower half of "dst", and the upper half locations are set to '0'.
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- k := j*32
- dst[k+31:k] := Convert_FP64_To_Int32(v2[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- KNCNI
- Convert
-
-
-
-
-
- Performs element-by-element conversion of packed double-precision (64-bit) floating-point elements in "v2" to packed 32-bit unsigned integer elements, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). Results are written to the lower half of "dst", and the upper half locations are set to '0'.
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_FP64_To_Int32(v2[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- KNCNI
- Convert
-
-
-
-
- Performs element-by-element conversion of packed single-precision (32-bit) floating-point elements in "v2" to packed 32-bit integer elements and performs an optional exponent adjust using "expadj", storing the results in "dst".
- [round_note]
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v2[i+31:i]
- CASE expadj OF
- _MM_EXPADJ_NONE: dst[i+31:i] := dst[i+31:i] * (2 << 0)
- _MM_EXPADJ_4: dst[i+31:i] := dst[i+31:i] * (2 << 4)
- _MM_EXPADJ_5: dst[i+31:i] := dst[i+31:i] * (2 << 5)
- _MM_EXPADJ_8: dst[i+31:i] := dst[i+31:i] * (2 << 8)
- _MM_EXPADJ_16: dst[i+31:i] := dst[i+31:i] * (2 << 16)
- _MM_EXPADJ_24: dst[i+31:i] := dst[i+31:i] * (2 << 24)
- _MM_EXPADJ_31: dst[i+31:i] := dst[i+31:i] * (2 << 31)
- _MM_EXPADJ_32: dst[i+31:i] := dst[i+31:i] * (2 << 32)
- ESAC
- dst[i+31:i] := Float32ToInt32(dst[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- KNCNI
- Convert
-
-
-
-
- Performs element-by-element conversion of packed single-precision (32-bit) floating-point elements in "v2" to packed 32-bit unsigned integer elements and performing an optional exponent adjust using "expadj", storing the results in "dst".
- [round_note]
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := v2[i+31:i]
- CASE expadj OF
- _MM_EXPADJ_NONE: dst[i+31:i] := dst[i+31:i] * (2 << 0)
- _MM_EXPADJ_4: dst[i+31:i] := dst[i+31:i] * (2 << 4)
- _MM_EXPADJ_5: dst[i+31:i] := dst[i+31:i] * (2 << 5)
- _MM_EXPADJ_8: dst[i+31:i] := dst[i+31:i] * (2 << 8)
- _MM_EXPADJ_16: dst[i+31:i] := dst[i+31:i] * (2 << 16)
- _MM_EXPADJ_24: dst[i+31:i] := dst[i+31:i] * (2 << 24)
- _MM_EXPADJ_31: dst[i+31:i] := dst[i+31:i] * (2 << 31)
- _MM_EXPADJ_32: dst[i+31:i] := dst[i+31:i] * (2 << 32)
- ESAC
- dst[i+31:i] := Float32ToUInt32(dst[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- KNCNI
- Convert
-
-
-
-
- Performs element-by-element conversion of packed 32-bit unsigned integer elements in "v2" to packed single-precision (32-bit) floating-point elements and performing an optional exponent adjust using "expadj", storing the results in "dst".
- [round_note]
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := UInt32ToFloat32(v2[i+31:i])
- CASE expadj OF
- _MM_EXPADJ_NONE: dst[i+31:i] := dst[i+31:i] * (2 << 0)
- _MM_EXPADJ_4: dst[i+31:i] := dst[i+31:i] * (2 << 4)
- _MM_EXPADJ_5: dst[i+31:i] := dst[i+31:i] * (2 << 5)
- _MM_EXPADJ_8: dst[i+31:i] := dst[i+31:i] * (2 << 8)
- _MM_EXPADJ_16: dst[i+31:i] := dst[i+31:i] * (2 << 16)
- _MM_EXPADJ_24: dst[i+31:i] := dst[i+31:i] * (2 << 24)
- _MM_EXPADJ_31: dst[i+31:i] := dst[i+31:i] * (2 << 31)
- _MM_EXPADJ_32: dst[i+31:i] := dst[i+31:i] * (2 << 32)
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- KNCNI
- Convert
-
-
-
-
-
-
- Performs element-by-element conversion of packed 32-bit unsigned integer elements in "v2" to packed single-precision (32-bit) floating-point elements and performing an optional exponent adjust using "expadj", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := Int32ToFloat32(v2[i+31:i])
- CASE expadj OF
- _MM_EXPADJ_NONE: dst[i+31:i] := dst[i+31:i] * (2 << 0)
- _MM_EXPADJ_4: dst[i+31:i] := dst[i+31:i] * (2 << 4)
- _MM_EXPADJ_5: dst[i+31:i] := dst[i+31:i] * (2 << 5)
- _MM_EXPADJ_8: dst[i+31:i] := dst[i+31:i] * (2 << 8)
- _MM_EXPADJ_16: dst[i+31:i] := dst[i+31:i] * (2 << 16)
- _MM_EXPADJ_24: dst[i+31:i] := dst[i+31:i] * (2 << 24)
- _MM_EXPADJ_31: dst[i+31:i] := dst[i+31:i] * (2 << 31)
- _MM_EXPADJ_32: dst[i+31:i] := dst[i+31:i] * (2 << 32)
- ESAC
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Elementary Math Functions
-
-
- Approximates the base-2 exponent of the packed single-precision (32-bit) floating-point elements in "v2" with eight bits for sign and magnitude and 24 bits for the fractional part. Results are stored in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := exp223(v2[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Elementary Math Functions
-
-
-
-
- Approximates the base-2 exponent of the packed single-precision (32-bit) floating-point elements in "v2" with eight bits for sign and magnitude and 24 bits for the fractional part. Results are stored in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := exp223(v2[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Miscellaneous
-
-
-
-
- Fixes up NaN's from packed double-precision (64-bit) floating-point elements in "v1" and "v2", storing the results in "dst" and storing the quietized NaN's from "v1" in "v3".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := FixupNaNs(v1[i+63:i], v2[i+63:i])
- v3[i+63:i] := QuietizeNaNs(v1[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Miscellaneous
-
-
-
-
-
- Fixes up NaN's from packed double-precision (64-bit) floating-point elements in "v1" and "v2", storing the results in "dst" using writemask "k" (only elements whose corresponding mask bit is set are used in the computation). Quietized NaN's from "v1" are stored in "v3".
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := FixupNaNs(v1[i+63:i], v2[i+63:i])
- v3[i+63:i] := QuietizeNaNs(v1[i+63:i])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Miscellaneous
-
-
-
-
- Fixes up NaN's from packed single-precision (32-bit) floating-point elements in "v1" and "v2", storing the results in "dst" and storing the quietized NaN's from "v1" in "v3".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := FixupNaNs(v1[i+31:i], v2[i+31:i])
- v3[i+31:i] := QuietizeNaNs(v1[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Miscellaneous
-
-
-
-
-
- Fixes up NaN's from packed single-precision (32-bit) floating-point elements in "v1" and "v2", storing the results in "dst" using writemask "k" (only elements whose corresponding mask bit is set are used in the computation). Quietized NaN's from "v1" are stored in "v3".
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := FixupNaNs(v1[i+31:i], v2[i+31:i])
- v3[i+31:i] := QuietizeNaNs(v1[i+31:i])
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
- Loads the high-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt-64, up-converted depending on the value of "conv", and expanded into packed 32-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal.
- DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- RETURN MEM[addr + 4*offset]
- _MM_UPCONV_EPI32_UINT8:
- RETURN ZeroExtend32(MEM[addr + offset])
- _MM_UPCONV_EPI32_SINT8:
- RETURN SignExtend32(MEM[addr + offset])
- _MM_UPCONV_EPI32_UINT16:
- RETURN ZeroExtend32(MEM[addr + 2*offset])
- _MM_UPCONV_EPI32_SINT16:
- RETURN SignExtend32(MEM[addr + 2*offset])
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- RETURN 4
- _MM_UPCONV_EPI32_UINT8:
- RETURN 1
- _MM_UPCONV_EPI32_SINT8:
- RETURN 1
- _MM_UPCONV_EPI32_UINT16:
- RETURN 2
- _MM_UPCONV_EPI32_SINT16:
- RETURN 2
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-upSize := UPCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 15
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*upSize % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- dst[i+31:i] := UPCONVERT(addr, loadOffset, conv)
- FI
- loadOffset := loadOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
-
- Loads the high-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt-64, up-converted depending on the value of "conv", and expanded into packed 32-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal. Elements are copied to "dst" according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- RETURN MEM[addr + 4*offset]
- _MM_UPCONV_EPI32_UINT8:
- RETURN ZeroExtend32(MEM[addr + offset])
- _MM_UPCONV_EPI32_SINT8:
- RETURN SignExtend32(MEM[addr + offset])
- _MM_UPCONV_EPI32_UINT16:
- RETURN ZeroExtend32(MEM[addr + 2*offset])
- _MM_UPCONV_EPI32_SINT16:
- RETURN SignExtend32(MEM[addr + 2*offset])
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- RETURN 4
- _MM_UPCONV_EPI32_UINT8:
- RETURN 1
- _MM_UPCONV_EPI32_SINT8:
- RETURN 1
- _MM_UPCONV_EPI32_UINT16:
- RETURN 2
- _MM_UPCONV_EPI32_SINT16:
- RETURN 2
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-upSize := UPCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 15
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*upSize % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- dst[i+31:i] := UPCONVERT(addr, loadOffset, conv)
- FI
- loadOffset := loadOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
- Loads the low-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt, up-converted depending on the value of "conv", and expanded into packed 32-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal.
-
-DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- RETURN MEM[addr + 4*offset]
- _MM_UPCONV_EPI32_UINT8:
- RETURN ZeroExtend32(MEM[addr + offset])
- _MM_UPCONV_EPI32_SINT8:
- RETURN SignExtend32(MEM[addr + offset])
- _MM_UPCONV_EPI32_UINT16:
- RETURN ZeroExtend32(MEM[addr + 2*offset])
- _MM_UPCONV_EPI32_SINT16:
- RETURN SignExtend32(MEM[addr + 2*offset])
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- RETURN 4
- _MM_UPCONV_EPI32_UINT8:
- RETURN 1
- _MM_UPCONV_EPI32_SINT8:
- RETURN 1
- _MM_UPCONV_EPI32_UINT16:
- RETURN 2
- _MM_UPCONV_EPI32_SINT16:
- RETURN 2
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-upSize := UPCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := UPCONVERT(addr, loadOffset, conv)
- loadOffset := loadOffset + 1
- IF (mt + loadOffset * upSize) % 64 == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
-
- Loads the low-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt, up-converted depending on the value of "conv", and expanded into packed 32-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal. Elements are copied to "dst" according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- RETURN MEM[addr + 4*offset]
- _MM_UPCONV_EPI32_UINT8:
- RETURN ZeroExtend32(MEM[addr + offset])
- _MM_UPCONV_EPI32_SINT8:
- RETURN SignExtend32(MEM[addr + offset])
- _MM_UPCONV_EPI32_UINT16:
- RETURN ZeroExtend32(MEM[addr + 2*offset])
- _MM_UPCONV_EPI32_SINT16:
- RETURN SignExtend32(MEM[addr + 2*offset])
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI32_NONE:
- RETURN 4
- _MM_UPCONV_EPI32_UINT8:
- RETURN 1
- _MM_UPCONV_EPI32_SINT8:
- RETURN 1
- _MM_UPCONV_EPI32_UINT16:
- RETURN 2
- _MM_UPCONV_EPI32_SINT16:
- RETURN 2
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-upSize := UPCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 15
- IF k[j]
- i := j*32
- dst[i+31:i] := UPCONVERT(addr, loadOffset, conv)
- loadOffset := loadOffset + 1
- IF (mt + loadOffset * upSize) % 64 == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
- Loads the high-64-byte-aligned portion of the quadword stream starting at element-aligned address mt-64, up-converted depending on the value of "conv", and expanded into packed 64-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal.
- DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- RETURN MEM[addr + 8*offset]
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- RETURN 8
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-upSize := UPCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 7
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*upSize) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- dst[i+63:i] := UPCONVERT(addr, loadOffset, conv)
- FI
- loadOffset := loadOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
-
- Loads the high-64-byte-aligned portion of the quadword stream starting at element-aligned address mt-64, up-converted depending on the value of "conv", and expanded into packed 64-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal. Elements are copied to "dst" according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- RETURN MEM[addr + 8*offset]
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- RETURN 8
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-upSize := UPCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 7
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*upSize) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- dst[i+63:i] := UPCONVERT(addr, loadOffset, conv)
- FI
- loadOffset := loadOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
- Loads the low-64-byte-aligned portion of the quadword stream starting at element-aligned address mt, up-converted depending on the value of "conv", and expanded into packed 64-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted quad that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal.
-
-DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- RETURN MEM[addr + 8*offset]
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- RETURN 8
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-upSize := UPCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := UPCONVERT(addr, loadOffset, conv)
- loadOffset := loadOffset + 1
- IF (addr + loadOffset*upSize % 64) == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
-
- Loads the low-64-byte-aligned portion of the quadword stream starting at element-aligned address mt, up-converted depending on the value of "conv", and expanded into packed 64-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal. Elements are copied to "dst" according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- RETURN MEM[addr + 8*offset]
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_EPI64_NONE:
- RETURN 8
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-upSize := UPCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 7
- IF k[j]
- i := j*64
- dst[i+63:i] := UPCONVERT(addr, loadOffset, conv)
- loadOffset := loadOffset + 1
- IF (addr + loadOffset*upSize % 64) == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
- Loads the high-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt-64, up-converted depending on the value of "conv", and expanded into packed single-precision (32-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal.
- DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- RETURN MEM[addr + 4*offset]
- _MM_UPCONV_PS_FLOAT16:
- RETURN Convert_FP16_To_FP32(MEM[addr + 4*offset])
- _MM_UPCONV_PS_UINT8:
- RETURN Convert_UInt8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_SINT8:
- RETURN Convert_Int8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_UINT16:
- RETURN Convert_UInt16_To_FP32(MEM[addr + 2*offset])
- _MM_UPCONV_PS_SINT16:
- RETURN Convert_Int16_To_FP32(MEM[addr + 2*offset])
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- RETURN 4
- _MM_UPCONV_PS_FLOAT16:
- RETURN 2
- _MM_UPCONV_PS_UINT8:
- RETURN 1
- _MM_UPCONV_PS_SINT8:
- RETURN 1
- _MM_UPCONV_PS_UINT16:
- RETURN 2
- _MM_UPCONV_PS_SINT16:
- RETURN 2
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-upSize := UPCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 15
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*upSize % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- dst[i+31:i] := UPCONVERT(addr, loadOffset, conv)
- FI
- loadOffset := loadOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
-
- Loads the high-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt-64, up-converted depending on the value of "conv", and expanded into packed single-precision (32-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal. Elements are copied to "dst" according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- RETURN MEM[addr + 4*offset]
- _MM_UPCONV_PS_FLOAT16:
- RETURN Convert_FP16_To_FP32(MEM[addr + 4*offset])
- _MM_UPCONV_PS_UINT8:
- RETURN Convert_UInt8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_SINT8:
- RETURN Convert_Int8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_UINT16:
- RETURN Convert_UInt16_To_FP32(MEM[addr + 2*offset])
- _MM_UPCONV_PS_SINT16:
- RETURN Convert_Int16_To_FP32(MEM[addr + 2*offset])
- ESAC
-}
-DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- RETURN MEM[addr + 4*offset]
- _MM_UPCONV_PS_FLOAT16:
- RETURN Convert_FP16_To_FP32(MEM[addr + 4*offset])
- _MM_UPCONV_PS_UINT8:
- RETURN Convert_UInt8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_SINT8:
- RETURN Convert_Int8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_UINT16:
- RETURN Convert_UInt16_To_FP32(MEM[addr + 2*offset])
- _MM_UPCONV_PS_SINT16:
- RETURN Convert_Int16_To_FP32(MEM[addr + 2*offset])
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-upSize := UPCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 15
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*upSize % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- dst[i+31:i] := UPCONVERT(addr, loadOffset, conv)
- FI
- loadOffset := loadOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
- Loads the low-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt, up-converted depending on the value of "conv", and expanded into packed single-precision (32-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal.
- DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- RETURN MEM[addr + 4*offset]
- _MM_UPCONV_PS_FLOAT16:
- RETURN Convert_FP16_To_FP32(MEM[addr + 4*offset])
- _MM_UPCONV_PS_UINT8:
- RETURN Convert_UInt8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_SINT8:
- RETURN Convert_Int8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_UINT16:
- RETURN Convert_UInt16_To_FP32(MEM[addr + 2*offset])
- _MM_UPCONV_PS_SINT16:
- RETURN Convert_Int16_To_FP32(MEM[addr + 2*offset])
- ESAC
-}
-DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- RETURN MEM[addr + 4*offset]
- _MM_UPCONV_PS_FLOAT16:
- RETURN Convert_FP16_To_FP32(MEM[addr + 4*offset])
- _MM_UPCONV_PS_UINT8:
- RETURN Convert_UInt8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_SINT8:
- RETURN Convert_Int8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_UINT16:
- RETURN Convert_UInt16_To_FP32(MEM[addr + 2*offset])
- _MM_UPCONV_PS_SINT16:
- RETURN Convert_Int16_To_FP32(MEM[addr + 2*offset])
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-upSize := UPCONVERTSIZE(conv)
-addr := MEM[mt]
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := UPCONVERT(addr, loadOffset, conv)
- loadOffset := loadOffset + 1
- IF (mt + loadOffset * upSize) % 64 == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
-
- Loads the low-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt, up-converted depending on the value of "conv", and expanded into packed single-precision (32-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal. Elements are copied to "dst" according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- RETURN MEM[addr + 4*offset]
- _MM_UPCONV_PS_FLOAT16:
- RETURN Convert_FP16_To_FP32(MEM[addr + 4*offset])
- _MM_UPCONV_PS_UINT8:
- RETURN Convert_UInt8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_SINT8:
- RETURN Convert_Int8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_UINT16:
- RETURN Convert_UInt16_To_FP32(MEM[addr + 2*offset])
- _MM_UPCONV_PS_SINT16:
- RETURN Convert_Int16_To_FP32(MEM[addr + 2*offset])
- ESAC
-}
-DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_PS_NONE:
- RETURN MEM[addr + 4*offset]
- _MM_UPCONV_PS_FLOAT16:
- RETURN Convert_FP16_To_FP32(MEM[addr + 4*offset])
- _MM_UPCONV_PS_UINT8:
- RETURN Convert_UInt8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_SINT8:
- RETURN Convert_Int8_To_FP32(MEM[addr + offset])
- _MM_UPCONV_PS_UINT16:
- RETURN Convert_UInt16_To_FP32(MEM[addr + 2*offset])
- _MM_UPCONV_PS_SINT16:
- RETURN Convert_Int16_To_FP32(MEM[addr + 2*offset])
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-upSize := UPCONVERTSIZE(conv)
-addr := MEM[mt]
-FOR j := 0 to 15
- IF k[j]
- i := j*32
- dst[i+31:i] := UPCONVERT(addr, loadOffset, conv)
- loadOffset := loadOffset + 1
- IF (mt + loadOffset * upSize) % 64 == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
- Loads the high-64-byte-aligned portion of the quadword stream starting at element-aligned address mt-64, up-converted depending on the value of "conv", and expanded into packed double-precision (64-bit) floating-point values in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal.
- DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- RETURN MEM[addr + 8*offset]
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- RETURN 8
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-upSize := UPCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 7
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*upSize) % 64 == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- dst[i+63:i] := UPCONVERT(addr, loadOffset, conv)
- FI
- loadOffset := loadOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
-
- Loads the high-64-byte-aligned portion of the quadword stream starting at element-aligned address mt-64, up-converted depending on the value of "conv", and expanded into packed double-precision (64-bit) floating-point values in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal. Elements are copied to "dst" according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- RETURN MEM[addr + 8*offset]
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- RETURN 8
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-upSize := UPCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 7
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*upSize) % 64 == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- dst[i+63:i] := UPCONVERT(addr, loadOffset, conv)
- FI
- loadOffset := loadOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
- Loads the low-64-byte-aligned portion of the quadword stream starting at element-aligned address mt, up-converted depending on the value of "conv", and expanded into packed double-precision (64-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted quad that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal.
-
-DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- RETURN MEM[addr + 8*offset]
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- RETURN 8
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-upSize := UPCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := UPCONVERT(addr, loadOffset, conv)
- loadOffset := loadOffset + 1
- IF (mt + loadOffset * upSize) % 64 == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
-
- Loads the low-64-byte-aligned portion of the quadword stream starting at element-aligned address mt, up-converted depending on the value of "conv", and expanded into packed double-precision (64-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted quad that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". "hint" indicates to the processor whether the loaded data is non-temporal. Elements are copied to "dst" according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-DEFINE UPCONVERT(addr, offset, convertTo) {
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- RETURN MEM[addr + 8*offset]
- ESAC
-}
-DEFINE UPCONVERTSIZE(convertTo) {
- CASE conv OF
- _MM_UPCONV_PD_NONE:
- RETURN 8
- ESAC
-}
-dst[511:0] := src[511:0]
-loadOffset := 0
-upSize := UPCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 7
- IF k[j]
- i := j*64
- dst[i+63:i] := UPCONVERT(addr, loadOffset, conv)
- loadOffset := loadOffset + 1
- IF (mt + loadOffset * upSize) % 64 == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
- Down-converts and stores packed 32-bit integer elements of "v1" into a byte/word/doubleword stream according to "conv" at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)). "hint" indicates to the processor whether the data is non-temporal.
- DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_DOWNCONV_EPI32_NONE:
- RETURN element[31:0]
- _MM_DOWNCONV_EPI32_UINT8:
- RETURN Truncate8(element[31:0])
- _MM_DOWNCONV_EPI32_SINT8:
- RETURN Saturate8(element[31:0])
- _MM_DOWNCONV_EPI32_UINT16:
- RETURN Truncate16(element[31:0])
- _MM_DOWNCONV_EPI32_SINT16:
- RETURN Saturate16(element[31:0])
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_DOWNCONV_EPI32_NONE:
- RETURN 4
- _MM_DOWNCONV_EPI32_UINT8:
- RETURN 1
- _MM_DOWNCONV_EPI32_SINT8:
- RETURN 1
- _MM_DOWNCONV_EPI32_UINT16:
- RETURN 2
- _MM_DOWNCONV_EPI32_SINT16:
- RETURN 2
- ESAC
-}
-storeOffset := 0
-foundNext64BytesBoundary := false
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 15
- IF foundNext64BytesBoundary == false
- IF ((addr + (storeOffset + 1)*downSize) % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- tmp := DOWNCONVERT(v1[i+31:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 4: MEM[storeAddr] := tmp[31:0]
- 2: MEM[storeAddr] := tmp[15:0]
- 1: MEM[storeAddr] := tmp[7:0]
- ESAC
- FI
- storeOffset := storeOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
- Down-converts and stores packed 32-bit integer elements of "v1" into a byte/word/doubleword stream according to "conv" at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)). "hint" indicates to the processor whether the data is non-temporal. Elements are stored to memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_DOWNCONV_EPI32_NONE:
- RETURN element[31:0]
- _MM_DOWNCONV_EPI32_UINT8:
- RETURN Truncate8(element[31:0])
- _MM_DOWNCONV_EPI32_SINT8:
- RETURN Saturate8(element[31:0])
- _MM_DOWNCONV_EPI32_UINT16:
- RETURN Truncate16(element[31:0])
- _MM_DOWNCONV_EPI32_SINT16:
- RETURN Saturate16(element[31:0])
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_DOWNCONV_EPI32_NONE:
- RETURN 4
- _MM_DOWNCONV_EPI32_UINT8:
- RETURN 1
- _MM_DOWNCONV_EPI32_SINT8:
- RETURN 1
- _MM_DOWNCONV_EPI32_UINT16:
- RETURN 2
- _MM_DOWNCONV_EPI32_SINT16:
- RETURN 2
- ESAC
-}
-storeOffset := 0
-foundNext64BytesBoundary := false
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 15
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF ((addr + (storeOffset + 1)*downSize) % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- tmp := DOWNCONVERT(v1[i+31:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 4: MEM[storeAddr] := tmp[31:0]
- 2: MEM[storeAddr] := tmp[15:0]
- 1: MEM[storeAddr] := tmp[7:0]
- ESAC
- FI
- storeOffset := storeOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
- Down-converts and stores packed 32-bit integer elements of "v1" into a byte/word/doubleword stream according to "conv" at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). "hint" indicates to the processor whether the data is non-temporal.
-
-DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_DOWNCONV_EPI32_NONE:
- RETURN element[31:0]
- _MM_DOWNCONV_EPI32_UINT8:
- RETURN Truncate8(element[31:0])
- _MM_DOWNCONV_EPI32_SINT8:
- RETURN Saturate8(element[31:0])
- _MM_DOWNCONV_EPI32_UINT16:
- RETURN Truncate16(element[31:0])
- _MM_DOWNCONV_EPI32_SINT16:
- RETURN Saturate16(element[31:0])
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_DOWNCONV_EPI32_NONE:
- RETURN 4
- _MM_DOWNCONV_EPI32_UINT8:
- RETURN 1
- _MM_DOWNCONV_EPI32_SINT8:
- RETURN 1
- _MM_DOWNCONV_EPI32_UINT16:
- RETURN 2
- _MM_DOWNCONV_EPI32_SINT16:
- RETURN 2
- ESAC
-}
-storeOffset := 0
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 15
- i := j*32
- tmp := DOWNCONVERT(v1[i+31:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 4: MEM[storeAddr] := tmp[31:0]
- 2: MEM[storeAddr] := tmp[15:0]
- 1: MEM[storeAddr] := tmp[7:0]
- ESAC
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset * downSize) % 64) == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
- Down-converts and stores packed 32-bit integer elements of "v1" into a byte/word/doubleword stream according to "conv" at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). "hint" indicates to the processor whether the data is non-temporal. Elements are written to memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_DOWNCONV_EPI32_NONE:
- RETURN element[31:0]
- _MM_DOWNCONV_EPI32_UINT8:
- RETURN Truncate8(element[31:0])
- _MM_DOWNCONV_EPI32_SINT8:
- RETURN Saturate8(element[31:0])
- _MM_DOWNCONV_EPI32_UINT16:
- RETURN Truncate16(element[31:0])
- _MM_DOWNCONV_EPI32_SINT16:
- RETURN Saturate16(element[31:0])
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_DOWNCONV_EPI32_NONE:
- RETURN 4
- _MM_DOWNCONV_EPI32_UINT8:
- RETURN 1
- _MM_DOWNCONV_EPI32_SINT8:
- RETURN 1
- _MM_DOWNCONV_EPI32_UINT16:
- RETURN 2
- _MM_DOWNCONV_EPI32_SINT16:
- RETURN 2
- ESAC
-}
-storeOffset := 0
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 15
- IF k[j]
- i := j*32
- tmp := DOWNCONVERT(v1[i+31:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 4: MEM[storeAddr] := tmp[31:0]
- 2: MEM[storeAddr] := tmp[15:0]
- 1: MEM[storeAddr] := tmp[7:0]
- ESAC
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset * downSize) % 64) == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
- Down-converts and stores packed 64-bit integer elements of "v1" into a quadword stream according to "conv" at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)). "hint" indicates to the processor whether the data is non-temporal.
- DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_EPI64_NONE:
- RETURN element[63:0]
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_EPI64_NONE:
- RETURN 8
- ESAC
-}
-storeOffset := 0
-foundNext64BytesBoundary := false
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 7
- IF foundNext64BytesBoundary == false
- IF ((addr + (storeOffset + 1)*downSize) % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- tmp := DOWNCONVERT(v1[i+63:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 8: MEM[storeAddr] := tmp[63:0]
- ESAC
- FI
- storeOffset := storeOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
- Down-converts and stores packed 64-bit integer elements of "v1" into a quadword stream according to "conv" at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (mt-64)). "hint" indicates to the processor whether the data is non-temporal. Elements are stored to memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_EPI64_NONE:
- RETURN element[63:0]
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_EPI64_NONE:
- RETURN 8
- ESAC
-}
-storeOffset := 0
-foundNext64BytesBoundary := false
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 7
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF ((addr + (storeOffset + 1)*downSize) % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- tmp := DOWNCONVERT(v1[i+63:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 8: MEM[storeAddr] := tmp[63:0]
+ ELSE
+ dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF imm8[7:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Shift packed 64-bit integers in "a" right by "count" while shifting in zeros,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF count[63:0] > 63
+ dst[i+63:i] := 0
+ ELSE
+ dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
+ FI
+ ENDFOR
+
+
+ SSE2
+
+ Shift
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[127:0] := (a[127:0] AND b[127:0])
+
+
+ SSE2
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of 128 bits (representing integer data) in "a" and then
+ AND with "b", and store the result in "dst".
+
+ dst[127:0] := ((NOT a[127:0]) AND b[127:0])
+
+
+ SSE2
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of 128 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[127:0] := (a[127:0] OR b[127:0])
+
+
+ SSE2
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of 128 bits (representing integer data) in "a" and "b",
+ and store the result in "dst".
+
+ dst[127:0] := (a[127:0] XOR b[127:0])
+
+
+ SSE2
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
+ ENDFOR
+
+
+ SSE2
+
+ Logical
+
+
+
+
+
+ Compute the bitwise NOT of packed double-precision (64-bit) floating-point
+ elements in "a" and then AND with "b", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
+ ENDFOR
+
+
+ SSE2
+
+ Logical
+
+
+
+
+
+ Compute the bitwise OR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[i+63:i] OR b[i+63:i]
+ ENDFOR
+
+
+ SSE2
+
+ Logical
+
+
+
+
+
+ Compute the bitwise XOR of packed double-precision (64-bit) floating-point
+ elements in "a" and "b", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
+ ENDFOR
+
+
+ SSE2
+
+ Logical
+
+
+
+
+
+ Compare packed 8-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := ( a[i+7:i] == b[i+7:i] ) ? 0xFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed 16-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ( a[i+15:i] == b[i+15:i] ) ? 0xFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed 32-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store
+ the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := ( a[i+7:i] > b[i+7:i] ) ? 0xFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for greater-than, and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ( a[i+15:i] > b[i+15:i] ) ? 0xFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for greater-than, and
+ store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] > b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b" for less-than, and store
+ the results in "dst". Note: This intrinsic emits the pcmpgtb instruction with the order
+ of the operands switched.
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := ( a[i+7:i] < b[i+7:i] ) ? 0xFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed signed 16-bit integers in "a" and "b" for less-than, and store
+ the results in "dst". Note: This intrinsic emits the pcmpgtw instruction with the order
+ of the operands switched.
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ( a[i+15:i] < b[i+15:i] ) ? 0xFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b" for less-than, and store
+ the results in "dst". Note: This intrinsic emits the pcmpgtd instruction with the order
+ of the operands switched.
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ( a[i+31:i] < b[i+31:i] ) ? 0xFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" for equality, store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst".
+
+ dst[63:0] := (a[63:0] == b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" for less-than, store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst".
+
+ dst[63:0] := (a[63:0] < b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" for less-than-or-equal, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := (a[63:0] <= b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" for greater-than, store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst".
+
+ dst[63:0] := (a[63:0] > b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" for greater-than-or-equal, store the result in the lower element of "dst", and copy
+ the upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := (a[63:0] >= b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" to see if neither is NaN, store the result in the lower element of "dst", and copy
+ the upper element from "a" to the upper element of "dst".
+ dst[63:0] := (a[63:0] != NaN AND b[63:0] != NaN) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" to see if either is NaN, store the result in the lower element of "dst", and copy
+ the upper element from "a" to the upper element of "dst".
+ dst[63:0] := (a[63:0] == NaN OR b[63:0] == NaN) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" for not-equal, store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst".
+
+ dst[63:0] := (a[63:0] != b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" for not-less-than, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := (!(a[63:0] < b[63:0])) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" for not-less-than-or-equal, store the result in the lower element of "dst", and copy
+ the upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := (!(a[63:0] <= b[63:0])) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" for not-greater-than, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := (!(a[63:0] > b[63:0])) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point elements in "a" and
+ "b" for not-greater-than-or-equal, store the result in the lower element of "dst", and
+ copy the upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := (!(a[63:0] >= b[63:0])) ? 0xFFFFFFFFFFFFFFFF : 0
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for equality, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] == b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for less-than, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] < b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for less-than-or-equal, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] <= b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for greater-than, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] > b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for greater-than-or-equal, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] >= b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ to see if neither is NaN, and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] != NaN AND b[i+63:i] != NaN) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ to see if either is NaN, and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] == NaN OR b[i+63:i] == NaN) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for not-equal, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (a[i+63:i] != b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for not-less-than, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (!(a[i+63:i] < b[i+63:i])) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for not-less-than-or-equal, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (!(a[i+63:i] <= b[i+63:i])) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for not-greater-than, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (!(a[i+63:i] > b[i+63:i])) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare packed double-precision (64-bit) floating-point elements in "a" and "b"
+ for not-greater-than-or-equal, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := (!(a[i+63:i] >= b[i+63:i])) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for equality, and return the boolean result (0 or 1).
+ RETURN ( a[63:0] != NaN AND b[63:0] != NaN AND a[63:0] == b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for less-than, and return the boolean result (0 or 1).
+ RETURN ( a[63:0] != NaN AND b[63:0] != NaN AND a[63:0] < b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for less-than-or-equal, and return the boolean result (0 or 1).
+ RETURN ( a[63:0] != NaN AND b[63:0] != NaN AND a[63:0] <= b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for greater-than, and return the boolean result (0 or 1).
+ RETURN ( a[63:0] != NaN AND b[63:0] != NaN AND a[63:0] > b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for greater-than-or-equal, and return the boolean result (0 or 1).
+ RETURN ( a[63:0] != NaN AND b[63:0] != NaN AND a[63:0] >= b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for not-equal, and return the boolean result (0 or 1).
+ RETURN ( a[63:0] == NaN OR b[63:0] == NaN OR a[63:0] != b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for equality, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a[63:0] != NaN AND b[63:0] != NaN AND a[63:0] == b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for less-than, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a[63:0] != NaN AND b[63:0] != NaN AND a[63:0] < b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for less-than-or-equal, and return the boolean result (0 or 1). This instruction
+ will not signal an exception for QNaNs.
+ RETURN ( a[63:0] != NaN AND b[63:0] != NaN AND a[63:0] <= b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for greater-than, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a[63:0] != NaN AND b[63:0] != NaN AND a[63:0] > b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for greater-than-or-equal, and return the boolean result (0 or 1). This instruction
+ will not signal an exception for QNaNs.
+ RETURN ( a[63:0] != NaN AND b[63:0] != NaN AND a[63:0] >= b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+
+ Compare the lower double-precision (64-bit) floating-point element in "a" and
+ "b" for not-equal, and return the boolean result (0 or 1). This instruction will not
+ signal an exception for QNaNs.
+ RETURN ( a[63:0] == NaN OR b[63:0] == NaN OR a[63:0] != b[63:0] ) ? 1 : 0
+
+
+ SSE2
+
+ Compare
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
+ ENDFOR
+
+
+ SSE2
+
+ Convert
+
+
+
+
+
+ Convert the signed 32-bit integer "b" to a double-precision (64-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := Convert_Int32_To_FP64(b[31:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ SSE2
+
+ Convert
+
+
+
+
+
+ Convert the signed 64-bit integer "b" to a double-precision (64-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := Convert_Int64_To_FP64(b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ SSE2
+
+ Convert
+
+
+
+
+
+ Convert the signed 64-bit integer "b" to a double-precision (64-bit)
+ floating-point element, store the result in the lower element of "dst", and copy the
+ upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := Convert_Int64_To_FP64(b[63:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed single-precision
+ (32-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
+ ENDFOR
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert packed signed 32-bit integers in "a" to packed double-precision
+ (64-bit) floating-point elements, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ m := j*64
+ dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
+ ENDFOR
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Copy 32-bit integer "a" to the lower elements of "dst", and zero the upper
+ elements of "dst".
+
+ dst[31:0] := a[31:0]
+ dst[127:32] := 0
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Copy 64-bit integer "a" to the lower element of "dst", and zero the upper
+ element.
+
+ dst[63:0] := a[63:0]
+ dst[127:64] := 0
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Copy 64-bit integer "a" to the lower element of "dst", and zero the upper
+ element.
+
+ dst[63:0] := a[63:0]
+ dst[127:64] := 0
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Copy the lower 32-bit integer in "a" to "dst".
+
+ dst[31:0] := a[31:0]
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Copy the lower 64-bit integer in "a" to "dst".
+
+ dst[63:0] := a[63:0]
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Copy the lower 64-bit integer in "a" to "dst".
+
+ dst[63:0] := a[63:0]
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed single-precision (32-bit) floating-point elements, and store the results in
+ "dst".
+
+ FOR j := 0 to 1
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_FP32(a[k+63:k])
+ ENDFOR
+ dst[127:64] := 0
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed double-precision (64-bit) floating-point elements, and store the results in
+ "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 32*j
+ dst[i+63:i] := Convert_FP32_To_FP64(a[k+31:k])
+ ENDFOR
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_Int32(a[k+63:k])
+ ENDFOR
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 32-bit integer, and store the result in "dst".
+
+ dst[31:0] := Convert_FP64_To_Int32(a[63:0])
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 64-bit integer, and store the result in "dst".
+
+ dst[63:0] := Convert_FP64_To_Int64(a[63:0])
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 64-bit integer, and store the result in "dst".
+
+ dst[63:0] := Convert_FP64_To_Int64(a[63:0])
+
+
+ SSE2
+
+ Convert
+
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "b" to a
+ single-precision (32-bit) floating-point element, store the result in the lower element
+ of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
+
+ dst[31:0] := Convert_FP64_To_FP32(b[63:0])
+ dst[127:32] := a[127:32]
+ dst[MAX:128] := 0
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Copy the lower double-precision (64-bit) floating-point element of "a" to
+ "dst".
+
+ dst[63:0] := a[63:0]
+
+
+ SSE2
+
+ Convert
+
+
+
+
+
+ Convert the lower single-precision (32-bit) floating-point element in "b" to a
+ double-precision (64-bit) floating-point element, store the result in the lower element
+ of "dst", and copy the upper element from "a" to the upper element of "dst".
+
+ dst[63:0] := Convert_FP32_To_FP64(b[31:0])
+ dst[127:64] := a[127:64]
+ dst[MAX:128] := 0
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[k+63:k])
+ ENDFOR
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 32-bit integer with truncation, and store the result in "dst".
+
+ dst[31:0] := Convert_FP64_To_Int32_Truncate(a[63:0])
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 64-bit integer with truncation, and store the result in "dst".
+
+ dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0])
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert the lower double-precision (64-bit) floating-point element in "a" to a
+ 64-bit integer with truncation, and store the result in "dst".
+
+ dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0])
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
+ ENDFOR
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert packed single-precision (32-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
+ ENDFOR
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_Int32(a[k+63:k])
+ ENDFOR
+
+
+ SSE2
+
+ Convert
+
+
+
+
+ Convert packed double-precision (64-bit) floating-point elements in "a" to
+ packed 32-bit integers with truncation, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 32*j
+ k := 64*j
+ dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[k+63:k])
+ ENDFOR
+
+
+ SSE2
+
+ Convert
+
+
+
+
+
+ Set packed 64-bit integers in "dst" with the supplied values.
+
+ dst[63:0] := e0
+ dst[127:64] := e1
+
+ SSE2
+
+ Set
+
+
+
+
+
+ Set packed 64-bit integers in "dst" with the supplied values.
+
+ dst[63:0] := e0
+ dst[127:64] := e1
+
+ SSE2
+
+ Set
+
+
+
+
+
+
+
+ Set packed 32-bit integers in "dst" with the supplied values.
+
+ dst[31:0] := e0
+ dst[63:32] := e1
+ dst[95:64] := e2
+ dst[127:96] := e3
+
+ SSE2
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 16-bit integers in "dst" with the supplied values.
+
+ dst[15:0] := e0
+ dst[31:16] := e1
+ dst[47:32] := e2
+ dst[63:48] := e3
+ dst[79:64] := e4
+ dst[95:80] := e5
+ dst[111:96] := e6
+ dst[127:112] := e7
+
+ SSE2
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 8-bit integers in "dst" with the supplied values.
+
+ dst[7:0] := e0
+ dst[15:8] := e1
+ dst[23:16] := e2
+ dst[31:24] := e3
+ dst[39:32] := e4
+ dst[47:40] := e5
+ dst[55:48] := e6
+ dst[63:56] := e7
+ dst[71:64] := e8
+ dst[79:72] := e9
+ dst[87:80] := e10
+ dst[95:88] := e11
+ dst[103:96] := e12
+ dst[111:104] := e13
+ dst[119:112] := e14
+ dst[127:120] := e15
+
+ SSE2
+
+ Set
+
+
+
+
+ Broadcast 64-bit integer "a" to all elements of "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+
+ SSE2
+
+ Set
+
+
+
+
+ Broadcast 64-bit integer "a" to all elements of "dst". This intrinsic may
+ generate the "vpbroadcastq".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+
+ SSE2
+
+ Set
+
+
+
+
+ Broadcast 32-bit integer "a" to all elements of "dst". This intrinsic may
+ generate "vpbroadcastd".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := a[31:0]
+ ENDFOR
+
+ SSE2
+
+ Set
+
+
+
+
+ Broadcast 16-bit integer "a" to all all elements of "dst". This intrinsic may
+ generate "vpbroadcastw".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := a[15:0]
+ ENDFOR
+
+ SSE2
+
+ Set
+
+
+
+
+ Broadcast 8-bit integer "a" to all elements of "dst". This intrinsic may
+ generate "vpbroadcastb".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := a[7:0]
+ ENDFOR
+
+ SSE2
+
+ Set
+
+
+
+
+
+ Set packed 64-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[63:0] := e1
+ dst[127:64] := e0
+
+ SSE2
+
+ Set
+
+
+
+
+
+
+
+ Set packed 32-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[31:0] := e3
+ dst[63:32] := e2
+ dst[95:64] := e1
+ dst[127:96] := e0
+
+ SSE2
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 16-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[15:0] := e7
+ dst[31:16] := e6
+ dst[47:32] := e5
+ dst[63:48] := e4
+ dst[79:64] := e3
+ dst[95:80] := e2
+ dst[111:96] := e1
+ dst[127:112] := e0
+
+ SSE2
+
+ Set
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set packed 8-bit integers in "dst" with the supplied values in reverse order.
+
+ dst[7:0] := e15
+ dst[15:8] := e14
+ dst[23:16] := e13
+ dst[31:24] := e12
+ dst[39:32] := e11
+ dst[47:40] := e10
+ dst[55:48] := e9
+ dst[63:56] := e8
+ dst[71:64] := e7
+ dst[79:72] := e6
+ dst[87:80] := e5
+ dst[95:88] := e4
+ dst[103:96] := e3
+ dst[111:104] := e2
+ dst[119:112] := e1
+ dst[127:120] := e0
+
+ SSE2
+
+ Set
+
+
+
+ Return vector of type __m128i with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ SSE2
+
+ Set
+
+
+
+
+ Copy double-precision (64-bit) floating-point element "a" to the lower element
+ of "dst", and zero the upper element.
+
+ dst[63:0] := a[63:0]
+ dst[127:64] := 0
+
+ SSE2
+
+ Set
+
+
+
+
+ Broadcast double-precision (64-bit) floating-point value "a" to all elements of
+ "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+
+ SSE2
+
+ Set
+
+
+
+
+ Broadcast double-precision (64-bit) floating-point value "a" to all elements of
+ "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := a[63:0]
+ ENDFOR
+
+ SSE2
+
+ Set
+
+
+
+
+
+ Set packed double-precision (64-bit) floating-point elements in "dst" with the
+ supplied values.
+
+ dst[63:0] := e0
+ dst[127:64] := e1
+
+ SSE2
+
+ Set
+
+
+
+
+
+ Set packed double-precision (64-bit) floating-point elements in "dst" with the
+ supplied values in reverse order.
+
+ dst[63:0] := e1
+ dst[127:64] := e0
+
+ SSE2
+
+ Set
+
+
+
+
+ Return vector of type __m128d with all elements set to zero.
+
+ dst[MAX:0] := 0
+
+
+ SSE2
+
+ Set
+
+
+
+
+ Copy the lower 64-bit integer in "a" to "dst".
+
+ dst[63:0] := a[63:0]
+
+
+ SSE2
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using signed saturation, and store the results in "dst".
+
+ dst[7:0] := Saturate8(a[15:0])
+ dst[15:8] := Saturate8(a[31:16])
+ dst[23:16] := Saturate8(a[47:32])
+ dst[31:24] := Saturate8(a[63:48])
+ dst[39:32] := Saturate8(a[79:64])
+ dst[47:40] := Saturate8(a[95:80])
+ dst[55:48] := Saturate8(a[111:96])
+ dst[63:56] := Saturate8(a[127:112])
+ dst[71:64] := Saturate8(b[15:0])
+ dst[79:72] := Saturate8(b[31:16])
+ dst[87:80] := Saturate8(b[47:32])
+ dst[95:88] := Saturate8(b[63:48])
+ dst[103:96] := Saturate8(b[79:64])
+ dst[111:104] := Saturate8(b[95:80])
+ dst[119:112] := Saturate8(b[111:96])
+ dst[127:120] := Saturate8(b[127:112])
+
+
+ SSE2
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using signed saturation, and store the results in "dst".
+
+ dst[15:0] := Saturate16(a[31:0])
+ dst[31:16] := Saturate16(a[63:32])
+ dst[47:32] := Saturate16(a[95:64])
+ dst[63:48] := Saturate16(a[127:96])
+ dst[79:64] := Saturate16(b[31:0])
+ dst[95:80] := Saturate16(b[63:32])
+ dst[111:96] := Saturate16(b[95:64])
+ dst[127:112] := Saturate16(b[127:96])
+
+
+ SSE2
+
+ Miscellaneous
+
+
+
+
+
+ Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers
+ using unsigned saturation, and store the results in "dst".
+
+ dst[7:0] := SaturateU8(a[15:0])
+ dst[15:8] := SaturateU8(a[31:16])
+ dst[23:16] := SaturateU8(a[47:32])
+ dst[31:24] := SaturateU8(a[63:48])
+ dst[39:32] := SaturateU8(a[79:64])
+ dst[47:40] := SaturateU8(a[95:80])
+ dst[55:48] := SaturateU8(a[111:96])
+ dst[63:56] := SaturateU8(a[127:112])
+ dst[71:64] := SaturateU8(b[15:0])
+ dst[79:72] := SaturateU8(b[31:16])
+ dst[87:80] := SaturateU8(b[47:32])
+ dst[95:88] := SaturateU8(b[63:48])
+ dst[103:96] := SaturateU8(b[79:64])
+ dst[111:104] := SaturateU8(b[95:80])
+ dst[119:112] := SaturateU8(b[111:96])
+ dst[127:120] := SaturateU8(b[127:112])
+
+
+ SSE2
+
+ Miscellaneous
+
+
+
+
+ Create mask from the most significant bit of each 8-bit element in "a", and
+ store the result in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[j] := a[i+7]
+ ENDFOR
+ dst[MAX:16] := 0
+
+
+ SSE2
+
+ Miscellaneous
+
+
+
+
+ Set each bit of mask "dst" based on the most significant bit of the
+ corresponding packed double-precision (64-bit) floating-point element in "a".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF a[i+63]
+ dst[j] := 1
+ ELSE
+ dst[j] := 0
+ FI
+ ENDFOR
+ dst[MAX:2] := 0
+
+
+ SSE2
+
+ Miscellaneous
+
+
+
+
+ Copy the 64-bit integer "a" to the lower element of "dst", and zero the upper
+ element.
+
+ dst[63:0] := a[63:0]
+ dst[127:64] := 0
+
+
+ SSE2
+
+ Move
+
+
+
+
+ Copy the lower 64-bit integer in "a" to the lower element of "dst", and zero
+ the upper element.
+
+ dst[63:0] := a[63:0]
+ dst[127:64] := 0
+
+
+ SSE2
+
+ Move
+
+
+
+
+
+ Move the lower double-precision (64-bit) floating-point element from "b" to the
+ lower element of "dst", and copy the upper element from "a" to the upper element of
+ "dst".
+
+ dst[63:0] := b[63:0]
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Move
+
+
+
+
+
+ Extract a 16-bit integer from "a", selected with "imm8", and store the result
+ in the lower element of "dst".
+
+ dst[15:0] := (a[127:0] >> (imm8[2:0] * 16))[15:0]
+ dst[31:16] := 0
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", and insert the 16-bit integer "i" into "dst" at the location
+ specified by "imm8".
+
+ dst[127:0] := a[127:0]
+ sel := imm8[2:0]*16
+ dst[sel+15:sel] := i[15:0]
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Shuffle 32-bit integers in "a" using the control in "imm8", and store the
+ results in "dst".
+
+ DEFINE SELECT4(src, control) {
+ CASE(control[1:0]) OF
+ 0: tmp[31:0] := src[31:0]
+ 1: tmp[31:0] := src[63:32]
+ 2: tmp[31:0] := src[95:64]
+ 3: tmp[31:0] := src[127:96]
ESAC
- FI
- storeOffset := storeOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
- Down-converts and stores packed 64-bit integer elements of "v1" into a quadword stream according to "conv" at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). "hint" indicates to the processor whether the data is non-temporal.
-
-DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_EPI64_NONE:
- RETURN element[63:0]
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_EPI64_NONE:
- RETURN 8
- ESAC
-}
-storeOffset := 0
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 7
- i := j*63
- tmp := DOWNCONVERT(v1[i+63:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 8: MEM[storeAddr] := tmp[63:0]
- ESAC
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset * downSize) % 64) == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
- Down-converts and stores packed 64-bit integer elements of "v1" into a quadword stream according to "conv" at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). "hint" indicates to the processor whether the data is non-temporal. Elements are stored to memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_EPI64_NONE:
- RETURN element[63:0]
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_EPI64_NONE:
- RETURN 8
- ESAC
-}
-storeOffset := 0
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 7
- IF k[j]
- i := j*63
- tmp := DOWNCONVERT(v1[i+63:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 8: MEM[storeAddr] := tmp[63:0]
- ESAC
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset * downSize) % 64) == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
- Down-converts and stores packed single-precision (32-bit) floating-point elements of "v1" into a byte/word/doubleword stream according to "conv" at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)). "hint" indicates to the processor whether the data is non-temporal.
- DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PS_NONE:
- RETURN element[31:0]
- _MM_UPCONV_PS_FLOAT16:
- RETURN Convert_FP32_To_FP16(element[31:0])
- _MM_UPCONV_PS_UINT8:
- RETURN Truncate8(element[31:0])
- _MM_UPCONV_PS_SINT8:
- RETURN Saturate8(element[31:0])
- _MM_UPCONV_PS_UINT16:
- RETURN Truncate16(element[31:0])
- _MM_UPCONV_PS_SINT16:
- RETURN Saturate16(element[31:0])
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PS_NONE:
- RETURN 4
- _MM_UPCONV_PS_FLOAT16:
- RETURN 2
- _MM_UPCONV_PS_UINT8:
- RETURN 1
- _MM_UPCONV_PS_SINT8:
- RETURN 1
- _MM_UPCONV_PS_UINT16:
- RETURN 2
- _MM_UPCONV_PS_SINT16:
- RETURN 2
- ESAC
-}
-storeOffset := 0
-foundNext64BytesBoundary := false
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 15
- IF foundNext64BytesBoundary == false
- IF ((addr + (storeOffset + 1)*downSize) % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- tmp := DOWNCONVERT(v1[i+31:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 4: MEM[storeAddr] := tmp[31:0]
- 2: MEM[storeAddr] := tmp[15:0]
- 1: MEM[storeAddr] := tmp[7:0]
- ESAC
- FI
- storeOffset := storeOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
-
- Down-converts and stores packed single-precision (32-bit) floating-point elements of "v1" into a byte/word/doubleword stream according to "conv" at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)). "hint" indicates to the processor whether the data is non-temporal. Elements are stored to memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PS_NONE:
- RETURN element[31:0]
- _MM_UPCONV_PS_FLOAT16:
- RETURN Convert_FP32_To_FP16(element[31:0])
- _MM_UPCONV_PS_UINT8:
- RETURN Truncate8(element[31:0])
- _MM_UPCONV_PS_SINT8:
- RETURN Saturate8(element[31:0])
- _MM_UPCONV_PS_UINT16:
- RETURN Truncate16(element[31:0])
- _MM_UPCONV_PS_SINT16:
- RETURN Saturate16(element[31:0])
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PS_NONE:
- RETURN 4
- _MM_UPCONV_PS_FLOAT16:
- RETURN 2
- _MM_UPCONV_PS_UINT8:
- RETURN 1
- _MM_UPCONV_PS_SINT8:
- RETURN 1
- _MM_UPCONV_PS_UINT16:
- RETURN 2
- _MM_UPCONV_PS_SINT16:
- RETURN 2
- ESAC
-}
-storeOffset := 0
-foundNext64BytesBoundary := false
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 15
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF ((addr + (storeOffset + 1)*downSize) % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- tmp := DOWNCONVERT(v1[i+31:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 4: MEM[storeAddr] := tmp[31:0]
- 2: MEM[storeAddr] := tmp[15:0]
- 1: MEM[storeAddr] := tmp[7:0]
+ RETURN tmp[31:0]
+ }
+ dst[31:0] := SELECT4(a[127:0], imm8[1:0])
+ dst[63:32] := SELECT4(a[127:0], imm8[3:2])
+ dst[95:64] := SELECT4(a[127:0], imm8[5:4])
+ dst[127:96] := SELECT4(a[127:0], imm8[7:6])
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Shuffle 16-bit integers in the high 64 bits of "a" using the control in "imm8".
+ Store the results in the high 64 bits of "dst", with the low 64 bits being copied from
+ from "a" to "dst".
+
+ dst[63:0] := a[63:0]
+ dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
+ dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
+ dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
+ dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Shuffle 16-bit integers in the low 64 bits of "a" using the control in "imm8".
+ Store the results in the low 64 bits of "dst", with the high 64 bits being copied from
+ from "a" to "dst".
+
+ dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
+ dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
+ dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
+ dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the high half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[71:64]
+ dst[15:8] := src2[71:64]
+ dst[23:16] := src1[79:72]
+ dst[31:24] := src2[79:72]
+ dst[39:32] := src1[87:80]
+ dst[47:40] := src2[87:80]
+ dst[55:48] := src1[95:88]
+ dst[63:56] := src2[95:88]
+ dst[71:64] := src1[103:96]
+ dst[79:72] := src2[103:96]
+ dst[87:80] := src1[111:104]
+ dst[95:88] := src2[111:104]
+ dst[103:96] := src1[119:112]
+ dst[111:104] := src2[119:112]
+ dst[119:112] := src1[127:120]
+ dst[127:120] := src2[127:120]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the high half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[79:64]
+ dst[31:16] := src2[79:64]
+ dst[47:32] := src1[95:80]
+ dst[63:48] := src2[95:80]
+ dst[79:64] := src1[111:96]
+ dst[95:80] := src2[111:96]
+ dst[111:96] := src1[127:112]
+ dst[127:112] := src2[127:112]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the high half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[95:64]
+ dst[63:32] := src2[95:64]
+ dst[95:64] := src1[127:96]
+ dst[127:96] := src2[127:96]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the high half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 8-bit integers from the low half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
+ dst[7:0] := src1[7:0]
+ dst[15:8] := src2[7:0]
+ dst[23:16] := src1[15:8]
+ dst[31:24] := src2[15:8]
+ dst[39:32] := src1[23:16]
+ dst[47:40] := src2[23:16]
+ dst[55:48] := src1[31:24]
+ dst[63:56] := src2[31:24]
+ dst[71:64] := src1[39:32]
+ dst[79:72] := src2[39:32]
+ dst[87:80] := src1[47:40]
+ dst[95:88] := src2[47:40]
+ dst[103:96] := src1[55:48]
+ dst[111:104] := src2[55:48]
+ dst[119:112] := src1[63:56]
+ dst[127:120] := src2[63:56]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 16-bit integers from the low half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
+ dst[15:0] := src1[15:0]
+ dst[31:16] := src2[15:0]
+ dst[47:32] := src1[31:16]
+ dst[63:48] := src2[31:16]
+ dst[79:64] := src1[47:32]
+ dst[95:80] := src2[47:32]
+ dst[111:96] := src1[63:48]
+ dst[127:112] := src2[63:48]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 32-bit integers from the low half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
+ dst[31:0] := src1[31:0]
+ dst[63:32] := src2[31:0]
+ dst[95:64] := src1[63:32]
+ dst[127:96] := src2[63:32]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave 64-bit integers from the low half of "a" and "b", and
+ store the results in "dst".
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the high half of "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[127:64]
+ dst[127:64] := src2[127:64]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Unpack and interleave double-precision (64-bit) floating-point elements from
+ the low half of "a" and "b", and store the results in "dst".
+
+ DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
+ dst[63:0] := src1[63:0]
+ dst[127:64] := src2[63:0]
+ RETURN dst[127:0]
+ }
+ dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+
+ Shuffle double-precision (64-bit) floating-point elements using the control in
+ "imm8", and store the results in "dst".
+
+ dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
+ dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
+
+
+ SSE2
+
+ Swizzle
+
+
+
+
+
+ Compute the square root of the lower double-precision (64-bit) floating-point
+ element in "b", store the result in the lower element of "dst", and copy the upper
+ element from "a" to the upper element of "dst".
+
+ dst[63:0] := SQRT(b[63:0])
+ dst[127:64] := a[127:64]
+
+
+ SSE2
+
+ Elementary Math Functions
+
+
+
+
+ Compute the square root of packed double-precision (64-bit) floating-point
+ elements in "a", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := SQRT(a[i+63:i])
+ ENDFOR
+
+
+ SSE2
+
+ Elementary Math Functions
+
+
+
+
+ Cast vector of type __m128d to type __m128. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ SSE2
+
+ Cast
+
+
+
+
+ Cast vector of type __m128d to type __m128i. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ SSE2
+
+ Cast
+
+
+
+
+ Cast vector of type __m128 to type __m128d. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ SSE2
+
+ Cast
+
+
+
+
+ Cast vector of type __m128 to type __m128i. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ SSE2
+
+ Cast
+
+
+
+
+ Cast vector of type __m128i to type __m128d. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ SSE2
+
+ Cast
+
+
+
+
+ Cast vector of type __m128i to type __m128. This intrinsic is only used for
+ compilation and does not generate any instructions, thus it has zero latency.
+ SSE2
+
+ Cast
+
+
+
+
+
+
+
+ Alternatively add and subtract packed single-precision (32-bit) floating-point
+ elements in "a" to/from packed elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF ((j & 1) == 0)
+ dst[i+31:i] := a[i+31:i] - b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i] + b[i+31:i]
+ FI
+ ENDFOR
+
+
+ SSE3
+
+ Arithmetic
+
+
+
+
+
+ Alternatively add and subtract packed double-precision (64-bit) floating-point
+ elements in "a" to/from packed elements in "b", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF ((j & 1) == 0)
+ dst[i+63:i] := a[i+63:i] - b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i] + b[i+63:i]
+ FI
+ ENDFOR
+
+
+ SSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of double-precision (64-bit) floating-point
+ elements in "a" and "b", and pack the results in "dst".
+
+ dst[63:0] := a[127:64] + a[63:0]
+ dst[127:64] := b[127:64] + b[63:0]
+
+
+ SSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of single-precision (32-bit) floating-point
+ elements in "a" and "b", and pack the results in "dst".
+
+ dst[31:0] := a[63:32] + a[31:0]
+ dst[63:32] := a[127:96] + a[95:64]
+ dst[95:64] := b[63:32] + b[31:0]
+ dst[127:96] := b[127:96] + b[95:64]
+
+
+ SSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of double-precision (64-bit)
+ floating-point elements in "a" and "b", and pack the results in "dst".
+
+ dst[63:0] := a[63:0] - a[127:64]
+ dst[127:64] := b[63:0] - b[127:64]
+
+
+ SSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of single-precision (32-bit) floating-point
+ elements in "a" and "b", and pack the results in "dst".
+
+ dst[31:0] := a[31:0] - a[63:32]
+ dst[63:32] := a[95:64] - a[127:96]
+ dst[95:64] := b[31:0] - b[63:32]
+ dst[127:96] := b[95:64] - b[127:96]
+
+
+ SSE3
+
+ Arithmetic
+
+
+
+
+ Load 128-bits of integer data from unaligned memory into "dst". This intrinsic
+ may perform better than "_mm_loadu_si128" when the data crosses a cache line boundary.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+
+
+ SSE3
+
+ Load
+
+
+
+
+ Load a double-precision (64-bit) floating-point element from memory into both
+ elements of "dst".
+
+ dst[63:0] := MEM[mem_addr+63:mem_addr]
+ dst[127:64] := MEM[mem_addr+63:mem_addr]
+
+
+ SSE3
+
+ Load
+
+
+
+
+ Duplicate the low double-precision (64-bit) floating-point element from "a",
+ and store the results in "dst".
+
+ dst[63:0] := a[63:0]
+ dst[127:64] := a[63:0]
+
+
+ SSE3
+
+ Move
+
+
+
+
+ Duplicate odd-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst".
+
+ dst[31:0] := a[63:32]
+ dst[63:32] := a[63:32]
+ dst[95:64] := a[127:96]
+ dst[127:96] := a[127:96]
+
+
+ SSE3
+
+ Move
+
+
+
+
+ Duplicate even-indexed single-precision (32-bit) floating-point elements from
+ "a", and store the results in "dst".
+
+ dst[31:0] := a[31:0]
+ dst[63:32] := a[31:0]
+ dst[95:64] := a[95:64]
+ dst[127:96] := a[95:64]
+
+
+ SSE3
+
+ Move
+
+
+
+
+
+
+
+
+ Blend packed double-precision (64-bit) floating-point elements from "a" and "b"
+ using control mask "imm8", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF imm8[j]
+ dst[i+63:i] := b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed single-precision (32-bit) floating-point elements from "a" and "b"
+ using control mask "imm8", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF imm8[j]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed double-precision (64-bit) floating-point elements from "a" and "b"
+ using "mask", and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ IF mask[i+63]
+ dst[i+63:i] := b[i+63:i]
+ ELSE
+ dst[i+63:i] := a[i+63:i]
+ FI
+ ENDFOR
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed single-precision (32-bit) floating-point elements from "a" and "b"
+ using "mask", and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ IF mask[i+31]
+ dst[i+31:i] := b[i+31:i]
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed 8-bit integers from "a" and "b" using "mask", and store the
+ results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ IF mask[i+7]
+ dst[i+7:i] := b[i+7:i]
+ ELSE
+ dst[i+7:i] := a[i+7:i]
+ FI
+ ENDFOR
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+
+ Blend packed 16-bit integers from "a" and "b" using control mask "imm8", and
+ store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ IF imm8[j]
+ dst[i+15:i] := b[i+15:i]
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+ Extract a single-precision (32-bit) floating-point element from "a", selected
+ with "imm8", and store the result in "dst".
+
+ dst[31:0] := (a[127:0] >> (imm8[1:0] * 32))[31:0]
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+ Extract an 8-bit integer from "a", selected with "imm8", and store the result
+ in the lower element of "dst".
+
+ dst[7:0] := (a[127:0] >> (imm8[3:0] * 8))[7:0]
+ dst[31:8] := 0
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+ Extract a 32-bit integer from "a", selected with "imm8", and store the result
+ in "dst".
+
+ dst[31:0] := (a[127:0] >> (imm8[1:0] * 32))[31:0]
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+ Extract a 64-bit integer from "a", selected with "imm8", and store the result
+ in "dst".
+
+ dst[63:0] := (a[127:0] >> (imm8[0] * 64))[63:0]
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "tmp", then insert a single-precision (32-bit) floating-point
+ element from "b" into "tmp" using the control in "imm8". Store "tmp" to "dst" using the
+ mask in "imm8" (elements are zeroed out when the corresponding bit is set).
+
+ tmp2[127:0] := a[127:0]
+ CASE (imm8[7:6]) OF
+ 0: tmp1[31:0] := b[31:0]
+ 1: tmp1[31:0] := b[63:32]
+ 2: tmp1[31:0] := b[95:64]
+ 3: tmp1[31:0] := b[127:96]
ESAC
- FI
- storeOffset := storeOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
- Down-converts and stores packed single-precision (32-bit) floating-point elements of "v1" into a byte/word/doubleword stream according to "conv" at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). "hint" indicates to the processor whether the data is non-temporal.
-
-DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PS_NONE:
- RETURN element[31:0]
- _MM_UPCONV_PS_FLOAT16:
- RETURN Convert_FP32_To_FP16(element[31:0])
- _MM_UPCONV_PS_UINT8:
- RETURN Truncate8(element[31:0])
- _MM_UPCONV_PS_SINT8:
- RETURN Saturate8(element[31:0])
- _MM_UPCONV_PS_UINT16:
- RETURN Truncate16(element[31:0])
- _MM_UPCONV_PS_SINT16:
- RETURN Saturate16(element[31:0])
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PS_NONE:
- RETURN 4
- _MM_UPCONV_PS_FLOAT16:
- RETURN 2
- _MM_UPCONV_PS_UINT8:
- RETURN 1
- _MM_UPCONV_PS_SINT8:
- RETURN 1
- _MM_UPCONV_PS_UINT16:
- RETURN 2
- _MM_UPCONV_PS_SINT16:
- RETURN 2
- ESAC
-}
-storeOffset := 0
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 15
- i := j*32
- tmp := DOWNCONVERT(v1[i+31:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 4: MEM[storeAddr] := tmp[31:0]
- 2: MEM[storeAddr] := tmp[15:0]
- 1: MEM[storeAddr] := tmp[7:0]
- ESAC
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset * downSize) % 64) == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
-
- Down-converts and stores packed single-precision (32-bit) floating-point elements of "v1" into a byte/word/doubleword stream according to "conv" at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). "hint" indicates to the processor whether the data is non-temporal. Elements are stored to memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PS_NONE:
- RETURN element[31:0]
- _MM_UPCONV_PS_FLOAT16:
- RETURN Convert_FP32_To_FP16(element[31:0])
- _MM_UPCONV_PS_UINT8:
- RETURN Truncate8(element[31:0])
- _MM_UPCONV_PS_SINT8:
- RETURN Saturate8(element[31:0])
- _MM_UPCONV_PS_UINT16:
- RETURN Truncate16(element[31:0])
- _MM_UPCONV_PS_SINT16:
- RETURN Saturate16(element[31:0])
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PS_NONE:
- RETURN 4
- _MM_UPCONV_PS_FLOAT16:
- RETURN 2
- _MM_UPCONV_PS_UINT8:
- RETURN 1
- _MM_UPCONV_PS_SINT8:
- RETURN 1
- _MM_UPCONV_PS_UINT16:
- RETURN 2
- _MM_UPCONV_PS_SINT16:
- RETURN 2
- ESAC
-}
-storeOffset := 0
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 15
- IF k[j]
- i := j*32
- tmp := DOWNCONVERT(v1[i+31:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 4: MEM[storeAddr] := tmp[31:0]
- 2: MEM[storeAddr] := tmp[15:0]
- 1: MEM[storeAddr] := tmp[7:0]
- ESAC
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset * downSize) % 64) == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
- Down-converts and stores packed double-precision (64-bit) floating-point elements of "v1" into a quadword stream according to "conv" at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)). "hint" indicates to the processor whether the data is non-temporal.
- DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PD_NONE:
- RETURN element[63:0]
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PD_NONE:
- RETURN 8
- ESAC
-}
-storeOffset := 0
-foundNext64BytesBoundary := false
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 7
- IF foundNext64BytesBoundary == false
- IF ((addr + (storeOffset + 1)*downSize) % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- tmp := DOWNCONVERT(v1[i+63:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 8: MEM[storeAddr] := tmp[63:0]
- ESAC
- FI
- storeOffset := storeOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
-
- Down-converts and stores packed double-precision (64-bit) floating-point elements of "v1" into a quadword stream according to "conv" at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)). "hint" indicates to the processor whether the data is non-temporal. Elements are stored to memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PD_NONE:
- RETURN element[63:0]
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PD_NONE:
- RETURN 8
- ESAC
-}
-storeOffset := 0
-foundNext64BytesBoundary := false
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt-64
-FOR j := 0 to 7
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF ((addr + (storeOffset + 1)*downSize) % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- tmp := DOWNCONVERT(v1[i+63:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 8: MEM[storeAddr] := tmp[63:0]
+ CASE (imm8[5:4]) OF
+ 0: tmp2[31:0] := tmp1[31:0]
+ 1: tmp2[63:32] := tmp1[31:0]
+ 2: tmp2[95:64] := tmp1[31:0]
+ 3: tmp2[127:96] := tmp1[31:0]
ESAC
- FI
- storeOffset := storeOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
- Down-converts and stores packed double-precision (64-bit) floating-point elements of "v1" into a quadword stream according to "conv" at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). "hint" indicates to the processor whether the data is non-temporal.
-
-DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PD_NONE:
- RETURN element[63:0]
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PD_NONE:
- RETURN 8
- ESAC
-}
-storeOffset := 0
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 7
- i := j*63
- tmp := DOWNCONVERT(v1[i+63:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 8: MEM[storeAddr] := tmp[63:0]
- ESAC
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset * downSize) % 64) == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
-
- Down-converts and stores packed double-precision (64-bit) floating-point elements of "v1" into a quadword stream according to "conv" at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). "hint" indicates to the processor whether the data is non-temporal. Elements are stored to memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-DEFINE DOWNCONVERT(element, convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PD_NONE:
- RETURN element[63:0]
- ESAC
-}
-DEFINE DOWNCONVERTSIZE(convertTo) {
- CASE convertTo OF
- _MM_UPCONV_PD_NONE:
- RETURN 8
- ESAC
-}
-storeOffset := 0
-downSize := DOWNCONVERTSIZE(conv)
-addr := mt
-FOR j := 0 to 7
- IF k[j]
- i := j*63
- tmp := DOWNCONVERT(v1[i+63:i], conv)
- storeAddr := addr + storeOffset * downSize
- CASE downSize OF
- 8: MEM[storeAddr] := tmp[63:0]
- ESAC
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset * downSize) % 64) == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
- Stores 8 packed 64-bit integer elements located in "a" and stores them in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale".
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
- Stores 8 packed 64-bit integer elements located in "a" and stores them in memory locations starting at location "base_addr" at packed 32-bit integer indices stored in "vindex" scaled by "scale" using writemask "k" (elements whose corresponding mask bit is not set are not written to memory).
-
-FOR j := 0 to 7
- i := j*64
- m := j*32
- IF k[j]
- addr := base_addr + SignExtend64(vindex[m+31:m]) * ZeroExtend64(scale) * 8
- MEM[addr+63:addr] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
- Loads the high-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt-64 and expands them into packed 32-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src".
- dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-addr := mt-64
-FOR j := 0 to 15
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*4 % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- tmp := MEM[addr + loadOffset*4]
- dst[i+31:i] := tmp[i+31:i]
- FI
- loadOffset := loadOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
- Loads the high-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt-64 and expands them into packed 32-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src". Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-addr := mt-64
-FOR j := 0 to 15
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*4 % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- tmp := MEM[addr + loadOffset*4]
- dst[i+31:i] := tmp[i+31:i]
- FI
- loadOffset := loadOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
- Loads the low-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt and expanded into packed 32-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src".
-
-dst[511:0] := src[511:0]
-loadOffset := 0
-addr := mt
-FOR j := 0 to 15
- i := j*32
- tmp := MEM[addr + loadOffset*4]
- dst[i+31:i] := tmp[i+31:i]
- loadOffset := loadOffset + 1
- IF (mt + loadOffset * 4) % 64 == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
- Loads the low-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt and expands them into packed 32-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src". Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-dst[511:0] := src[511:0]
-loadOffset := 0
-addr := mt
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- tmp := MEM[addr + loadOffset*4]
- dst[i+31:i] := tmp[i+31:i]
- loadOffset := loadOffset + 1
- IF (mt + loadOffset * 4) % 64 == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
- Loads the high-64-byte-aligned portion of the quadword stream starting at element-aligned address mt-64 and expands them into packed 64-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src".
- dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-addr := mt-64
-FOR j := 0 to 7
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*8) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- tmp := MEM[addr + loadOffset*8]
- dst[i+63:i] := tmp[i+63:i]
- FI
- loadOffset := loadOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
- Loads the high-64-byte-aligned portion of the quadword stream starting at element-aligned address mt-64 and expands them into packed 64-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-addr := mt-64
-FOR j := 0 to 7
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*8) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- tmp := MEM[addr + loadOffset*8]
- dst[i+63:i] := tmp[i+63:i]
- FI
- loadOffset := loadOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
- Loads the low-64-byte-aligned portion of the quadword stream starting at element-aligned address mt and expands them into packed 64-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted quad that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src".
-
-dst[511:0] := src[511:0]
-loadOffset := 0
-addr := mt
-FOR j := 0 to 7
- i := j*64
- tmp := MEM[addr + loadOffset*8]
- dst[i+63:i] := tmp[i+63:i]
- loadOffset := loadOffset + 1
- IF (addr + loadOffset*8 % 64) == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
- Loads the low-64-byte-aligned portion of the quadword stream starting at element-aligned address mt and expands them into packed 64-bit integers in "dst". The initial values of "dst" are copied from "src". Only those converted quad that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-dst[511:0] := src[511:0]
-loadOffset := 0
-addr := mt
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp := MEM[addr + loadOffset*8]
- dst[i+63:i] := tmp[i+63:i]
- loadOffset := loadOffset + 1
- IF (addr + loadOffset*8 % 64) == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
- Loads the high-64-byte-aligned portion of the byte/word/doubleword stream starting at element-aligned address mt-64 and expands them into packed single-precision (32-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src".
- dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-addr := mt-64
-FOR j := 0 to 15
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*4 % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- tmp := MEM[addr + loadOffset*4]
- dst[i+31:i] := tmp[i+31:i]
- FI
- loadOffset := loadOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
- Loads the high-64-byte-aligned portion of the doubleword stream starting at element-aligned address mt-64 and expands them into packed single-precision (32-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-addr := mt-64
-FOR j := 0 to 15
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*4 % 64) == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*32
- tmp := MEM[addr + loadOffset*4]
- dst[i+31:i] := tmp[i+31:i]
- FI
- loadOffset := loadOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
- Loads the low-64-byte-aligned portion of the doubleword stream starting at element-aligned address mt and expanded into packed single-precision (32-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src".
-
-dst[511:0] := src[511:0]
-loadOffset := 0
-addr := mt
-FOR j := 0 to 15
- i := j*32
- tmp := MEM[addr + loadOffset*4]
- dst[i+31:i] := tmp[i+31:i]
- loadOffset := loadOffset + 1
- IF (mt + loadOffset * 4) % 64 == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
- Loads the low-64-byte-aligned portion of the doubleword stream starting at element-aligned address mt and expanded into packed single-precision (32-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted doublewords that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those doublewords are taken from "src". Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-dst[511:0] := src[511:0]
-loadOffset := 0
-addr := mt
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- tmp := MEM[addr + loadOffset*4]
- dst[i+31:i] := tmp[i+31:i]
- loadOffset := loadOffset + 1
- IF (mt + loadOffset * 4) % 64 == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
- Loads the high-64-byte-aligned portion of the quadword stream starting at element-aligned address mt-64 and expands them into packed double-precision (64-bit) floating-point values in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src".
- dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-addr := mt-64
-FOR j := 0 to 7
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*8) % 64 == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- tmp := MEM[addr + loadOffset*8]
- dst[i+63:i] := tmp[i+63:i]
- FI
- loadOffset := loadOffset + 1
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
- Loads the high-64-byte-aligned portion of the quadword stream starting at element-aligned address mt-64 and expands them into packed double-precision (64-bit) floating-point values in "dst". The initial values of "dst" are copied from "src". Only those converted quadwords that occur at or after the first 64-byte-aligned address following (mt-64) are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
- dst[511:0] := src[511:0]
-loadOffset := 0
-foundNext64BytesBoundary := false
-addr := mt-64
-FOR j := 0 to 7
- IF k[j]
- IF foundNext64BytesBoundary == false
- IF (addr + (loadOffset + 1)*8) % 64 == 0
- foundNext64BytesBoundary := true
- FI
- ELSE
- i := j*64
- tmp := MEM[addr + loadOffset*8]
- dst[i+63:i] := tmp[i+63:i]
- FI
- loadOffset := loadOffset + 1
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
- Loads the low-64-byte-aligned portion of the quadword stream starting at element-aligned address mt and expands them into packed double-precision (64-bit) floating-point elements in "dst". The initial values of "dst" are copied from "src". Only those converted quad that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src".
-
-dst[511:0] := src[511:0]
-loadOffset := 0
-addr := mt
-FOR j := 0 to 7
- i := j*64
- tmp := MEM[addr + loadOffset*8]
- dst[i+63:i] := tmp[i+63:i]
- loadOffset := loadOffset + 1
- IF ((addr + 8*loadOffset) % 64) == 0
- BREAK
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
- Loads the low-64-byte-aligned portion of the quadword stream starting at element-aligned address mt and expands them into packed double-precision (64-bit) floating-point values in "dst". The initial values of "dst" are copied from "src". Only those converted quad that occur before first 64-byte-aligned address following "mt" are loaded. Elements in the resulting vector that do not map to those quadwords are taken from "src". Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-dst[511:0] := src[511:0]
-loadOffset := 0
-addr := mt
-FOR j := 0 to 7
- i := j*64
- IF k[j]
- tmp := MEM[addr + loadOffset*8]
- dst[i+63:i] := tmp[i+63:i]
- loadOffset := loadOffset + 1
- IF ((addr + 8*loadOffset) % 64) == 0
- BREAK
- FI
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
- Stores packed 32-bit integer elements of "v1" into a doubleword stream at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)).
-
-storeOffset := 0
-foundNext64BytesBoundary := 0
-addr := mt-64
-FOR j := 0 to 15
- IF foundNext64BytesBoundary == 0
- IF ((addr + (storeOffset + 1)*4) % 64) == 0
- foundNext64BytesBoundary := 1
- FI
- ELSE
- i := j*32
- MEM[addr + storeOffset*4] := v1[i+31:i]
- FI
- storeOffset := storeOffset + 1
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
- Stores packed 32-bit integer elements of "v1" into a doubleword stream at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)). Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-storeOffset := 0
-foundNext64BytesBoundary := 0
-addr := mt-64
-FOR j := 0 to 15
- IF k[j]
- IF foundNext64BytesBoundary == 0
- IF ((addr + (storeOffset + 1)*4) % 64) == 0
- foundNext64BytesBoundary := 1
- FI
- ELSE
- i := j*32
- MEM[addr + storeOffset*4] := v1[i+31:i]
- FI
- storeOffset := storeOffset + 1
- FI
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
- Stores packed 32-bit integer elements of "v1" into a doubleword stream at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt").
-
-storeOffset := 0
-addr := mt
-FOR j := 0 to 15
- i := j*32
- MEM[addr + storeOffset*4] := v1[i+31:i]
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset*4) % 64) == 0
- BREAK
- FI
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
- Stores packed 32-bit integer elements of "v1" into a doubleword stream at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-storeOffset := 0
-addr := mt
-FOR j := 0 to 15
- IF k[j]
- i := j*32
- MEM[addr + storeOffset*4] := v1[i+31:i]
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset*4) % 64) == 0
- BREAK
- FI
- FI
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
- Stores packed 64-bit integer elements of "v1" into a quadword stream at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)).
-
-storeOffset := 0
-foundNext64BytesBoundary := 0
-addr := mt-64
-FOR j := 0 to 7
- IF foundNext64BytesBoundary == 0
- IF ((addr + (storeOffset + 1)*8) % 64) == 0
- foundNext64BytesBoundary := 1
- FI
- ELSE
- i := j*64
- MEM[addr + storeOffset*8] := v1[i+63:i]
- FI
- storeOffset := storeOffset + 1
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
- Stores packed 64-bit integer elements of "v1" into a quadword stream at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)). Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-storeOffset := 0
-foundNext64BytesBoundary := 0
-addr := mt-64
-FOR j := 0 to 7
- IF k[j]
- IF foundNext64BytesBoundary == 0
- IF ((addr + (storeOffset + 1)*8) % 64) == 0
- foundNext64BytesBoundary := 1
- FI
- ELSE
- i := j*64
- MEM[addr + storeOffset*8] := v1[i+63:i]
- FI
- storeOffset := storeOffset + 1
- FI
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
- Stores packed 64-bit integer elements of "v1" into a quadword stream at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt").
-
-storeOffset := 0
-addr := mt
-FOR j := 0 to 7
- i := j*64
- MEM[addr + storeOffset*8] := v1[i+63:i]
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset*8) % 64) == 0
- BREAK
- FI
-ENDFOR
-
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
- Stores packed 64-bit integer elements of "v1" into a quadword stream at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-storeOffset := 0
-addr := mt
-FOR j := 0 to 7
- IF k[j]
- i := j*64
- MEM[addr + storeOffset*8] := v1[i+63:i]
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset*8) % 64) == 0
- BREAK
- FI
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
- Stores packed single-precision (32-bit) floating-point elements of "v1" into a doubleword stream at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)).
-
-storeOffset := 0
-foundNext64BytesBoundary := 0
-addr := mt-64
-FOR j := 0 to 15
- IF foundNext64BytesBoundary == 0
- IF ((addr + (storeOffset + 1)*4) % 64) == 0
- foundNext64BytesBoundary := 1
- FI
- ELSE
- i := j*32
- MEM[addr + storeOffset*4] := v1[i+31:i]
- FI
- storeOffset := storeOffset + 1
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
- Stores packed single-precision (32-bit) floating-point elements of "v1" into a doubleword stream at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)). Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-storeOffset := 0
-foundNext64BytesBoundary := 0
-addr := mt-64
-FOR j := 0 to 15
- IF k[j]
- IF foundNext64BytesBoundary == 0
- IF ((addr + (storeOffset + 1)*4) % 64) == 0
- foundNext64BytesBoundary := 1
- FI
- ELSE
- i := j*32
- MEM[addr + storeOffset*4] := v1[i+31:i]
- FI
- storeOffset := storeOffset + 1
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
- Stores packed single-precision (32-bit) floating-point elements of "v1" into a doubleword stream at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt").
-
-storeOffset := 0
-addr := mt
-FOR j := 0 to 15
- i := j*32
- MEM[addr + storeOffset*4] := v1[i+31:i]
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset*4) % 64) == 0
- BREAK
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
- Stores packed single-precision (32-bit) floating-point elements of "v1" into a doubleword stream at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-storeOffset := 0
-addr := mt
-FOR j := 0 to 15
- IF k[j]
- i := j*32
- MEM[addr + storeOffset*4] := v1[i+31:i]
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset*4) % 64) == 0
- BREAK
- FI
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
- Stores packed double-precision (64-bit) floating-point elements of "v1" into a quadword stream at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)).
-
-storeOffset := 0
-foundNext64BytesBoundary := 0
-addr := mt-64
-FOR j := 0 to 7
- IF foundNext64BytesBoundary == 0
- IF ((addr + (storeOffset + 1)*8) % 64) == 0
- foundNext64BytesBoundary := 1
- FI
- ELSE
- i := j*64
- MEM[addr + storeOffset*4] := v1[i+63:i]
- FI
- storeOffset := storeOffset + 1
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
- Stores packed double-precision (64-bit) floating-point elements of "v1" into a quadword stream at a logically mapped starting address (mt-64), storing the high-64-byte elements of that stream (those elements of the stream that map at or after the first 64-byte-aligned address following (m5-64)). Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-storeOffset := 0
-foundNext64BytesBoundary := 0
-addr := mt-64
-FOR j := 0 to 7
- IF k[j]
- IF foundNext64BytesBoundary == 0
- IF ((addr + (storeOffset + 1)*8) % 64) == 0
- foundNext64BytesBoundary := 1
- FI
- ELSE
- i := j*64
- MEM[addr + storeOffset*4] := v1[i+63:i]
- FI
- storeOffset := storeOffset + 1
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
- Stores packed double-precision (64-bit) floating-point elements of "v1" into a quadword stream at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt").
-
-storeOffset := 0
-addr := mt
-FOR j := 0 to 7
- i := j*64
- MEM[addr + storeOffset*8] := v1[i+63:i]
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset*8) % 64) == 0
- BREAK
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
- Stores packed double-precision (64-bit) floating-point elements of "v1" into a quadword stream at a logically mapped starting address "mt", storing the low-64-byte elements of that stream (those elements of the stream that map before the first 64-byte-aligned address following "mt"). Elements are loaded from memory according to element selector "k" (elements are skipped when the corresponding mask bit is not set).
-
-storeOffset := 0
-addr := mt
-FOR j := 0 to 7
- IF k[j]
- i := j*64
- MEM[addr + storeOffset*8] := v1[i+63:i]
- storeOffset := storeOffset + 1
- IF ((addr + storeOffset*8) % 64) == 0
- BREAK
- FI
- FI
-ENDFOR
-
-
-
-
-
- KNCNI
- Bit Manipulation
-
-
- Counts the number of set bits in 32-bit unsigned integer "r1", returning the results in "dst".
- dst[31:0] := PopCount(r1[31:0])
-
-
-
-
-
- KNCNI
- Bit Manipulation
-
-
- Counts the number of set bits in 64-bit unsigned integer "r1", returning the results in "dst".
- dst[63:0] := PopCount(r1[63:0])
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Inserts the low byte of mask "k2" into the high byte of "dst", and copies the low byte of "k1" to the low byte of "dst".
-
-dst[7:0] := k1[7:0]
-dst[15:8] := k2[7:0]
-
-
-
-
-
- Floating Point
- Integer
- KNCNI
- Convert
-
-
-
- Performs an element-by-element conversion of elements in packed double-precision (64-bit) floating-point vector "v2" to 32-bit integer elements, storing them in the lower half of "dst". The elements in the upper half of "dst" are set to 0.
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- k := j*32
- dst[k+31:k] := Convert_FP64_To_Int32(v2[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- KNCNI
- Convert
-
-
-
-
-
- Performs an element-by-element conversion of elements in packed double-precision (64-bit) floating-point vector "v2" to 32-bit integer elements, storing them in the lower half of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). The elements in the upper half of "dst" are set to 0.
- [round_note]
-
-FOR j := 0 to 7
- i := j*64
- l := j*32
- IF k[j]
- dst[l+31:l] := Convert_FP64_To_Int32(v2[i+63:i])
- ELSE
- dst[l+31:l] := src[l+31:l]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- Integer
- KNCNI
- Convert
-
-
-
-
- Performs element-by-element conversion of packed 32-bit integer elements in "v2" to packed single-precision (32-bit) floating-point elements and performing an optional exponent adjust using "expadj", storing the results in "dst".
- [round_note]
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := Int32ToFloat32(v2[i+31:i])
- CASE expadj OF
- _MM_EXPADJ_NONE: dst[i+31:i] := dst[i+31:i] * (2 << 0)
- _MM_EXPADJ_4: dst[i+31:i] := dst[i+31:i] * (2 << 4)
- _MM_EXPADJ_5: dst[i+31:i] := dst[i+31:i] * (2 << 5)
- _MM_EXPADJ_8: dst[i+31:i] := dst[i+31:i] * (2 << 8)
- _MM_EXPADJ_16: dst[i+31:i] := dst[i+31:i] * (2 << 16)
- _MM_EXPADJ_24: dst[i+31:i] := dst[i+31:i] * (2 << 24)
- _MM_EXPADJ_31: dst[i+31:i] := dst[i+31:i] * (2 << 31)
- _MM_EXPADJ_32: dst[i+31:i] := dst[i+31:i] * (2 << 32)
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Elementary Math Functions
-
-
- Compute the base-2 logarithm of packed single-precision (32-bit) floating-point elements in "a" with absolute error of 2^(-23) and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := LOG(a[i+31:i]) / LOG(2.0)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Elementary Math Functions
-
-
-
-
- Compute the base-2 logarithm of packed single-precision (32-bit) floating-point elements in "a" with absolute error of 2^(-23) and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := LOG(a[i+31:i]) / LOG(2.0)
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
- Multiply packed 32-bit integer elements in "a" and "b", add the intermediate result to packed elements in "c" and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed 32-bit integer elements in "a" and "b", add the intermediate result to packed elements in "c" and store the results in "dst" using writemask "k" (elements are copied from "a" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed 32-bit integer elements in "a" and "b", add the intermediate result to packed elements in "c" and store the results in "dst" using writemask "k" (elements are copied from "c" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) + c[i+31:i]
- ELSE
- dst[i+31:i] := c[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
- Multiply packed 32-bit integer elements in each 4-element set of "a" and by element 1 of the corresponding 4-element set from "b", add the intermediate result to element 0 of the corresponding 4-element set from "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- base := (j & ~0x3) * 32
- scale[31:0] := b[base+63:base+32]
- bias[31:0] := b[base+31:base]
- dst[i+31:i] := (a[i+31:i] * scale[31:0]) + bias[31:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed 32-bit integer elements in each 4-element set of "a" and by element 1 of the corresponding 4-element set from "b", add the intermediate result to element 0 of the corresponding 4-element set from "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- base := (j & ~0x3) * 32
- scale[31:0] := b[base+63:base+32]
- bias[31:0] := b[base+31:base]
- dst[i+31:i] := (a[i+31:i] * scale[31:0]) + bias[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in each 4-element set of "a" and by element 1 of the corresponding 4-element set from "b", add the intermediate result to element 0 of the corresponding 4-element set from "b", and store the results in "dst".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- base := (j & ~0x3) * 32
- scale[31:0] := b[base+63:base+32]
- bias[31:0] := b[base+31:base]
- dst[i+31:i] := (a[i+31:i] * scale[31:0]) + bias[31:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in each 4-element set of "a" and by element 1 of the corresponding 4-element set from "b", add the intermediate result to element 0 of the corresponding 4-element set from "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- base := (j & ~0x3) * 32
- scale[31:0] := b[base+63:base+32]
- bias[31:0] := b[base+31:base]
- dst[i+31:i] := (a[i+31:i] * scale[31:0]) + bias[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
- Determines the maximum of the absolute elements of each pair of corresponding elements of packed single-precision (32-bit) floating-point elements in "a" and "b", storing the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := FpMax(ABS(a[i+31:i]), ABS(b[i+31:i]))
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
-
-
- Determines the maximum of the absolute elements of each pair of corresponding elements of packed single-precision (32-bit) floating-point elements in "a" and "b", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := FpMax(ABS(a[i+31:i]), ABS(b[i+31:i]))
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
- Determines the maximum of each pair of corresponding elements in packed single-precision (32-bit) floating-point elements in "a" and "b", storing the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := FpMax(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
-
-
- Determines the maximum of each pair of corresponding elements of packed single-precision (32-bit) floating-point elements in "a" and "b", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := FpMax(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
- Determines the maximum of the absolute elements of each pair of corresponding elements of packed single-precision (32-bit) floating-point elements in "a" and "b", storing the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := FpMax(ABS(a[i+31:i]), ABS(b[i+31:i]))
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
-
-
- Determines the maximum of the absolute elements of each pair of corresponding elements of packed single-precision (32-bit) floating-point elements in "a" and "b", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := FpMax(ABS(a[i+31:i]), ABS(b[i+31:i]))
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
- Determines the maximum of each pair of corresponding elements in packed double-precision (64-bit) floating-point elements in "a" and "b", storing the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := FpMax(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
-
-
- Determines the maximum of each pair of corresponding elements of packed double-precision (64-bit) floating-point elements in "a" and "b", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := FpMax(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
- Determines the minimum of each pair of corresponding elements in packed single-precision (32-bit) floating-point elements in "a" and "b", storing the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := FpMin(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
-
-
- Determines the maximum of each pair of corresponding elements of packed single-precision (32-bit) floating-point elements in "a" and "b", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := FpMin(a[i+31:i], b[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
- Determines the minimum of each pair of corresponding elements in packed double-precision (64-bit) floating-point elements in "a" and "b", storing the results in "dst".
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := FpMin(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
-
-
- Determines the maximum of each pair of corresponding elements of packed double-precision (64-bit) floating-point elements in "a" and "b", storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := FpMin(a[i+63:i], b[i+63:i])
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
- Performs element-by-element multiplication between packed 32-bit integer elements in "a" and "b" and stores the high 32 bits of each result into "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) >> 32
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
- Performs element-by-element multiplication between packed 32-bit integer elements in "a" and "b" and stores the high 32 bits of each result into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) >> 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
- Performs element-by-element multiplication between packed unsigned 32-bit integer elements in "a" and "b" and stores the high 32 bits of each result into "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) >> 32
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Arithmetic
-
-
-
-
-
- Performs element-by-element multiplication between packed unsigned 32-bit integer elements in "a" and "b" and stores the high 32 bits of each result into "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (a[i+31:i] * b[i+31:i]) >> 32
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Swizzle
-
-
-
- Permutes 128-bit blocks of the packed 32-bit integer vector "a" using constant "imm8". The results are stored in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE control[1:0] OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-FOR j := 0 to 3
- i := j*128
- n := j*2
- dst[i+127:i] := SELECT4(a[511:0], imm8[n+1:n])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Swizzle
-
-
-
-
-
- Permutes 128-bit blocks of the packed 32-bit integer vector "a" using constant "imm8". The results are stored in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE control[1:0] OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-tmp[511:0] := 0
-FOR j := 0 to 3
- i := j*128
- n := j*2
- tmp[i+127:i] := SELECT4(a[511:0], imm8[n+1:n])
-ENDFOR
-FOR j := 0 to 15
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Elementary Math Functions
-
-
- Approximates the reciprocals of packed single-precision (32-bit) floating-point elements in "a" to 23 bits of precision, storing the results in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := (1.0 / a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Elementary Math Functions
-
-
-
-
- Approximates the reciprocals of packed single-precision (32-bit) floating-point elements in "a" to 23 bits of precision, storing the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := (1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Convert
-
-
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" to the nearest integer value using "expadj" and in the direction of "rounding", and store the results as packed single-precision floating-point elements in "dst".
- [round_note]
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ROUND(a[i+31:i])
- CASE expadj OF
- _MM_EXPADJ_NONE: dst[i+31:i] := dst[i+31:i] * (2 << 0)
- _MM_EXPADJ_4: dst[i+31:i] := dst[i+31:i] * (2 << 4)
- _MM_EXPADJ_5: dst[i+31:i] := dst[i+31:i] * (2 << 5)
- _MM_EXPADJ_8: dst[i+31:i] := dst[i+31:i] * (2 << 8)
- _MM_EXPADJ_16: dst[i+31:i] := dst[i+31:i] * (2 << 16)
- _MM_EXPADJ_24: dst[i+31:i] := dst[i+31:i] * (2 << 24)
- _MM_EXPADJ_31: dst[i+31:i] := dst[i+31:i] * (2 << 31)
- _MM_EXPADJ_32: dst[i+31:i] := dst[i+31:i] * (2 << 32)
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Convert
-
-
-
-
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" to the nearest integer value using "expadj" and in the direction of "rounding", and store the results as packed single-precision floating-point elements in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ROUND(a[i+31:i])
- CASE expadj OF
- _MM_EXPADJ_NONE: dst[i+31:i] := dst[i+31:i] * (2 << 0)
- _MM_EXPADJ_4: dst[i+31:i] := dst[i+31:i] * (2 << 4)
- _MM_EXPADJ_5: dst[i+31:i] := dst[i+31:i] * (2 << 5)
- _MM_EXPADJ_8: dst[i+31:i] := dst[i+31:i] * (2 << 8)
- _MM_EXPADJ_16: dst[i+31:i] := dst[i+31:i] * (2 << 16)
- _MM_EXPADJ_24: dst[i+31:i] := dst[i+31:i] * (2 << 24)
- _MM_EXPADJ_31: dst[i+31:i] := dst[i+31:i] * (2 << 31)
- _MM_EXPADJ_32: dst[i+31:i] := dst[i+31:i] * (2 << 32)
- ESAC
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Miscellaneous
-
-
-
-
- Performs element-by-element rounding of packed single-precision (32-bit) floating-point elements in "a" using "expadj" and in the direction of "rounding" and stores results in "dst".
- [round_note]
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := ROUND(a[i+31:i])
- CASE expadj OF
- _MM_EXPADJ_NONE: dst[i+31:i] := dst[i+31:i] * (2 << 0)
- _MM_EXPADJ_4: dst[i+31:i] := dst[i+31:i] * (2 << 4)
- _MM_EXPADJ_5: dst[i+31:i] := dst[i+31:i] * (2 << 5)
- _MM_EXPADJ_8: dst[i+31:i] := dst[i+31:i] * (2 << 8)
- _MM_EXPADJ_16: dst[i+31:i] := dst[i+31:i] * (2 << 16)
- _MM_EXPADJ_24: dst[i+31:i] := dst[i+31:i] * (2 << 24)
- _MM_EXPADJ_31: dst[i+31:i] := dst[i+31:i] * (2 << 31)
- _MM_EXPADJ_32: dst[i+31:i] := dst[i+31:i] * (2 << 32)
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Miscellaneous
-
-
-
-
-
-
- Performs element-by-element rounding of packed single-precision (32-bit) floating-point elements in "a" using "expadj" and in the direction of "rounding" and stores results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := ROUND(a[i+31:i])
- CASE expadj OF
- _MM_EXPADJ_NONE: dst[i+31:i] := dst[i+31:i] * (2 << 0)
- _MM_EXPADJ_4: dst[i+31:i] := dst[i+31:i] * (2 << 4)
- _MM_EXPADJ_5: dst[i+31:i] := dst[i+31:i] * (2 << 5)
- _MM_EXPADJ_8: dst[i+31:i] := dst[i+31:i] * (2 << 8)
- _MM_EXPADJ_16: dst[i+31:i] := dst[i+31:i] * (2 << 16)
- _MM_EXPADJ_24: dst[i+31:i] := dst[i+31:i] * (2 << 24)
- _MM_EXPADJ_31: dst[i+31:i] := dst[i+31:i] * (2 << 31)
- _MM_EXPADJ_32: dst[i+31:i] := dst[i+31:i] * (2 << 32)
- ESAC
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Miscellaneous
-
-
-
-
- Performs element-by-element rounding of packed double-precision (64-bit) floating-point elements in "a" using "expadj" and in the direction of "rounding" and stores results in "dst".
- [round_note]
- FOR j := 0 to 7
- i := j*64
- dst[i+63:i] := ROUND(a[i+63:i])
- CASE expadj OF
- _MM_EXPADJ_NONE: dst[i+31:i] := dst[i+31:i] * (2 << 0)
- _MM_EXPADJ_4: dst[i+31:i] := dst[i+31:i] * (2 << 4)
- _MM_EXPADJ_5: dst[i+31:i] := dst[i+31:i] * (2 << 5)
- _MM_EXPADJ_8: dst[i+31:i] := dst[i+31:i] * (2 << 8)
- _MM_EXPADJ_16: dst[i+31:i] := dst[i+31:i] * (2 << 16)
- _MM_EXPADJ_24: dst[i+31:i] := dst[i+31:i] * (2 << 24)
- _MM_EXPADJ_31: dst[i+31:i] := dst[i+31:i] * (2 << 31)
- _MM_EXPADJ_32: dst[i+31:i] := dst[i+31:i] * (2 << 32)
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Miscellaneous
-
-
-
-
-
-
- Performs element-by-element rounding of packed double-precision (64-bit) floating-point elements in "a" using "expadj" and in the direction of "rounding" and stores results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- [round_note]
- FOR j := 0 to 7
- i := j*64
- IF k[j]
- dst[i+63:i] := ROUND(a[i+63:i])
- CASE expadj OF
- _MM_EXPADJ_NONE: dst[i+31:i] := dst[i+31:i] * (2 << 0)
- _MM_EXPADJ_4: dst[i+31:i] := dst[i+31:i] * (2 << 4)
- _MM_EXPADJ_5: dst[i+31:i] := dst[i+31:i] * (2 << 5)
- _MM_EXPADJ_8: dst[i+31:i] := dst[i+31:i] * (2 << 8)
- _MM_EXPADJ_16: dst[i+31:i] := dst[i+31:i] * (2 << 16)
- _MM_EXPADJ_24: dst[i+31:i] := dst[i+31:i] * (2 << 24)
- _MM_EXPADJ_31: dst[i+31:i] := dst[i+31:i] * (2 << 31)
- _MM_EXPADJ_32: dst[i+31:i] := dst[i+31:i] * (2 << 32)
- ESAC
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Elementary Math Functions
-
-
- Calculates the reciprocal square root of packed single-precision (32-bit) floating-point elements in "a" to 23 bits of accuracy and stores the result in "dst".
- FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := Sqrt(1.0 / a[i+31:i])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Elementary Math Functions
-
-
-
-
- Calculates the reciprocal square root of packed single-precision (32-bit) floating-point elements in "a" to 23 bits of accuracy and stores the result in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
- FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := Sqrt(1.0 / a[i+31:i])
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
- Scales each single-precision (32-bit) floating-point element in "a" by multiplying it by 2**exponent, where the exponent is the corresponding 32-bit integer element in "b", storing results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] * POW(2.0, FP32(b[i+31:i]))
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
- Scales each single-precision (32-bit) floating-point element in "a" by multiplying it by 2**exponent, where the exponent is the corresponding 32-bit integer element in "b", storing results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] * POW(2.0, FP32(b[i+31:i]))
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
- Scales each single-precision (32-bit) floating-point element in "a" by multiplying it by 2**exponent, where the exponent is the corresponding 32-bit integer element in "b", storing results in "dst". Intermediate elements are rounded using "rounding".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- dst[i+31:i] := a[i+31:i] * POW(2.0,FP32(b[i+31:i]))
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
-
- Scales each single-precision (32-bit) floating-point element in "a" by multiplying it by 2**exp, where the exp is the corresponding 32-bit integer element in "b", storing results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). Results are rounded using constant "rounding".
- [round_note]
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- dst[i+31:i] := a[i+31:i] * POW(2.0, FP32(b[i+31:i]))
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
- Determines the minimum element of the packed single-precision (32-bit) floating-point elements stored in "a" and stores the result in "dst".
- min := a[31:0]
-FOR j := 1 to 15
- i := j*32
- dst := FpMin(min, a[i+31:i])
-ENDFOR
-dst := min
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
- Determines the minimum element of the packed single-precision (32-bit) floating-point elements stored in "a" and stores the result in "dst" using writemask "k" (elements are ignored when the corresponding mask bit is not set).
- min := a[31:0]
-FOR j := 1 to 15
- i := j*32
- IF k[j]
- CONTINUE
- ELSE
- dst := FpMin(min, a[i+31:i])
- FI
-ENDFOR
-dst := min
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
- Determines the minimum element of the packed double-precision (64-bit) floating-point elements stored in "a" and stores the result in "dst".
- min := a[63:0]
-FOR j := 1 to 7
- i := j*64
- dst := FpMin(min, a[i+63:i])
-ENDFOR
-dst := min
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
- Determines the minimum element of the packed double-precision (64-bit) floating-point elements stored in "a" and stores the result in "dst". Bitmask "k" is used to exclude certain elements (elements are ignored when the corresponding mask bit is not set).
- min := a[63:0]
-FOR j := 1 to 7
- i := j*64
- IF k[j]
- CONTINUE
- ELSE
- dst := FpMin(min, a[i+63:i])
- FI
-ENDFOR
-dst := min
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
- Determines the maximum element of the packed single-precision (32-bit) floating-point elements stored in "a" and stores the result in "dst".
- max := a[31:0]
-FOR j := 1 to 15
- i := j*32
- dst := FpMax(max, a[i+31:i])
-ENDFOR
-dst := max
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
- Determines the maximum element of the packed single-precision (32-bit) floating-point elements stored in "a" and stores the result in "dst". Bitmask "k" is used to exclude certain elements (elements are ignored when the corresponding mask bit is not set).
- max := a[31:0]
-FOR j := 1 to 15
- i := j*32
- IF k[j]
- CONTINUE
- ELSE
- dst := FpMax(max, a[i+31:i])
- FI
-ENDFOR
-dst := max
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
- Determines the maximum element of the packed double-precision (64-bit) floating-point elements stored in "a" and stores the result in "dst".
- max := a[63:0]
-FOR j := 1 to 7
- i := j*64
- dst := FpMax(max, a[i+63:i])
-ENDFOR
-dst := max
-
-
-
-
- Floating Point
- KNCNI
- Special Math Functions
-
-
-
- Determines the maximum element of the packed double-precision (64-bit) floating-point elements stored in "a" and stores the result in "dst". Bitmask "k" is used to exclude certain elements (elements are ignored when the corresponding mask bit is not set).
- max := a[63:0]
-FOR j := 1 to 7
- i := j*64
- IF k[j]
- CONTINUE
- ELSE
- dst := FpMax(max, a[i+63:i])
- FI
-ENDFOR
-dst := max
-
-
-
-
- KNCNI
- Bit Manipulation
-
-
-
- Count the number of trailing zero bits in unsigned 32-bit integer "x" starting at bit "a", and return that count in "dst".
-
-tmp := a
-IF tmp < 0
- tmp := 0
-FI
-dst := 0
-IF tmp > 31
- dst := 32
-ELSE
- DO WHILE ((tmp < 32) AND x[tmp] == 0)
- tmp := tmp + 1
- dst := dst + 1
- OD
-FI
-
-
-
-
-
- KNCNI
- Bit Manipulation
-
-
-
- Count the number of trailing zero bits in unsigned 64-bit integer "x" starting at bit "a", and return that count in "dst".
-
-tmp := a
-IF tmp < 0
- tmp := 0
-FI
-dst := 0
-IF tmp > 63
- dst := 64
-ELSE
- DO WHILE ((tmp < 64) AND x[tmp] == 0)
- tmp := tmp + 1
- dst := dst + 1
- OD
-FI
-
-
-
-
-
- KNCNI
- General Support
-
-
- Stalls a thread without blocking other threads for 32-bit unsigned integer "r1" clock cycles.
- BlockThread(r1)
-
-
-
-
-
- KNCNI
- General Support
-
-
- Stalls a thread without blocking other threads for 64-bit unsigned integer "r1" clock cycles.
- BlockThread(r1)
-
-
-
-
-
- KNCNI
- General Support
-
-
- Set performance monitoring filtering mask to 32-bit unsigned integer "r1".
- SetPerfMonMask(r1[31:0])
-
-
-
-
-
- KNCNI
- General Support
-
-
- Set performance monitoring filtering mask to 64-bit unsigned integer "r1".
- SetPerfMonMask(r1[63:0])
-
-
-
-
-
- KNCNI
- General Support
-
-
-
- Evicts the cache line containing the address "ptr" from cache level "level" (can be either 0 or 1).
- CacheLineEvict(ptr, level)
-
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Performs a bitwise AND operation between NOT of "k2" and "k1", storing the result in "dst".
- dst[15:0] := NOT(k2[15:0]) & k1[15:0]
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Moves high byte from "k2" to low byte of "k1", and moves low byte of "k2" to high byte of "k1".
-
-tmp[7:0] := k2[15:8]
-k2[15:8] := k1[7:0]
-k1[7:0] := tmp[7:0]
-tmp[7:0] := k2[7:0]
-k2[7:0] := k1[15:8]
-k1[15:8] := tmp[7:0]
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Performs bitwise OR between "k1" and "k2", storing the result in "dst". ZF flag is set if "dst" is 0.
- dst[15:0] := k1[15:0] | k2[15:0]
-IF dst == 0
- SetZF()
-FI
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Performs bitwise OR between "k1" and "k2", storing the result in "dst". CF flag is set if "dst" consists of all 1's.
- dst[15:0] := k1[15:0] | k2[15:0]
-IF PopCount(dst[15:0]) == 16
- SetCF()
-FI
-
-
-
-
-
- KNCNI
- Mask
-
-
- Converts bit mask "k1" into an integer value, storing the results in "dst".
-
-dst := ZeroExtend32(k1)
-
-
-
-
-
- KNCNI
- Mask
-
-
- Converts integer "mask" into bitmask, storing the result in "dst".
-
-dst := mask[15:0]
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Packs masks "k1" and "k2" into the high 32 bits of "dst". The rest of "dst" is set to 0.
-
-dst[63:48] := k1[15:0]
-dst[47:32] := k2[15:0]
-dst[31:0] := 0
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Packs masks "k1" and "k2" into the low 32 bits of "dst". The rest of "dst" is set to 0.
-
-dst[31:16] := k1[15:0]
-dst[15:0] := k2[15:0]
-dst[63:32] := 0
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Extracts 16-bit value "b" from 64-bit integer "a", storing the result in "dst".
-
-CASE b[1:0] OF
-0: dst[15:0] := a[63:48]
-1: dst[15:0] := a[47:32]
-2: dst[15:0] := a[31:16]
-3: dst[15:0] := a[15:0]
-ESAC
-dst[MAX:15] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in each 4-element set of "a" and by element 1 of the corresponding 4-element set from "b", add the intermediate result to element 0 of the corresponding 4-element set from "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*32
- base := (j & ~0x3) * 32
- scale[31:0] := b[base+63:base+32]
- bias[31:0] := b[base+31:base]
- dst[i+31:i] := (a[i+31:i] * scale[31:0]) + bias[31:0]
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Arithmetic
-
-
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in each 4-element set of "a" and by element 1 of the corresponding 4-element set from "b", add the intermediate result to element 0 of the corresponding 4-element set from "b", and store the results in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 15
- i := j*32
- IF k[j]
- base := (j & ~0x3) * 32
- scale[31:0] := b[base+63:base+32]
- bias[31:0] := b[base+31:base]
- dst[i+31:i] := (a[i+31:i] * scale[31:0]) + bias[31:0]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
-
- Up-converts 8 single-precision (32-bit) memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" using "conv" to 32-bit integer elements and stores them in "dst". "hint" indicates to the processor whether the data is non-temporal.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_UPCONV_EPI32_NONE: dst[i+31:i] := MEM[addr+31:addr]
- _MM_UPCONV_EPI32_UINT8: dst[i+31:i] := ZeroExtend32(MEM[addr+7:addr])
- _MM_UPCONV_EPI32_SINT8: dst[i+31:i] := SignExtend32(MEM[addr+7:addr])
- _MM_UPCONV_EPI32_UINT16: dst[i+31:i] := ZeroExtend32(MEM[addr+15:addr])
- _MM_UPCONV_EPI32_SINT16: dst[i+31:i] := SignExtend32(MEM[addr+15:addr])
- ESAC
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
-
-
-
- Up-converts 8 single-precision (32-bit) memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" using "conv" to 32-bit integer elements and stores them in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "hint" indicates to the processor whether the data is non-temporal.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_UPCONV_EPI32_NONE: dst[i+31:i] := MEM[addr+31:addr]
- _MM_UPCONV_EPI32_UINT8: dst[i+31:i] := ZeroExtend32(MEM[addr+7:addr])
- _MM_UPCONV_EPI32_SINT8: dst[i+31:i] := SignExtend32(MEM[addr+7:addr])
- _MM_UPCONV_EPI32_UINT16: dst[i+31:i] := ZeroExtend32(MEM[addr+15:addr])
- _MM_UPCONV_EPI32_SINT16: dst[i+31:i] := SignExtend32(MEM[addr+15:addr])
- ESAC
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
-
- Up-converts 8 double-precision (64-bit) memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" using "conv" to 64-bit integer elements and stores them in "dst". "hint" indicates to the processor whether the load is non-temporal.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_UPCONV_EPI64_NONE: dst[i+63:i] := MEM[addr+63:addr]
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
-
-
-
- Up-converts 8 double-precision (64-bit) memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" using "conv" to 64-bit integer elements and stores them in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "hint" indicates to the processor whether the load is non-temporal.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_UPCONV_EPI64_NONE: dst[i+63:i] := MEM[addr+63:addr]
- ESAC
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
-
- Up-converts 8 memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" using "conv" to single-precision (32-bit) floating-point elements and stores them in the lower half of "dst". "hint" indicates to the processor whether the load is non-temporal.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_UPCONV_PS_NONE: dst[i+31:i] := MEM[addr+31:addr]
- _MM_UPCONV_PS_FLOAT16: dst[i+31:i] := Convert_FP16_To_FP32(MEM[addr+15:addr])
- _MM_UPCONV_PS_UINT8: dst[i+31:i] := Convert_UInt8_To_FP32(MEM[addr+7:addr])
- _MM_UPCONV_PS_SINT8: dst[i+31:i] := Convert_Int8_To_FP32(MEM[addr+7:addr])
- _MM_UPCONV_PS_UINT16: dst[i+31:i] := Convert_UInt16_To_FP32(MEM[addr+15:addr])
- _MM_UPCONV_PS_SINT16: dst[i+31:i] := Convert_Int16_To_FP32(MEM[addr+15:addr])
- ESAC
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
-
-
-
- Up-converts 8 memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" using "conv" to single-precision (32-bit) floating-point elements and stores them in the lower half of "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "hint" indicates to the processor whether the load is non-temporal.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_UPCONV_PS_NONE: dst[i+31:i] := MEM[addr+31:addr]
- _MM_UPCONV_PS_FLOAT16: dst[i+31:i] := Convert_FP16_To_FP32(MEM[addr+15:addr])
- _MM_UPCONV_PS_UINT8: dst[i+31:i] := Convert_UInt8_To_FP32(MEM[addr+7:addr])
- _MM_UPCONV_PS_SINT8: dst[i+31:i] := Convert_Int8_To_FP32(MEM[addr+7:addr])
- _MM_UPCONV_PS_UINT16: dst[i+31:i] := Convert_UInt16_To_FP32(MEM[addr+15:addr])
- _MM_UPCONV_PS_SINT16: dst[i+31:i] := Convert_Int16_To_FP32(MEM[addr+15:addr])
- ESAC
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
-
- Up-converts 8 double-precision (64-bit) floating-point elements stored in memory starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" using "conv" to 64-bit floating-point elements and stores them in "dst". "hint" indicates to the processor whether the data is non-temporal.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_UPCONV_PD_NONE: dst[i+63:i] := MEM[addr+63:addr]
- ESAC
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
-
-
-
- Up-converts 8 double-precision (64-bit) floating-point elements stored in memory starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" using "conv" to 64-bit floating-point elements and stores them in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set). "hint" indicates to the processor whether the data is non-temporal.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_UPCONV_PD_NONE: dst[i+63:i] := MEM[addr+63:addr]
- ESAC
- ELSE
- dst[i+63:i] := src[i+63:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
-
-
- Down-converts 8 packed single-precision (32-bit) floating-point elements in "a" using "conv" and stores them in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale". "hint" indicates to the processor whether the data is non-temporal.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_DOWNCONV_PS_NONE: MEM[addr+31:addr] := a[i+31:i]
- _MM_DOWNCONV_PS_FLOAT16: MEM[addr+15:addr] := Convert_FP32_To_FP16(a[i+31:i])
- _MM_DOWNCONV_PS_UINT8: MEM[addr+ 7:addr] := Convert_FP32_To_UInt8(a[i+31:i])
- _MM_DOWNCONV_PS_SINT8: MEM[addr+ 7:addr] := Convert_FP32_To_Int8(a[i+31:i])
- _MM_DOWNCONV_PS_UINT16: MEM[addr+15:addr] := Convert_FP32_To_UInt16(a[i+31:i])
- _MM_DOWNCONV_PS_SINT16: MEM[addr+15:addr] := Convert_FP32_To_Int16(a[i+31:i])
- ESAC
-ENDFOR
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
-
-
-
- Down-converts 8 packed single-precision (32-bit) floating-point elements in "a" using "conv" and stores them in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale". Elements are only written when the corresponding mask bit is set in "k"; otherwise, elements are unchanged in memory. "hint" indicates to the processor whether the data is non-temporal.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_DOWNCONV_PS_NONE: MEM[addr+31:addr] := a[i+31:i]
- _MM_DOWNCONV_PS_FLOAT16: MEM[addr+15:addr] := Convert_FP32_To_FP16(a[i+31:i])
- _MM_DOWNCONV_PS_UINT8: MEM[addr+ 7:addr] := Convert_FP32_To_UInt8(a[i+31:i])
- _MM_DOWNCONV_PS_SINT8: MEM[addr+ 7:addr] := Convert_FP32_To_Int8(a[i+31:i])
- _MM_DOWNCONV_PS_UINT16: MEM[addr+15:addr] := Convert_FP32_To_UInt16(a[i+31:i])
- _MM_DOWNCONV_PS_SINT16: MEM[addr+15:addr] := Convert_FP32_To_Int16(a[i+31:i])
- ESAC
- FI
-ENDFOR
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
-
-
- Down-converts 8 packed double-precision (64-bit) floating-point elements in "a" using "conv" and stores them in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale". "hint" indicates to the processor whether the data is non-temporal.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_DOWNCONV_EPI64_NONE: MEM[addr+63:addr] := a[i+63:i]
- ESAC
-ENDFOR
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
-
-
-
- Down-converts 8 packed double-precision (64-bit) floating-point elements in "a" using "conv" and stores them in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale". Elements are written to memory using writemask "k" (elements are not stored to memory when the corresponding mask bit is not set; the memory location is left unchanged). "hint" indicates to the processor whether the data is non-temporal.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_DOWNCONV_EPI64_NONE: MEM[addr+63:addr] := a[i+63:i]
- ESAC
- FI
-ENDFOR
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
-
- Down-converts the low 8 packed 32-bit integer elements in "a" using "conv" and stores them in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale". "hint" indicates to the processor whether the data is non-temporal.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_DOWNCONV_EPI32_NONE: MEM[addr+31:addr] := a[i+31:i]
- _MM_DOWNCONV_EPI32_UINT8: MEM[addr+ 7:addr] := Truncate8(a[i+31:i])
- _MM_DOWNCONV_EPI32_SINT8: MEM[addr+ 7:addr] := Saturate8(a[i+31:i])
- _MM_DOWNCONV_EPI32_UINT16: MEM[addr+15:addr] := Truncate16(a[i+31:i])
- _MM_DOWNCONV_EPI32_SINT16: MEM[addr+15:addr] := Saturate16(a[i+31:i])
- ESAC
-ENDFOR
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
-
-
- Down-converts the low 8 packed 32-bit integer elements in "a" using "conv" and stores them in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale". Elements are written to memory using writemask "k" (elements are only written when the corresponding mask bit is set; otherwise, the memory location is left unchanged). "hint" indicates to the processor whether the data is non-temporal.
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_DOWNCONV_EPI32_NONE: MEM[addr+31:addr] := a[i+31:i]
- _MM_DOWNCONV_EPI32_UINT8: MEM[addr+ 7:addr] := Truncate8(a[i+31:i])
- _MM_DOWNCONV_EPI32_SINT8: MEM[addr+ 7:addr] := Saturate8(a[i+31:i])
- _MM_DOWNCONV_EPI32_UINT16: MEM[addr+15:addr] := Truncate16(a[i+31:i])
- _MM_DOWNCONV_EPI32_SINT16: MEM[addr+15:addr] := Saturate16(a[i+31:i])
- ESAC
- FI
-ENDFOR
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
-
- Down-converts 8 packed 64-bit integer elements in "a" using "conv" and stores them in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale". "hint" indicates to the processor whether the load is non-temporal.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- CASE conv OF
- _MM_DOWNCONV_EPI64_NONE: MEM[addr+63:addr] := a[i+63:i]
- ESAC
-ENDFOR
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
-
-
- Down-converts 8 packed 64-bit integer elements in "a" using "conv" and stores them in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale". Only those elements whose corresponding mask bit is set in writemask "k" are written to memory.
-
-FOR j := 0 to 7
- i := j*64
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
-
- IF k[j]
- CASE conv OF
- _MM_DOWNCONV_EPI64_NONE: MEM[addr+63:addr] := a[i+63:i]
- ESAC
- FI
-ENDFOR
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
- Permutes 128-bit blocks of the packed single-precision (32-bit) floating-point elements in "a" using constant "imm8". The results are stored in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE control[1:0] OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-FOR j := 0 to 3
- i := j*128
- n := j*2
- dst[i+127:i] := SELECT4(a[511:0], imm8[n+1:n])
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Floating Point
- KNCNI
- Swizzle
-
-
-
-
-
- Permutes 128-bit blocks of the packed single-precision (32-bit) floating-point elements in "a" using constant "imm8". The results are stored in "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-DEFINE SELECT4(src, control) {
- CASE control[1:0] OF
- 0: tmp[127:0] := src[127:0]
- 1: tmp[127:0] := src[255:128]
- 2: tmp[127:0] := src[383:256]
- 3: tmp[127:0] := src[511:384]
- ESAC
- RETURN tmp[127:0]
-}
-tmp[511:0] := 0
-FOR j := 0 to 3
- i := j*128
- n := j*2
- tmp[i+127:i] := SELECT4(a[511:0], imm8[n+1:n])
-ENDFOR
-FOR j := 0 to 15
- IF k[j]
- dst[i+31:i] := tmp[i+31:i]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
- Loads 8 32-bit integer memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" to "dst".
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Integer
- KNCNI
- Load
-
-
-
-
-
-
- Loads 8 32-bit integer memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
- Loads 8 single-precision (32-bit) floating-point memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" to "dst".
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- KNCNI
- Load
-
-
-
-
-
-
- Loads 8 single-precision (32-bit) floating-point memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" to "dst" using writemask "k" (elements are copied from "src" when the corresponding mask bit is not set).
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- dst[i+31:i] := MEM[addr+31:addr]
- ELSE
- dst[i+31:i] := src[i+31:i]
- FI
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
- Stores 8 packed single-precision (32-bit) floating-point elements in "a" in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale".
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
- Floating Point
- KNCNI
- Store
-
-
-
-
-
-
- Stores 8 packed single-precision (32-bit) floating-point elements in "a" in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" using writemask "k" (elements are only written to memory when the corresponding mask bit is set).
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
- Stores 8 packed 32-bit integer elements in "a" in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale".
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
-ENDFOR
-
-
-
-
- Integer
- KNCNI
- Store
-
-
-
-
-
-
- Stores 8 packed 32-bit integer elements in "a" in memory locations starting at location "base_addr" at packed 64-bit integer indices stored in "vindex" scaled by "scale" using writemask "k" (elements are only written to memory when the corresponding mask bit is set).
-
-FOR j := 0 to 7
- i := j*32
- m := j*64
- IF k[j]
- addr := base_addr + vindex[m+63:m] * ZeroExtend64(scale) * 8
- MEM[addr+31:addr] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Move the high element from "k1" to the low element of "k1", and insert the low element of "k2" into the high element of "k1".
-
-tmp[7:0] := k1[15:8]
-k1[15:8] := k2[7:0]
-k1[7:0] := tmp[7:0]
-
-
-
-
-
- Mask
- KNCNI
- Mask
-
-
-
- Insert the low element of "k2" into the high element of "k1".
-
-k1[15:8] := k2[7:0]
-
-
-
-
-
- Integer
- LZCNT
- Bit Manipulation
-
-
- Count the number of leading zero bits in unsigned 32-bit integer "a", and return that count in "dst".
-
-tmp := 31
-dst := 0
-DO WHILE (tmp >= 0 AND a[tmp] == 0)
- tmp := tmp - 1
- dst := dst + 1
-OD
-
-
-
-
-
- Integer
- LZCNT
- Bit Manipulation
-
-
- Count the number of leading zero bits in unsigned 64-bit integer "a", and return that count in "dst".
-
-tmp := 63
-dst := 0
-DO WHILE (tmp >= 0 AND a[tmp] == 0)
- tmp := tmp - 1
- dst := dst + 1
-OD
-
-
-
-
-
- Integer
- MMX
- Convert
-
-
- Copy 64-bit integer "a" to "dst".
-
-dst[63:0] := a[63:0]
-
-
-
-
-
- Integer
- MMX
- Convert
-
-
- Copy 64-bit integer "a" to "dst".
-
-dst[63:0] := a[63:0]
-
-
-
-
-
- MMX
- General Support
-
-
- Empty the MMX state, which marks the x87 FPU registers as available for use by x87 instructions. This instruction must be used at the end of all MMX technology procedures.
-
-
-
-
- Integer
- MMX
- Convert
-
-
- Copy 32-bit integer "a" to the lower elements of "dst", and zero the upper element of "dst".
-
-dst[31:0] := a[31:0]
-dst[63:32] := 0
-
-
-
-
-
- Integer
- MMX
- Convert
-
-
- Copy the lower 32-bit integer in "a" to "dst".
-
-dst[31:0] := a[31:0]
-
-
-
-
-
- Integer
- MMX
- Miscellaneous
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using signed saturation, and store the results in "dst".
-
-dst[7:0] := Saturate8(a[15:0])
-dst[15:8] := Saturate8(a[31:16])
-dst[23:16] := Saturate8(a[47:32])
-dst[31:24] := Saturate8(a[63:48])
-dst[39:32] := Saturate8(b[15:0])
-dst[47:40] := Saturate8(b[31:16])
-dst[55:48] := Saturate8(b[47:32])
-dst[63:56] := Saturate8(b[63:48])
-
-
-
-
-
- Integer
- MMX
- Miscellaneous
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using signed saturation, and store the results in "dst".
-
-dst[15:0] := Saturate16(a[31:0])
-dst[31:16] := Saturate16(a[63:32])
-dst[47:32] := Saturate16(b[31:0])
-dst[63:48] := Saturate16(b[63:32])
-
-
-
-
-
- Integer
- MMX
- Miscellaneous
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using unsigned saturation, and store the results in "dst".
-
-dst[7:0] := SaturateU8(a[15:0])
-dst[15:8] := SaturateU8(a[31:16])
-dst[23:16] := SaturateU8(a[47:32])
-dst[31:24] := SaturateU8(a[63:48])
-dst[39:32] := SaturateU8(b[15:0])
-dst[47:40] := SaturateU8(b[31:16])
-dst[55:48] := SaturateU8(b[47:32])
-dst[63:56] := SaturateU8(b[63:48])
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 8-bit integers from the high half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_BYTES(src1[63:0], src2[63:0]) {
- dst[7:0] := src1[39:32]
- dst[15:8] := src2[39:32]
- dst[23:16] := src1[47:40]
- dst[31:24] := src2[47:40]
- dst[39:32] := src1[55:48]
- dst[47:40] := src2[55:48]
- dst[55:48] := src1[63:56]
- dst[63:56] := src2[63:56]
- RETURN dst[63:0]
-}
-dst[63:0] := INTERLEAVE_HIGH_BYTES(a[63:0], b[63:0])
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 16-bit integers from the high half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_WORDS(src1[63:0], src2[63:0]) {
- dst[15:0] := src1[47:32]
- dst[31:16] := src2[47:32]
- dst[47:32] := src1[63:48]
- dst[63:48] := src2[63:48]
- RETURN dst[63:0]
-}
-dst[63:0] := INTERLEAVE_HIGH_WORDS(a[63:0], b[63:0])
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 32-bit integers from the high half of "a" and "b", and store the results in "dst".
-
-dst[31:0] := a[63:32]
-dst[63:32] := b[63:32]
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 8-bit integers from the low half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_BYTES(src1[63:0], src2[63:0]) {
- dst[7:0] := src1[7:0]
- dst[15:8] := src2[7:0]
- dst[23:16] := src1[15:8]
- dst[31:24] := src2[15:8]
- dst[39:32] := src1[23:16]
- dst[47:40] := src2[23:16]
- dst[55:48] := src1[31:24]
- dst[63:56] := src2[31:24]
- RETURN dst[63:0]
-}
-dst[63:0] := INTERLEAVE_BYTES(a[63:0], b[63:0])
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 16-bit integers from the low half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_WORDS(src1[63:0], src2[63:0]) {
- dst[15:0] := src1[15:0]
- dst[31:16] := src2[15:0]
- dst[47:32] := src1[31:16]
- dst[63:48] := src2[31:16]
- RETURN dst[63:0]
-}
-dst[63:0] := INTERLEAVE_WORDS(a[63:0], b[63:0])
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 32-bit integers from the low half of "a" and "b", and store the results in "dst".
-
-dst[31:0] := a[31:0]
-dst[63:32] := b[31:0]
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed 8-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := a[i+7:i] + b[i+7:i]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed 16-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := a[i+15:i] + b[i+15:i]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed signed 8-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed signed 16-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := a[i+7:i] - b[i+7:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := a[i+15:i] - b[i+15:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers, and pack the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) + SignExtend32(a[i+15:i]*b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 3
- i := j*16
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Multiply the packed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 3
- i := j*16
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[15:0]
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift 64-bit integer "a" left by "count" while shifting in zeros, and store the result in "dst".
-
-IF count[63:0] > 63
- dst[63:0] := 0
-ELSE
- dst[63:0] := ZeroExtend64(a[63:0] << count[63:0])
-FI
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift 64-bit integer "a" left by "imm8" while shifting in zeros, and store the result in "dst".
-
-IF imm8[7:0] > 63
- dst[63:0] := 0
-ELSE
- dst[63:0] := ZeroExtend64(a[63:0] << imm8[7:0])
-FI
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift 64-bit integer "a" right by "count" while shifting in zeros, and store the result in "dst".
-
-IF count[63:0] > 63
- dst[63:0] := 0
-ELSE
- dst[63:0] := ZeroExtend64(a[63:0] >> count[63:0])
-FI
-
-
-
-
-
- Floating Point
- Integer
- MMX
- Shift
-
-
-
- Shift 64-bit integer "a" right by "imm8" while shifting in zeros, and store the result in "dst".
-
-IF imm8[7:0] > 63
- dst[63:0] := 0
-ELSE
- dst[63:0] := ZeroExtend64(a[63:0] >> imm8[7:0])
-FI
-
-
-
-
-
- Integer
- MMX
- Logical
-
-
-
- Compute the bitwise AND of 64 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[63:0] := (a[63:0] AND b[63:0])
-
-
-
-
-
- Integer
- MMX
- Logical
-
-
-
- Compute the bitwise NOT of 64 bits (representing integer data) in "a" and then AND with "b", and store the result in "dst".
-
-dst[63:0] := ((NOT a[63:0]) AND b[63:0])
-
-
-
-
-
- Integer
- MMX
- Logical
-
-
-
- Compute the bitwise OR of 64 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[63:0] := (a[63:0] OR b[63:0])
-
-
-
-
-
- Integer
- MMX
- Logical
-
-
-
- Compute the bitwise XOR of 64 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[63:0] := (a[63:0] XOR b[63:0])
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed 8-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := ( a[i+7:i] == b[i+7:i] ) ? 0xFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed 16-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := ( a[i+15:i] == b[i+15:i] ) ? 0xFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed 32-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed 8-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := ( a[i+7:i] > b[i+7:i] ) ? 0xFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed 16-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := ( a[i+15:i] > b[i+15:i] ) ? 0xFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed 32-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := ( a[i+31:i] > b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- MMX
- General Support
-
-
- Empty the MMX state, which marks the x87 FPU registers as available for use by x87 instructions. This instruction must be used at the end of all MMX technology procedures.
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed 8-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := a[i+7:i] + b[i+7:i]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed 16-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := a[i+15:i] + b[i+15:i]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed signed 8-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed signed 16-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := a[i+7:i] - b[i+7:i]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := a[i+15:i] - b[i+15:i]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers, and pack the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) + SignExtend32(a[i+15:i]*b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 3
- i := j*16
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Arithmetic
-
-
-
- Multiply the packed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 3
- i := j*16
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[15:0]
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift 64-bit integer "a" left by "count" while shifting in zeros, and store the result in "dst".
-
-IF count[63:0] > 63
- dst[63:0] := 0
-ELSE
- dst[63:0] := ZeroExtend64(a[63:0] << count[63:0])
-FI
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift 64-bit integer "a" left by "imm8" while shifting in zeros, and store the result in "dst".
-
-IF imm8[7:0] > 63
- dst[63:0] := 0
-ELSE
- dst[63:0] := ZeroExtend64(a[63:0] << imm8[7:0])
-FI
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift 64-bit integer "a" right by "count" while shifting in zeros, and store the result in "dst".
-
-IF count[63:0] > 63
- dst[63:0] := 0
-ELSE
- dst[63:0] := ZeroExtend64(a[63:0] >> count[63:0])
-FI
-
-
-
-
-
- Integer
- MMX
- Shift
-
-
-
- Shift 64-bit integer "a" right by "imm8" while shifting in zeros, and store the result in "dst".
-
-IF imm8[7:0] > 63
- dst[63:0] := 0
-ELSE
- dst[63:0] := ZeroExtend64(a[63:0] >> imm8[7:0])
-FI
-
-
-
-
-
- Integer
- MMX
- Logical
-
-
-
- Compute the bitwise AND of 64 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[63:0] := (a[63:0] AND b[63:0])
-
-
-
-
-
- Integer
- MMX
- Logical
-
-
-
- Compute the bitwise NOT of 64 bits (representing integer data) in "a" and then AND with "b", and store the result in "dst".
-
-dst[63:0] := ((NOT a[63:0]) AND b[63:0])
-
-
-
-
-
- Integer
- MMX
- Logical
-
-
-
- Compute the bitwise OR of 64 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[63:0] := (a[63:0] OR b[63:0])
-
-
-
-
-
- Integer
- MMX
- Logical
-
-
-
- Compute the bitwise XOR of 64 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[63:0] := (a[63:0] XOR b[63:0])
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed 8-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := ( a[i+7:i] == b[i+7:i] ) ? 0xFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed 16-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := ( a[i+15:i] == b[i+15:i] ) ? 0xFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed 32-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := ( a[i+7:i] > b[i+7:i] ) ? 0xFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := ( a[i+15:i] > b[i+15:i] ) ? 0xFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := ( a[i+31:i] > b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- MMX
- Convert
-
-
- Copy 32-bit integer "a" to the lower elements of "dst", and zero the upper element of "dst".
-
-dst[31:0] := a[31:0]
-dst[63:32] := 0
-
-
-
-
-
- Integer
- MMX
- Convert
-
-
- Copy the lower 32-bit integer in "a" to "dst".
-
-dst[31:0] := a[31:0]
-
-
-
-
-
- Integer
- MMX
- Convert
-
-
- Copy 64-bit integer "a" to "dst".
-
-dst[63:0] := a[63:0]
-
-
-
-
-
- Integer
- MMX
- Convert
-
-
- Copy 64-bit integer "a" to "dst".
-
-dst[63:0] := a[63:0]
-
-
-
-
-
- Integer
- MMX
- Set
-
-
- Return vector of type __m64 with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- Integer
- MMX
- Set
-
-
-
- Set packed 32-bit integers in "dst" with the supplied values.
-
-dst[31:0] := e0
-dst[63:32] := e1
-
-
-
-
- Integer
- MMX
- Set
-
-
-
-
-
- Set packed 16-bit integers in "dst" with the supplied values.
-
-dst[15:0] := e0
-dst[31:16] := e1
-dst[47:32] := e2
-dst[63:48] := e3
-
-
-
-
- Integer
- MMX
- Set
-
-
-
-
-
-
-
-
-
- Set packed 8-bit integers in "dst" with the supplied values.
-
-dst[7:0] := e0
-dst[15:8] := e1
-dst[23:16] := e2
-dst[31:24] := e3
-dst[39:32] := e4
-dst[47:40] := e5
-dst[55:48] := e6
-dst[63:56] := e7
-
-
-
-
- Integer
- MMX
- Set
-
-
- Broadcast 32-bit integer "a" to all elements of "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-
-
-
-
- Integer
- MMX
- Set
-
-
- Broadcast 16-bit integer "a" to all all elements of "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := a[15:0]
-ENDFOR
-
-
-
-
- Integer
- MMX
- Set
-
-
- Broadcast 8-bit integer "a" to all elements of "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := a[7:0]
-ENDFOR
-
-
-
-
- Integer
- MMX
- Set
-
-
-
- Set packed 32-bit integers in "dst" with the supplied values in reverse order.
-
-dst[31:0] := e1
-dst[63:32] := e0
-
-
-
-
- Integer
- MMX
- Set
-
-
-
-
-
- Set packed 16-bit integers in "dst" with the supplied values in reverse order.
-
-dst[15:0] := e3
-dst[31:16] := e2
-dst[47:32] := e1
-dst[63:48] := e0
-
-
-
-
- Integer
- MMX
- Set
-
-
-
-
-
-
-
-
-
- Set packed 8-bit integers in "dst" with the supplied values in reverse order.
-
-dst[7:0] := e7
-dst[15:8] := e6
-dst[23:16] := e5
-dst[31:24] := e4
-dst[39:32] := e3
-dst[47:40] := e2
-dst[55:48] := e1
-dst[63:56] := e0
-
-
-
-
- Integer
- MMX
- Miscellaneous
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using signed saturation, and store the results in "dst".
-
-dst[7:0] := Saturate8(a[15:0])
-dst[15:8] := Saturate8(a[31:16])
-dst[23:16] := Saturate8(a[47:32])
-dst[31:24] := Saturate8(a[63:48])
-dst[39:32] := Saturate8(b[15:0])
-dst[47:40] := Saturate8(b[31:16])
-dst[55:48] := Saturate8(b[47:32])
-dst[63:56] := Saturate8(b[63:48])
-
-
-
-
-
- Integer
- MMX
- Miscellaneous
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using signed saturation, and store the results in "dst".
-
-dst[15:0] := Saturate16(a[31:0])
-dst[31:16] := Saturate16(a[63:32])
-dst[47:32] := Saturate16(b[31:0])
-dst[63:48] := Saturate16(b[63:32])
-
-
-
-
-
- Integer
- MMX
- Miscellaneous
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using unsigned saturation, and store the results in "dst".
-
-dst[7:0] := SaturateU8(a[15:0])
-dst[15:8] := SaturateU8(a[31:16])
-dst[23:16] := SaturateU8(a[47:32])
-dst[31:24] := SaturateU8(a[63:48])
-dst[39:32] := SaturateU8(b[15:0])
-dst[47:40] := SaturateU8(b[31:16])
-dst[55:48] := SaturateU8(b[47:32])
-dst[63:56] := SaturateU8(b[63:48])
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 8-bit integers from the high half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_BYTES(src1[63:0], src2[63:0]) {
- dst[7:0] := src1[39:32]
- dst[15:8] := src2[39:32]
- dst[23:16] := src1[47:40]
- dst[31:24] := src2[47:40]
- dst[39:32] := src1[55:48]
- dst[47:40] := src2[55:48]
- dst[55:48] := src1[63:56]
- dst[63:56] := src2[63:56]
- RETURN dst[63:0]
-}
-dst[63:0] := INTERLEAVE_HIGH_BYTES(a[63:0], b[63:0])
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 16-bit integers from the high half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_WORDS(src1[63:0], src2[63:0]) {
- dst[15:0] := src1[47:32]
- dst[31:16] := src2[47:32]
- dst[47:32] := src1[63:48]
- dst[63:48] := src2[63:48]
- RETURN dst[63:0]
-}
-dst[63:0] := INTERLEAVE_HIGH_WORDS(a[63:0], b[63:0])
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 32-bit integers from the high half of "a" and "b", and store the results in "dst".
-
-dst[31:0] := a[63:32]
-dst[63:32] := b[63:32]
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 8-bit integers from the low half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_BYTES(src1[63:0], src2[63:0]) {
- dst[7:0] := src1[7:0]
- dst[15:8] := src2[7:0]
- dst[23:16] := src1[15:8]
- dst[31:24] := src2[15:8]
- dst[39:32] := src1[23:16]
- dst[47:40] := src2[23:16]
- dst[55:48] := src1[31:24]
- dst[63:56] := src2[31:24]
- RETURN dst[63:0]
-}
-dst[63:0] := INTERLEAVE_BYTES(a[63:0], b[63:0])
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 16-bit integers from the low half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_WORDS(src1[63:0], src2[63:0]) {
- dst[15:0] := src1[15:0]
- dst[31:16] := src2[15:0]
- dst[47:32] := src1[31:16]
- dst[63:48] := src2[31:16]
- RETURN dst[63:0]
-}
-dst[63:0] := INTERLEAVE_WORDS(a[63:0], b[63:0])
-
-
-
-
-
- Integer
- MMX
- Swizzle
-
-
-
- Unpack and interleave 32-bit integers from the low half of "a" and "b", and store the results in "dst".
-
-dst[31:0] := a[31:0]
-dst[63:32] := b[31:0]
-
-
-
-
-
- MONITOR
- General Support
-
-
-
-
- Arm address monitoring hardware using the address specified in "p". A store to an address within the specified address range triggers the monitoring hardware. Specify optional extensions in "extensions", and optional hints in "hints".
-
-
-
-
- MONITOR
- General Support
-
-
-
- Hint to the processor that it can enter an implementation-dependent-optimized state while waiting for an event or store operation to the address range specified by MONITOR.
-
-
-
-
- MOVBE
- Load
-
-
- Load 16 bits from memory, perform a byte swap operation, and store the result in "dst".
-
-FOR j := 0 to 1
- i := j*8
- dst[i+7:i] := MEM[ptr+15-i:ptr+8-i]
-ENDFOR
-
-
-
-
-
- MOVBE
- Load
-
-
- Load 32 bits from memory, perform a byte swap operation, and store the result in "dst".
-
-FOR j := 0 to 3
- i := j*8
- dst[i+7:i] := MEM[ptr+31-i:ptr+24-i]
-ENDFOR
-
-
-
-
-
- MOVBE
- Load
-
-
- Load 64 bits from memory, perform a byte swap operation, and store the result in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := MEM[ptr+63-i:ptr+56-i]
-ENDFOR
-
-
-
-
-
- MOVBE
- Store
-
-
-
- Perform a bit swap operation of the 16 bits in "data", and store the results to memory.
-
-FOR j := 0 to 1
- i := j*8
- MEM[ptr+i+7:ptr+i] := data[15-i:8-i]
-ENDFOR
-
-
-
-
-
- MOVBE
- Store
-
-
-
- Perform a bit swap operation of the 32 bits in "data", and store the results to memory.
-
-addr := MEM[ptr]
-FOR j := 0 to 3
- i := j*8
- MEM[ptr+i+7:ptr+i] := data[31-i:24-i]
-ENDFOR
-
-
-
-
-
- MOVBE
- Store
-
-
-
- Perform a bit swap operation of the 64 bits in "data", and store the results to memory.
-
-addr := MEM[ptr]
-FOR j := 0 to 7
- i := j*8
- MEM[ptr+i+7:ptr+i] := data[63-i:56-i]
-ENDFOR
-
-
-
-
-
- MOVDIR64B
- Store
-
-
-
- Move 64-byte (512-bit) value using direct store from source memory address "src" to destination memory address "dst".
-
-MEM[dst+511:dst] := MEM[src+511:src]
-
-
-
-
-
- MOVDIRI
- Store
-
-
-
- Store 64-bit integer from "val" into memory using direct store.
-
-MEM[dst+63:dst] := val[63:0]
-
-
-
-
-
- MOVDIRI
- Store
-
-
-
- Store 32-bit integer from "val" into memory using direct store.
-
-MEM[dst+31:dst] := val[31:0]
-
-
-
-
-
- MPX
- Miscellaneous
-
-
-
- Make a pointer with the value of "srcmem" and bounds set to ["srcmem", "srcmem" + "size" - 1], and store the result in "dst".
- dst := srcmem
-dst.LB := srcmem.LB
-dst.UB := srcmem + size - 1
-
-
-
-
-
- MPX
- Miscellaneous
-
-
-
-
- Narrow the bounds for pointer "q" to the intersection of the bounds of "r" and the bounds ["q", "q" + "size" - 1], and store the result in "dst".
- dst := q
-IF r.LB > (q + size - 1) OR r.UB < q
- dst.LB := 1
- dst.UB := 0
-ELSE
- dst.LB := MAX(r.LB, q)
- dst.UB := MIN(r.UB, (q + size - 1))
-FI
-
-
-
-
- MPX
- Miscellaneous
-
-
-
- Make a pointer with the value of "q" and bounds set to the bounds of "r" (e.g. copy the bounds of "r" to pointer "q"), and store the result in "dst".
- dst := q
-dst.LB := r.LB
-dst.UB := r.UB
-
-
-
-
- MPX
- Miscellaneous
-
-
- Make a pointer with the value of "q" and open bounds, which allow the pointer to access the entire virtual address space, and store the result in "dst".
- dst := q
-dst.LB := 0
-dst.UB := 0
-
-
-
-
- MPX
- Miscellaneous
-
-
-
- Stores the bounds of "ptr_val" pointer in memory at address "ptr_addr".
- MEM[ptr_addr].LB := ptr_val.LB
-MEM[ptr_addr].UB := ptr_val.UB
-
-
-
-
-
- MPX
- Miscellaneous
-
-
- Checks if "q" is within its lower bound, and throws a #BR if not.
- IF q < q.LB
- #BR
-FI
-
-
-
-
-
- MPX
- Miscellaneous
-
-
- Checks if "q" is within its upper bound, and throws a #BR if not.
- IF q > q.UB
- #BR
-FI
-
-
-
-
-
-
- MPX
- Miscellaneous
-
-
-
- Checks if ["q", "q" + "size" - 1] is within the lower and upper bounds of "q" and throws a #BR if not.
- IF (q + size - 1) < q.LB OR (q + size - 1) > q.UB
- #BR
-FI
-
-
-
-
-
-
- MPX
- Miscellaneous
-
-
- Return the lower bound of "q".
- dst := q.LB
-
-
-
-
- MPX
- Miscellaneous
-
-
- Return the upper bound of "q".
- dst := q.UB
-
-
-
-
- Integer
- Bit Manipulation
-
-
- Set "dst" to the index of the lowest set bit in 32-bit integer "a". If no bits are set in "a" then "dst" is undefined.
-
-tmp := 0
-IF a == 0
- // dst is undefined
-ELSE
- DO WHILE ((tmp < 32) AND a[tmp] == 0)
- tmp := tmp + 1
- OD
-FI
-dst := tmp
-
-
-
-
-
- Integer
- Bit Manipulation
-
-
- Set "dst" to the index of the highest set bit in 32-bit integer "a". If no bits are set in "a" then "dst" is undefined.
-
-tmp := 31
-IF a == 0
- // dst is undefined
-ELSE
- DO WHILE ((tmp > 0) AND a[tmp] == 0)
- tmp := tmp - 1
- OD
-FI
-dst := tmp
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Set "index" to the index of the lowest set bit in 32-bit integer "mask". If no bits are set in "a", then "index" is undefined and "dst" is set to 0, otherwise "dst" is set to 1.
-
-tmp := 0
-IF a == 0
- // MEM[index+31:index] is undefined
- dst := 0
-ELSE
- DO WHILE ((tmp < 32) AND a[tmp] == 0)
- tmp := tmp + 1
- OD
- MEM[index+31:index] := tmp
- dst := (tmp == 31) ? 0 : 1
-FI
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Set "index" to the index of the highest set bit in 32-bit integer "mask". If no bits are set in "a", then "index" is undefined and "dst" is set to 0, otherwise "dst" is set to 1.
-
-tmp := 31
-IF a == 0
- // MEM[index+31:index] is undefined
- dst := 0
-ELSE
- DO WHILE ((tmp > 0) AND a[tmp] == 0)
- tmp := tmp - 1
- OD
- MEM[index+31:index] := tmp
- dst := (tmp == 0) ? 0 : 1
-FI
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Set "index" to the index of the lowest set bit in 32-bit integer "mask". If no bits are set in "a", then "index" is undefined and "dst" is set to 0, otherwise "dst" is set to 1.
-
-tmp := 0
-IF a == 0
- // MEM[index+31:index] is undefined
- dst := 0
-ELSE
- DO WHILE ((tmp < 64) AND a[tmp] == 0)
- tmp := tmp + 1
- OD
- MEM[index+31:index] := tmp
- dst := (tmp == 63) ? 0 : 1
-FI
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Set "index" to the index of the highest set bit in 32-bit integer "mask". If no bits are set in "a", then "index" is undefined and "dst" is set to 0, otherwise "dst" is set to 1.
-
-tmp := 63
-IF a == 0
- // MEM[index+31:index] is undefined
- dst := 0
-ELSE
- DO WHILE ((tmp > 0) AND a[tmp] == 0)
- tmp := tmp - 1
- OD
- MEM[index+31:index] := tmp
- dst := (tmp == 0) ? 0 : 1
-FI
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Return the bit at index "b" of 32-bit integer "a".
-
-addr := a + ZeroExtend64(b)
-dst[0] := MEM[addr]
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Return the bit at index "b" of 32-bit integer "a", and set that bit to its complement.
-
-addr := a + ZeroExtend64(b)
-dst[0] := MEM[addr]
-MEM[addr] := ~dst[0]
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Return the bit at index "b" of 32-bit integer "a", and set that bit to zero.
-
-addr := a + ZeroExtend64(b)
-dst[0] := MEM[addr]
-MEM[addr] := 0
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Return the bit at index "b" of 32-bit integer "a", and set that bit to one.
-
-addr := a + ZeroExtend64(b)
-dst[0] := MEM[addr]
-MEM[addr] := 1
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Return the bit at index "b" of 64-bit integer "a".
-
-addr := a + b
-dst[0] := MEM[addr]
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Return the bit at index "b" of 64-bit integer "a", and set that bit to its complement.
-
-addr := a + b
-dst[0] := MEM[addr]
-MEM[addr] := ~dst[0]
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Return the bit at index "b" of 64-bit integer "a", and set that bit to zero.
-
-addr := a + b
-dst[0] := MEM[addr]
-MEM[addr] := 0
-
-
-
-
-
- Integer
- Flag
- Bit Manipulation
-
-
-
- Return the bit at index "b" of 64-bit integer "a", and set that bit to one.
-
-addr := a + b
-dst[0] := MEM[addr]
-MEM[addr] := 1
-
-
-
-
-
- Integer
- Bit Manipulation
-
-
- Reverse the byte order of 32-bit integer "a", and store the result in "dst". This intrinsic is provided for conversion between little and big endian values.
-
-dst[7:0] := a[31:24]
-dst[15:8] := a[23:16]
-dst[23:16] := a[15:8]
-dst[31:24] := a[7:0]
-
-
-
-
-
- Integer
- Bit Manipulation
-
-
- Reverse the byte order of 64-bit integer "a", and store the result in "dst". This intrinsic is provided for conversion between little and big endian values.
-
-dst[7:0] := a[63:56]
-dst[15:8] := a[55:48]
-dst[23:16] := a[47:40]
-dst[31:24] := a[39:32]
-dst[39:32] := a[31:24]
-dst[47:40] := a[23:16]
-dst[55:48] := a[15:8]
-dst[63:56] := a[7:0]
-
-
-
-
-
- Floating Point
- Integer
- Cast
-
-
- Cast from type float to type unsigned __int32 without conversion.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- Integer
- Cast
-
-
- Cast from type double to type unsigned __int64 without conversion.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- Integer
- Cast
-
-
- Cast from type unsigned __int32 to type float without conversion.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- Integer
- Cast
-
-
- Cast from type unsigned __int64 to type double without conversion.
- This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Integer
- Shift
-
-
-
- Shift the bits of unsigned long integer "a" left by the number of bits specified in "shift", rotating the most-significant bit to the least-significant bit location, and store the unsigned result in "dst".
- // size := 32 or 64
-dst := a
-count := shift AND (size - 1)
-DO WHILE (count > 0)
- tmp[0] := dst[size - 1]
- dst := (dst << 1) OR tmp[0]
- count := count - 1
-OD
-
-
-
-
-
-
- Integer
- Shift
-
-
-
- Shift the bits of unsigned long integer "a" right by the number of bits specified in "shift", rotating the least-significant bit to the most-significant bit location, and store the unsigned result in "dst".
- // size := 32 or 64
-dst := a
-count := shift AND (size - 1)
-DO WHILE (count > 0)
- tmp[size - 1] := dst[0]
- dst := (dst >> 1) OR tmp[size - 1]
- count := count - 1
-OD
-
-
-
-
-
- General Support
-
-
- Treat the processor-specific feature(s) specified in "a" as available. Multiple features may be OR'd together. See the valid feature flags below:
-
-_FEATURE_GENERIC_IA32
-_FEATURE_FPU
-_FEATURE_CMOV
-_FEATURE_MMX
-_FEATURE_FXSAVE
-_FEATURE_SSE
-_FEATURE_SSE2
-_FEATURE_SSE3
-_FEATURE_SSSE3
-_FEATURE_SSE4_1
-_FEATURE_SSE4_2
-_FEATURE_MOVBE
-_FEATURE_POPCNT
-_FEATURE_PCLMULQDQ
-_FEATURE_AES
-_FEATURE_F16C
-_FEATURE_AVX
-_FEATURE_RDRND
-_FEATURE_FMA
-_FEATURE_BMI
-_FEATURE_LZCNT
-_FEATURE_HLE
-_FEATURE_RTM
-_FEATURE_AVX2
-_FEATURE_KNCNI
-_FEATURE_AVX512F
-_FEATURE_ADX
-_FEATURE_RDSEED
-_FEATURE_AVX512ER
-_FEATURE_AVX512PF
-_FEATURE_AVX512CD
-_FEATURE_SHA
-_FEATURE_MPX
-_FEATURE_AVX512BW
-_FEATURE_AVX512VL
-_FEATURE_AVX512VBMI
-_FEATURE_AVX512_4FMAPS
-_FEATURE_AVX512_4VNNIW
-_FEATURE_AVX512_VPOPCNTDQ
-_FEATURE_AVX512_BITALG
-_FEATURE_AVX512_VBMI2
-_FEATURE_GFNI
-_FEATURE_VAES
-_FEATURE_VPCLMULQDQ
-_FEATURE_AVX512_VNNI
-_FEATURE_CLWB
-_FEATURE_RDPID
-_FEATURE_IBT
-_FEATURE_SHSTK
-_FEATURE_SGX
-_FEATURE_WBNOINVD
-_FEATURE_PCONFIG
-_FEATURE_AXV512_4VNNIB
-_FEATURE_AXV512_4FMAPH
-_FEATURE_AXV512_BITALG2
-_FEATURE_AXV512_VP2INTERSECT
-
-
-
-
- General Support
-
-
- Dynamically query the processor to determine if the processor-specific feature(s) specified in "a" are available, and return true or false (1 or 0) if the set of features is available. Multiple features may be OR'd together. This intrinsic does not check the processor vendor. See the valid feature flags below:
-
-_FEATURE_GENERIC_IA32
-_FEATURE_FPU
-_FEATURE_CMOV
-_FEATURE_MMX
-_FEATURE_FXSAVE
-_FEATURE_SSE
-_FEATURE_SSE2
-_FEATURE_SSE3
-_FEATURE_SSSE3
-_FEATURE_SSE4_1
-_FEATURE_SSE4_2
-_FEATURE_MOVBE
-_FEATURE_POPCNT
-_FEATURE_PCLMULQDQ
-_FEATURE_AES
-_FEATURE_F16C
-_FEATURE_AVX
-_FEATURE_RDRND
-_FEATURE_FMA
-_FEATURE_BMI
-_FEATURE_LZCNT
-_FEATURE_HLE
-_FEATURE_RTM
-_FEATURE_AVX2
-_FEATURE_KNCNI
-_FEATURE_AVX512F
-_FEATURE_ADX
-_FEATURE_RDSEED
-_FEATURE_AVX512ER
-_FEATURE_AVX512PF
-_FEATURE_AVX512CD
-_FEATURE_SHA
-_FEATURE_MPX
-_FEATURE_AVX512BW
-_FEATURE_AVX512VL
-_FEATURE_AVX512VBMI
-_FEATURE_AVX512_4FMAPS
-_FEATURE_AVX512_4VNNIW
-_FEATURE_AVX512_VPOPCNTDQ
-_FEATURE_AVX512_BITALG
-_FEATURE_AVX512_VBMI2
-_FEATURE_GFNI
-_FEATURE_VAES
-_FEATURE_VPCLMULQDQ
-_FEATURE_AVX512_VNNI
-_FEATURE_CLWB
-_FEATURE_RDPID
-_FEATURE_IBT
-_FEATURE_SHSTK
-_FEATURE_SGX
-_FEATURE_WBNOINVD
-_FEATURE_PCONFIG
-_FEATURE_AXV512_4VNNIB
-_FEATURE_AXV512_4FMAPH
-_FEATURE_AXV512_BITALG2
-_FEATURE_AXV512_VP2INTERSECT
-
-
-
-
- General Support
-
-
- Read the Performance Monitor Counter (PMC) specified by "a", and store up to 64-bits in "dst". The width of performance counters is implementation specific.
- dst[63:0] := ReadPMC(a)
-
-
-
-
-
- Integer
- Shift
-
-
-
- Shift the bits of unsigned 32-bit integer "a" left by the number of bits specified in "shift", rotating the most-significant bit to the least-significant bit location, and store the unsigned result in "dst".
-
-dst := a
-count := shift AND 31
-DO WHILE (count > 0)
- tmp[0] := dst[31]
- dst := (dst << 1) OR tmp[0]
- count := count - 1
-OD
-
-
-
-
-
- Integer
- Shift
-
-
-
- Shift the bits of unsigned 32-bit integer "a" right by the number of bits specified in "shift", rotating the least-significant bit to the most-significant bit location, and store the unsigned result in "dst".
-
-dst := a
-count := shift AND 31
-DO WHILE (count > 0)
- tmp[31] := dst[0]
- dst := (dst >> 1) OR tmp
- count := count - 1
-OD
-
-
-
-
-
- Integer
- Shift
-
-
-
- Shift the bits of unsigned 16-bit integer "a" left by the number of bits specified in "shift", rotating the most-significant bit to the least-significant bit location, and store the unsigned result in "dst".
-
-dst := a
-count := shift AND 15
-DO WHILE (count > 0)
- tmp[0] := dst[15]
- dst := (dst << 1) OR tmp[0]
- count := count - 1
-OD
-
-
-
-
-
- Integer
- Shift
-
-
-
- Shift the bits of unsigned 16-bit integer "a" right by the number of bits specified in "shift", rotating the least-significant bit to the most-significant bit location, and store the unsigned result in "dst".
-
-dst := a
-count := shift AND 15
-DO WHILE (count > 0)
- tmp[15] := dst[0]
- dst := (dst >> 1) OR tmp
- count := count - 1
-OD
-
-
-
-
-
- Integer
- Shift
-
-
-
- Shift the bits of unsigned 64-bit integer "a" left by the number of bits specified in "shift", rotating the most-significant bit to the least-significant bit location, and store the unsigned result in "dst".
-
-dst := a
-count := shift AND 63
-DO WHILE (count > 0)
- tmp[0] := dst[63]
- dst := (dst << 1) OR tmp[0]
- count := count - 1
-OD
-
-
-
-
-
- Integer
- Shift
-
-
-
- Shift the bits of unsigned 64-bit integer "a" right by the number of bits specified in "shift", rotating the least-significant bit to the most-significant bit location, and store the unsigned result in "dst".
-
-dst := a
-count := shift AND 63
-DO WHILE (count > 0)
- tmp[63] := dst[0]
- dst := (dst >> 1) OR tmp[63]
- count := count - 1
-OD
-
-
-
-
-
- Integer
- Flag
- Arithmetic
-
-
-
-
-
- Add unsigned 32-bit integers "a" and "b" with unsigned 8-bit carry-in "c_in" (carry flag), and store the unsigned 32-bit result in "out", and the carry-out in "dst" (carry or overflow flag).
-
-tmp[32:0] := a[31:0] + b[31:0] + (c_in > 0 ? 1 : 0)
-MEM[out+31:out] := tmp[31:0]
-dst[0] := tmp[32]
-dst[7:1] := 0
-
-
-
-
-
- Integer
- Flag
- Arithmetic
-
-
-
-
-
- Add unsigned 64-bit integers "a" and "b" with unsigned 8-bit carry-in "c_in" (carry flag), and store the unsigned 64-bit result in "out", and the carry-out in "dst" (carry or overflow flag).
-
-tmp[64:0] := a[63:0] + b[63:0] + (c_in > 0 ? 1 : 0)
-MEM[out+63:out] := tmp[63:0]
-dst[0] := tmp[64]
-dst[7:1] := 0
-
-
-
-
-
- Integer
- Flag
- Arithmetic
-
-
-
-
-
- Add unsigned 8-bit borrow "c_in" (carry flag) to unsigned 32-bit integer "b", and subtract the result from unsigned 32-bit integer "a". Store the unsigned 32-bit result in "out", and the carry-out in "dst" (carry or overflow flag).
-
-tmp[32:0] := a[31:0] - (b[31:0] + (c_in > 0 ? 1 : 0))
-MEM[out+31:out] := tmp[31:0]
-dst[0] := tmp[32]
-dst[7:1] := 0
-
-
-
-
-
- Integer
- Flag
- Arithmetic
-
-
-
-
-
- Add unsigned 8-bit borrow "c_in" (carry flag) to unsigned 64-bit integer "b", and subtract the result from unsigned 64-bit integer "a". Store the unsigned 64-bit result in "out", and the carry-out in "dst" (carry or overflow flag).
-
-tmp[64:0] := a[63:0] - (b[63:0] + (c_in > 0 ? 1 : 0))
-MEM[out+63:out] := tmp[63:0]
-dst[0] := tmp[64]
-dst[7:1] := 0
-
-
-
-
-
- Miscellaneous
-
-
- Insert the 32-bit data from "a" into a Processor Trace stream via a PTW packet. The PTW packet will be inserted if tracing is currently enabled and ptwrite is currently enabled. The current IP will also be inserted via a FUP packet if FUPonPTW is enabled.
-
-
-
-
- Miscellaneous
-
-
- Insert the 64-bit data from "a" into a Processor Trace stream via a PTW packet. The PTW packet will be inserted if tracing is currently enabled and ptwrite is currently enabled. The current IP will also be inserted via a FUP packet if FUPonPTW is enabled.
-
-
-
-
- Miscellaneous
-
-
-
- Invoke the Intel SGX enclave user (non-privilege) leaf function specified by "a", and return the error code. The "__data" array contains 3 32-bit elements that may act as input, output, or be unused, depending on the semantics of the specified leaf function; these correspond to ebx, ecx, and edx.
-
-
-
-
- Miscellaneous
-
-
-
- Invoke the Intel SGX enclave system (privileged) leaf function specified by "a", and return the error code. The "__data" array contains 3 32-bit elements that may act as input, output, or be unused, depending on the semantics of the specified leaf function; these correspond to ebx, ecx, and edx.
-
-
-
-
- Miscellaneous
-
-
-
- Invoke the Intel SGX enclave virtualized (VMM) leaf function specified by "a", and return the error code. The "__data" array contains 3 32-bit elements that may act as input, output, or be unused, depending on the semantics of the specified leaf function; these correspond to ebx, ecx, and edx.
-
-
-
-
- Miscellaneous
-
-
- Write back and flush internal caches.
- Initiate writing-back and flushing of external
- caches.
-
-
-
-
- Floating Point
- Convert
-
-
- Convert the half-precision (16-bit) floating-point value "a" to a single-precision (32-bit) floating-point value, and store the result in "dst".
-
-dst[31:0] := Convert_FP16_To_FP32(a[15:0])
-
-
-
-
- Floating Point
- Convert
-
-
-
- Convert the single-precision (32-bit) floating-point value "a" to a half-precision (16-bit) floating-point value, and store the result in "dst".
- [round_note]
-
-dst[15:0] := Convert_FP32_To_FP16(a[31:0])
-
-
-
-
- Integer
- PCLMULQDQ
- Application-Targeted
-
-
-
-
- Perform a carry-less multiplication of two 64-bit integers, selected from "a" and "b" according to "imm8", and store the results in "dst".
-
-IF (imm8[0] == 0)
- TEMP1 := a[63:0]
-ELSE
- TEMP1 := a[127:64]
-FI
-IF (imm8[4] == 0)
- TEMP2 := b[63:0]
-ELSE
- TEMP2 := b[127:64]
-FI
-FOR i := 0 to 63
- TEMP[i] := (TEMP1[0] and TEMP2[i])
- FOR j := 1 to i
- TEMP[i] := TEMP[i] XOR (TEMP1[j] AND TEMP2[i-j])
- ENDFOR
- dst[i] := TEMP[i]
-ENDFOR
-FOR i := 64 to 127
- TEMP[i] := 0
- FOR j := (i - 63) to 63
- TEMP[i] := TEMP[i] XOR (TEMP1[j] AND TEMP2[i-j])
- ENDFOR
- dst[i] := TEMP[i]
-ENDFOR
-dst[127] := 0
-
-
-
-
-
- PCONFIG
- Miscellaneous
-
-
-
- Invoke the PCONFIG leaf function specified by "a". The "__data" array contains 3 32-bit elements that may act as input, output, or be unused, depending on the semantics of the specified leaf function; these correspond to rbx, rcx, and rdx. May return the value in eax, depending on the semantics of the specified leaf function.
-
-
-
-
- Integer
- Flag
- POPCNT
- Bit Manipulation
-
-
- Count the number of bits set to 1 in unsigned 32-bit integer "a", and return that count in "dst".
-
-dst := 0
-FOR i := 0 to 31
- IF a[i]
- dst := dst + 1
- FI
-ENDFOR
-
-
-
-
-
- Integer
- Flag
- POPCNT
- Bit Manipulation
-
-
- Count the number of bits set to 1 in unsigned 64-bit integer "a", and return that count in "dst".
-
-dst := 0
-FOR i := 0 to 63
- IF a[i]
- dst := dst + 1
- FI
-ENDFOR
-
-
-
-
-
- Integer
- Flag
- POPCNT
- Bit Manipulation
-
-
- Count the number of bits set to 1 in 32-bit integer "a", and return that count in "dst".
-
-dst := 0
-FOR i := 0 to 31
- IF a[i]
- dst := dst + 1
- FI
-ENDFOR
-
-
-
-
-
- Integer
- Flag
- POPCNT
- Bit Manipulation
-
-
- Count the number of bits set to 1 in 64-bit integer "a", and return that count in "dst".
-
-dst := 0
-FOR i := 0 to 63
- IF a[i]
- dst := dst + 1
- FI
-ENDFOR
-
-
-
-
-
- PREFETCHWT1
- General Support
-
-
-
- Fetch the line of data from memory that contains address "p" to a location in the cache hierarchy specified by the locality hint "i".
-
-
-
-
- RDPID
- General Support
-
-
- Copy the IA32_TSC_AUX MSR (signature value) into "dst".
- dst[31:0] := IA32_TSC_AUX[31:0]
-
-
-
-
-
- Integer
- Flag
- RDRAND
- Random
-
-
- Read a hardware generated 16-bit random value and store the result in "val". Return 1 if a random value was generated, and 0 otherwise.
- IF HW_RND_GEN.ready == 1
- val[15:0] := HW_RND_GEN.data
- dst := 1
-ELSE
- val[15:0] := 0
- dst := 0
-FI
-
-
-
-
-
- Integer
- Flag
- RDRAND
- Random
-
-
- Read a hardware generated 32-bit random value and store the result in "val". Return 1 if a random value was generated, and 0 otherwise.
- IF HW_RND_GEN.ready == 1
- val[31:0] := HW_RND_GEN.data
- dst := 1
-ELSE
- val[31:0] := 0
- dst := 0
-FI
-
-
-
-
-
- Integer
- Flag
- RDRAND
- Random
-
-
- Read a hardware generated 64-bit random value and store the result in "val". Return 1 if a random value was generated, and 0 otherwise.
- IF HW_RND_GEN.ready == 1
- val[63:0] := HW_RND_GEN.data
- dst := 1
-ELSE
- val[63:0] := 0
- dst := 0
-FI
-
-
-
-
-
- Flag
- RDSEED
- Random
-
-
- Read a 16-bit NIST SP800-90B and SP800-90C compliant random value and store in "val". Return 1 if a random value was generated, and 0 otherwise.
- IF HW_NRND_GEN.ready == 1
- val[15:0] := HW_NRND_GEN.data
- dst := 1
-ELSE
- val[15:0] := 0
- dst := 0
-FI
-
-
-
-
-
- Flag
- RDSEED
- Random
-
-
- Read a 32-bit NIST SP800-90B and SP800-90C compliant random value and store in "val". Return 1 if a random value was generated, and 0 otherwise.
- IF HW_NRND_GEN.ready == 1
- val[31:0] := HW_NRND_GEN.data
- dst := 1
-ELSE
- val[31:0] := 0
- dst := 0
-FI
-
-
-
-
-
- Flag
- RDSEED
- Random
-
-
- Read a 64-bit NIST SP800-90B and SP800-90C compliant random value and store in "val". Return 1 if a random value was generated, and 0 otherwise.
- IF HW_NRND_GEN.ready == 1
- val[63:0] := HW_NRND_GEN.data
- dst := 1
-ELSE
- val[63:0] := 0
- dst := 0
-FI
-
-
-
-
-
- RDTSCP
- General Support
-
-
- Copy the current 64-bit value of the processor's time-stamp counter into "dst", and store the IA32_TSC_AUX MSR (signature value) into memory at "mem_addr".
- dst[63:0] := TimeStampCounter
-MEM[mem_addr+31:mem_addr] := IA32_TSC_AUX[31:0]
-
-
-
-
-
- RTM
- General Support
-
-
- Force an RTM abort. The EAX register is updated to reflect an XABORT instruction caused the abort, and the "imm8" parameter will be provided in bits [31:24] of EAX.
- Following an RTM abort, the logical processor resumes execution at the fallback address computed through the outermost XBEGIN instruction.
- IF RTM_ACTIVE == 0
- // nop
-ELSE
- // restore architectural register state
- // discard memory updates performed in transaction
- // update EAX with status and imm8 value
- eax[31:24] := imm8[7:0]
- RTM_NEST_COUNT := 0
- RTM_ACTIVE := 0
- IF _64_BIT_MODE
- RIP := fallbackRIP
- ELSE
- EIP := fallbackEIP
- FI
-FI
-
-
-
-
-
- RTM
- General Support
-
-
- Specify the start of an RTM code region.
- If the logical processor was not already in transactional execution, then this call causes the logical processor to transition into transactional execution.
- On an RTM abort, the logical processor discards all architectural register and memory updates performed during the RTM execution, restores architectural state, and starts execution beginning at the fallback address computed from the outermost XBEGIN instruction. Return status of ~0 (0xFFFF) if continuing inside transaction; all other codes are aborts.
- IF RTM_NEST_COUNT < MAX_RTM_NEST_COUNT
- RTM_NEST_COUNT := RTM_NEST_COUNT + 1
- IF RTM_NEST_COUNT == 1
- IF _64_BIT_MODE
- fallbackRIP := RIP
- ELSE IF _32_BIT_MODE
- fallbackEIP := EIP
- FI
-
- RTM_ACTIVE := 1
- // enter RTM execution, record register state, start tracking memory state
- FI
-ELSE
- // RTM abort (see _xabort)
-FI
-
-
-
-
-
- RTM
- General Support
-
-
- Specify the end of an RTM code region.
- If this corresponds to the outermost scope, the logical processor will attempt to commit the logical processor state atomically.
- If the commit fails, the logical processor will perform an RTM abort.
- IF RTM_ACTIVE == 1
- RTM_NEST_COUNT := RTM_NEST_COUNT - 1
- IF RTM_NEST_COUNT == 0
- // try to commit transaction
- IF FAIL_TO_COMMIT_TRANSACTION
- // RTM abort (see _xabort)
- ELSE
- RTM_ACTIVE := 0
- FI
- FI
-FI
-
-
-
-
-
- RTM
- General Support
-
-
- Query the transactional execution status, return 1 if inside a transactionally executing RTM or HLE region, and return 0 otherwise.
- IF (RTM_ACTIVE == 1 OR HLE_ACTIVE == 1)
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- SERIALIZE
- General Support
-
- Serialize instruction execution, ensuring all modifications to flags, registers, and memory by previous instructions are completed before the next instruction is fetched.
-
-
-
-
- Integer
- SHA
- Cryptography
-
-
-
- Perform an intermediate calculation for the next four SHA1 message values (unsigned 32-bit integers) using previous message values from "a" and "b", and store the result in "dst".
-
-W0 := a[127:96]
-W1 := a[95:64]
-W2 := a[63:32]
-W3 := a[31:0]
-W4 := b[127:96]
-W5 := b[95:64]
-dst[127:96] := W2 XOR W0
-dst[95:64] := W3 XOR W1
-dst[63:32] := W4 XOR W2
-dst[31:0] := W5 XOR W3
-
-
-
-
-
- Integer
- SHA
- Cryptography
-
-
-
- Perform the final calculation for the next four SHA1 message values (unsigned 32-bit integers) using the intermediate result in "a" and the previous message values in "b", and store the result in "dst".
-
-W13 := b[95:64]
-W14 := b[63:32]
-W15 := b[31:0]
-W16 := (a[127:96] XOR W13) <<< 1
-W17 := (a[95:64] XOR W14) <<< 1
-W18 := (a[63:32] XOR W15) <<< 1
-W19 := (a[31:0] XOR W16) <<< 1
-dst[127:96] := W16
-dst[95:64] := W17
-dst[63:32] := W18
-dst[31:0] := W19
-
-
-
-
-
- Integer
- SHA
- Cryptography
-
-
-
- Calculate SHA1 state variable E after four rounds of operation from the current SHA1 state variable "a", add that value to the scheduled values (unsigned 32-bit integers) in "b", and store the result in "dst".
-
-tmp := (a[127:96] <<< 30)
-dst[127:96] := b[127:96] + tmp
-dst[95:64] := b[95:64]
-dst[63:32] := b[63:32]
-dst[31:0] := b[31:0]
-
-
-
-
-
- Integer
- SHA
- Cryptography
-
-
-
-
- Perform four rounds of SHA1 operation using an initial SHA1 state (A,B,C,D) from "a" and some pre-computed sum of the next 4 round message values (unsigned 32-bit integers), and state variable E from "b", and store the updated SHA1 state (A,B,C,D) in "dst". "func" contains the logic functions and round constants.
- IF (func[1:0] == 0)
- f := f0()
- K := K0
-ELSE IF (func[1:0] == 1)
- f := f1()
- K := K1
-ELSE IF (func[1:0] == 2)
- f := f2()
- K := K2
-ELSE IF (func[1:0] == 3)
- f := f3()
- K := K3
-FI
-A := a[127:96]
-B := a[95:64]
-C := a[63:32]
-D := a[31:0]
-W[0] := b[127:96]
-W[1] := b[95:64]
-W[2] := b[63:32]
-W[3] := b[31:0]
-A[1] := f(B, C, D) + (A <<< 5) + W[0] + K
-B[1] := A
-C[1] := B <<< 30
-D[1] := C
-E[1] := D
-FOR i := 1 to 3
- A[i+1] := f(B[i], C[i], D[i]) + (A[i] <<< 5) + W[i] + E[i] + K
- B[i+1] := A[i]
- C[i+1] := B[i] <<< 30
- D[i+1] := C[i]
- E[i+1] := D[i]
-ENDFOR
-dst[127:96] := A[4]
-dst[95:64] := B[4]
-dst[63:32] := C[4]
-dst[31:0] := D[4]
-
-
-
-
-
- Integer
- SHA
- Cryptography
-
-
-
- Perform an intermediate calculation for the next four SHA256 message values (unsigned 32-bit integers) using previous message values from "a" and "b", and store the result in "dst".
- W4 := b[31:0]
-W3 := a[127:96]
-W2 := a[95:64]
-W1 := a[63:32]
-W0 := a[31:0]
-dst[127:96] := W3 + sigma0(W4)
-dst[95:64] := W2 + sigma0(W3)
-dst[63:32] := W1 + sigma0(W2)
-dst[31:0] := W0 + sigma0(W1)
-
-
-
-
-
- Integer
- SHA
- Cryptography
-
-
-
- Perform the final calculation for the next four SHA256 message values (unsigned 32-bit integers) using previous message values from "a" and "b", and store the result in "dst"."
- W14 := b[95:64]
-W15 := b[127:96]
-W16 := a[31:0] + sigma1(W14)
-W17 := a[63:32] + sigma1(W15)
-W18 := a[95:64] + sigma1(W16)
-W19 := a[127:96] + sigma1(W17)
-dst[127:96] := W19
-dst[95:64] := W18
-dst[63:32] := W17
-dst[31:0] := W16
-
-
-
-
-
- Integer
- SHA
- Cryptography
-
-
-
-
- Perform 2 rounds of SHA256 operation using an initial SHA256 state (C,D,G,H) from "a", an initial SHA256 state (A,B,E,F) from "b", and a pre-computed sum of the next 2 round message values (unsigned 32-bit integers) and the corresponding round constants from "k", and store the updated SHA256 state (A,B,E,F) in "dst".
- A[0] := b[127:96]
-B[0] := b[95:64]
-C[0] := a[127:96]
-D[0] := a[95:64]
-E[0] := b[63:32]
-F[0] := b[31:0]
-G[0] := a[63:32]
-H[0] := a[31:0]
-W_K[0] := k[31:0]
-W_K[1] := k[63:32]
-FOR i := 0 to 1
- A[i+1] := Ch(E[i], F[i], G[i]) + sum1(E[i]) + W_K[i] + H[i] + Maj(A[i], B[i], C[i]) + sum0(A[i])
- B[i+1] := A[i]
- C[i+1] := B[i]
- D[i+1] := C[i]
- E[i+1] := Ch(E[i], F[i], G[i]) + sum1(E[i]) + W_K[i] + H[i] + D[i]
- F[i+1] := E[i]
- G[i+1] := F[i]
- H[i+1] := G[i]
-ENDFOR
-dst[127:96] := A[2]
-dst[95:64] := B[2]
-dst[63:32] := E[2]
-dst[31:0] := F[2]
-
-
-
-
-
- SSE
- Swizzle
-
-
-
-
-
- Macro: Transpose the 4x4 matrix formed by the 4 rows of single-precision (32-bit) floating-point elements in "row0", "row1", "row2", and "row3", and store the transposed matrix in these vectors ("row0" now contains column 0, etc.).
-
-__m128 tmp3, tmp2, tmp1, tmp0;
-tmp0 := _mm_unpacklo_ps(row0, row1);
-tmp2 := _mm_unpacklo_ps(row2, row3);
-tmp1 := _mm_unpackhi_ps(row0, row1);
-tmp3 := _mm_unpackhi_ps(row2, row3);
-row0 := _mm_movelh_ps(tmp0, tmp2);
-row1 := _mm_movehl_ps(tmp2, tmp0);
-row2 := _mm_movelh_ps(tmp1, tmp3);
-row3 := _mm_movehl_ps(tmp3, tmp1);
-
-
-
-
- SSE
- General Support
-
-
- Get the unsigned 32-bit value of the MXCSR control and status register.
- dst[31:0] := MXCSR
-
-
-
-
-
- SSE
- General Support
-
-
- Set the MXCSR control and status register with the value in unsigned 32-bit integer "a".
-
-MXCSR := a[31:0]
-
-
-
-
-
- SSE
- General Support
-
- Macro: Get the exception state bits from the MXCSR control and status register. The exception state may contain any of the following flags: _MM_EXCEPT_INVALID, _MM_EXCEPT_DIV_ZERO, _MM_EXCEPT_DENORM, _MM_EXCEPT_OVERFLOW, _MM_EXCEPT_UNDERFLOW, _MM_EXCEPT_INEXACT
- dst[31:0] := MXCSR & _MM_EXCEPT_MASK
-
-
-
-
- SSE
- General Support
-
-
- Macro: Set the exception state bits of the MXCSR control and status register to the value in unsigned 32-bit integer "a". The exception state may contain any of the following flags: _MM_EXCEPT_INVALID, _MM_EXCEPT_DIV_ZERO, _MM_EXCEPT_DENORM, _MM_EXCEPT_OVERFLOW, _MM_EXCEPT_UNDERFLOW, _MM_EXCEPT_INEXACT
- MXCSR := a[31:0] AND ~_MM_EXCEPT_MASK
-
-
-
-
- SSE
- General Support
-
- Macro: Get the exception mask bits from the MXCSR control and status register. The exception mask may contain any of the following flags: _MM_MASK_INVALID, _MM_MASK_DIV_ZERO, _MM_MASK_DENORM, _MM_MASK_OVERFLOW, _MM_MASK_UNDERFLOW, _MM_MASK_INEXACT
- dst[31:0] := MXCSR & _MM_MASK_MASK
-
-
-
-
- SSE
- General Support
-
-
- Macro: Set the exception mask bits of the MXCSR control and status register to the value in unsigned 32-bit integer "a". The exception mask may contain any of the following flags: _MM_MASK_INVALID, _MM_MASK_DIV_ZERO, _MM_MASK_DENORM, _MM_MASK_OVERFLOW, _MM_MASK_UNDERFLOW, _MM_MASK_INEXACT
- MXCSR := a[31:0] AND ~_MM_MASK_MASK
-
-
-
-
- SSE
- General Support
-
- Macro: Get the rounding mode bits from the MXCSR control and status register. The rounding mode may contain any of the following flags: _MM_ROUND_NEAREST, _MM_ROUND_DOWN, _MM_ROUND_UP, _MM_ROUND_TOWARD_ZERO
- dst[31:0] := MXCSR & _MM_ROUND_MASK
-
-
-
-
- SSE
- General Support
-
-
- Macro: Set the rounding mode bits of the MXCSR control and status register to the value in unsigned 32-bit integer "a". The rounding mode may contain any of the following flags: _MM_ROUND_NEAREST, _MM_ROUND_DOWN, _MM_ROUND_UP, _MM_ROUND_TOWARD_ZERO
- MXCSR := a[31:0] AND ~_MM_ROUND_MASK
-
-
-
-
- SSE
- General Support
-
- Macro: Get the flush zero bits from the MXCSR control and status register. The flush zero may contain any of the following flags: _MM_FLUSH_ZERO_ON or _MM_FLUSH_ZERO_OFF
- dst[31:0] := MXCSR & _MM_FLUSH_MASK
-
-
-
-
- SSE
- General Support
-
-
- Macro: Set the flush zero bits of the MXCSR control and status register to the value in unsigned 32-bit integer "a". The flush zero may contain any of the following flags: _MM_FLUSH_ZERO_ON or _MM_FLUSH_ZERO_OFF
- MXCSR := a[31:0] AND ~_MM_FLUSH_MASK
-
-
-
-
- SSE
- General Support
-
-
-
- Fetch the line of data from memory that contains address "p" to a location in the cache hierarchy specified by the locality hint "i".
-
-
-
-
-
-
-
- SSE
- General Support
-
-
- Perform a serializing operation on all store-to-memory instructions that were issued prior to this instruction. Guarantees that every store instruction that precedes, in program order, is globally visible before any store instruction which follows the fence in program order.
-
-
-
-
- Integer
- SSE
- Special Math Functions
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Special Math Functions
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Special Math Functions
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Special Math Functions
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Special Math Functions
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Special Math Functions
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Special Math Functions
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Special Math Functions
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Multiply the packed unsigned 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 3
- i := j*16
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Multiply the packed unsigned 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 3
- i := j*16
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Probability/Statistics
-
-
-
- Average packed unsigned 8-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Probability/Statistics
-
-
-
- Average packed unsigned 8-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Probability/Statistics
-
-
-
- Average packed unsigned 16-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Probability/Statistics
-
-
-
- Average packed unsigned 16-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Arithmetic
- Miscellaneous
-
-
-
- Compute the absolute differences of packed unsigned 8-bit integers in "a" and "b", then horizontally sum each consecutive 8 differences to produce four unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low 16 bits of "dst".
-
-FOR j := 0 to 7
- i := j*8
- tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i])
-ENDFOR
-dst[15:0] := tmp[7:0] + tmp[15:8] + tmp[23:16] + tmp[31:24] + tmp[39:32] + tmp[47:40] + tmp[55:48] + tmp[63:56]
-dst[63:16] := 0
-
-
-
-
-
- Floating Point
- Integer
- SSE
- Arithmetic
- Miscellaneous
-
-
-
- Compute the absolute differences of packed unsigned 8-bit integers in "a" and "b", then horizontally sum each consecutive 8 differences to produce four unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low 16 bits of "dst".
-
-FOR j := 0 to 7
- i := j*8
- tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i])
-ENDFOR
-dst[15:0] := tmp[7:0] + tmp[15:8] + tmp[23:16] + tmp[31:24] + tmp[39:32] + tmp[47:40] + tmp[55:48] + tmp[63:56]
-dst[63:16] := 0
-
-
-
-
-
- Floating Point
- SSE
- Convert
-
-
-
- Convert the signed 32-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := Convert_Int32_To_FP32(b[31:0])
-dst[127:32] := a[127:32]
-
-
-
-
-
- Integer
- SSE
- Convert
-
-
-
- Convert the signed 32-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := Convert_Int32_To_FP32(b[31:0])
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- Integer
- SSE
- Convert
-
-
-
- Convert the signed 64-bit integer "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := Convert_Int64_To_FP32(b[63:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- SSE
- Convert
-
-
-
- Convert packed 32-bit integers in "b" to packed single-precision (32-bit) floating-point elements, store the results in the lower 2 elements of "dst", and copy the upper 2 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := Convert_Int32_To_FP32(b[31:0])
-dst[63:32] := Convert_Int32_To_FP32(b[63:32])
-dst[95:64] := a[95:64]
-dst[127:96] := a[127:96]
-
-
-
-
-
- Integer
- SSE
- Convert
-
-
-
- Convert packed signed 32-bit integers in "b" to packed single-precision (32-bit) floating-point elements, store the results in the lower 2 elements of "dst", and copy the upper 2 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := Convert_Int32_To_FP32(b[31:0])
-dst[63:32] := Convert_Int32_To_FP32(b[63:32])
-dst[95:64] := a[95:64]
-dst[127:96] := a[127:96]
-
-
-
-
-
- Floating Point
- SSE
- Convert
-
-
- Convert packed 16-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- m := j*32
- dst[m+31:m] := Convert_Int16_To_FP32(a[i+15:i])
-ENDFOR
-
-
-
-
- Floating Point
- Integer
- SSE
- Convert
-
-
- Convert packed unsigned 16-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- m := j*32
- dst[m+31:m] := Convert_Int16_To_FP32(a[i+15:i])
-ENDFOR
-
-
-
-
- Floating Point
- SSE
- Convert
-
-
- Convert the lower packed 8-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*8
- m := j*32
- dst[m+31:m] := Convert_Int8_To_FP32(a[i+7:i])
-ENDFOR
-
-
-
-
- Floating Point
- Integer
- SSE
- Convert
-
-
- Convert the lower packed unsigned 8-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*8
- m := j*32
- dst[m+31:m] := Convert_Int8_To_FP32(a[i+7:i])
-ENDFOR
-
-
-
-
- Floating Point
- SSE
- Convert
-
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, store the results in the lower 2 elements of "dst", then covert the packed signed 32-bit integers in "b" to single-precision (32-bit) floating-point element, and store the results in the upper 2 elements of "dst".
-
-dst[31:0] := Convert_Int32_To_FP32(a[31:0])
-dst[63:32] := Convert_Int32_To_FP32(a[63:32])
-dst[95:64] := Convert_Int32_To_FP32(b[31:0])
-dst[127:96] := Convert_Int32_To_FP32(b[63:32])
-
-
-
-
- Integer
- SSE
- Store
-
-
-
- Store 64-bits of integer data from "a" into memory using a non-temporal memory hint.
-
-MEM[mem_addr+63:mem_addr] := a[63:0]
-
-
-
-
-
- Integer
- SSE
- Store
-
-
-
-
- Conditionally store 8-bit integer elements from "a" into memory using "mask" (elements are not stored when the highest bit is not set in the corresponding element) and a non-temporal memory hint.
-
-FOR j := 0 to 7
- i := j*8
- IF mask[i+7]
- MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Store
-
-
-
-
- Conditionally store 8-bit integer elements from "a" into memory using "mask" (elements are not stored when the highest bit is not set in the corresponding element).
-
-FOR j := 0 to 7
- i := j*8
- IF mask[i+7]
- MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE
- Swizzle
-
-
-
- Extract a 16-bit integer from "a", selected with "imm8", and store the result in the lower element of "dst".
-
-dst[15:0] := (a[63:0] >> (imm8[1:0] * 16))[15:0]
-dst[31:16] := 0
-
-
-
-
-
- Integer
- SSE
- Swizzle
-
-
-
- Extract a 16-bit integer from "a", selected with "imm8", and store the result in the lower element of "dst".
-
-dst[15:0] := (a[63:0] >> (imm8[1:0] * 16))[15:0]
-dst[31:16] := 0
-
-
-
-
-
- Integer
- SSE
- Swizzle
-
-
-
-
- Copy "a" to "dst", and insert the 16-bit integer "i" into "dst" at the location specified by "imm8".
-
-dst[63:0] := a[63:0]
-sel := imm8[1:0]*16
-dst[sel+15:sel] := i[15:0]
-
-
-
-
-
- Integer
- SSE
- Swizzle
-
-
-
-
- Copy "a" to "dst", and insert the 16-bit integer "i" into "dst" at the location specified by "imm8".
-
-dst[63:0] := a[63:0]
-sel := imm8[1:0]*16
-dst[sel+15:sel] := i[15:0]
-
-
-
-
-
- Integer
- SSE
- Miscellaneous
-
-
- Create mask from the most significant bit of each 8-bit element in "a", and store the result in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[j] := a[i+7]
-ENDFOR
-dst[MAX:8] := 0
-
-
-
-
-
- Integer
- SSE
- Miscellaneous
-
-
- Create mask from the most significant bit of each 8-bit element in "a", and store the result in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[j] := a[i+7]
-ENDFOR
-dst[MAX:8] := 0
-
-
-
-
-
- Integer
- SSE
- Swizzle
-
-
-
- Shuffle 16-bit integers in "a" using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[15:0] := src[15:0]
- 1: tmp[15:0] := src[31:16]
- 2: tmp[15:0] := src[47:32]
- 3: tmp[15:0] := src[63:48]
- ESAC
- RETURN tmp[15:0]
-}
-dst[15:0] := SELECT4(a[63:0], imm8[1:0])
-dst[31:16] := SELECT4(a[63:0], imm8[3:2])
-dst[47:32] := SELECT4(a[63:0], imm8[5:4])
-dst[63:48] := SELECT4(a[63:0], imm8[7:6])
-
-
-
-
-
- Floating Point
- Integer
- SSE
- Swizzle
-
-
-
- Shuffle 16-bit integers in "a" using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[15:0] := src[15:0]
- 1: tmp[15:0] := src[31:16]
- 2: tmp[15:0] := src[47:32]
- 3: tmp[15:0] := src[63:48]
- ESAC
- RETURN tmp[15:0]
-}
-dst[15:0] := SELECT4(a[63:0], imm8[1:0])
-dst[31:16] := SELECT4(a[63:0], imm8[3:2])
-dst[47:32] := SELECT4(a[63:0], imm8[5:4])
-dst[63:48] := SELECT4(a[63:0], imm8[7:6])
-
-
-
-
-
- Floating Point
- SSE
- Arithmetic
-
-
-
- Add the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := a[31:0] + b[31:0]
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Arithmetic
-
-
-
- Add packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Arithmetic
-
-
-
- Subtract the lower single-precision (32-bit) floating-point element in "b" from the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := a[31:0] - b[31:0]
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Arithmetic
-
-
-
- Subtract packed single-precision (32-bit) floating-point elements in "b" from packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Arithmetic
-
-
-
- Multiply the lower single-precision (32-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := a[31:0] * b[31:0]
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Arithmetic
-
-
-
- Multiply packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[i+31:i] * b[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Arithmetic
-
-
-
- Divide the lower single-precision (32-bit) floating-point element in "a" by the lower single-precision (32-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := a[31:0] / b[31:0]
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Arithmetic
-
-
-
- Divide packed single-precision (32-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := a[i+31:i] / b[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the square root of the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := SQRT(a[31:0])
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := SQRT(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the approximate reciprocal of the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 1.5*2^-12.
-
-dst[31:0] := (1.0 / a[31:0])
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the approximate reciprocal of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 1.5*2^-12.
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := (1.0 / a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the approximate reciprocal square root of the lower single-precision (32-bit) floating-point element in "a", store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst". The maximum relative error for this approximation is less than 1.5*2^-12.
-
-dst[31:0] := (1.0 / SQRT(a[31:0]))
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the approximate reciprocal square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". The maximum relative error for this approximation is less than 1.5*2^-12.
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := (1.0 / SQRT(a[i+31:i]))
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Special Math Functions
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper element of "dst".
-
-dst[31:0] := MIN(a[31:0], b[31:0])
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Special Math Functions
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Special Math Functions
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper element of "dst".
-
-dst[31:0] := MAX(a[31:0], b[31:0])
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Special Math Functions
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Logical
-
-
-
- Compute the bitwise AND of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := (a[i+31:i] AND b[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Logical
-
-
-
- Compute the bitwise NOT of packed single-precision (32-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ((NOT a[i+31:i]) AND b[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Logical
-
-
-
- Compute the bitwise OR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[i+31:i] OR b[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Logical
-
-
-
- Compute the bitwise XOR of packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for equality, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := ( a[31:0] == b[31:0] ) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for less-than, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := ( a[31:0] < b[31:0] ) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for less-than, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] < b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for less-than-or-equal, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := ( a[31:0] <= b[31:0] ) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for less-than-or-equal, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] <= b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for greater-than, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := ( a[31:0] > b[31:0] ) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] > b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for greater-than-or-equal, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := ( a[31:0] >= b[31:0] ) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for greater-than-or-equal, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] >= b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for not-equal, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := ( a[31:0] != b[31:0] ) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-equal, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] != b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := (!( a[31:0] < b[31:0] )) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := !( a[i+31:i] < b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than-or-equal, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := (!( a[31:0] <= b[31:0] )) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-less-than-or-equal, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := (!( a[i+31:i] <= b[i+31:i] )) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for not-greater-than, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := (!( a[31:0] > b[31:0] )) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-greater-than, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := (!( a[i+31:i] > b[i+31:i] )) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" for not-greater-than-or-equal, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := (!( a[31:0] >= b[31:0] )) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" for not-greater-than-or-equal, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := (!( a[i+31:i] >= b[i+31:i] )) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" to see if neither is NaN, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- dst[31:0] := ( a[31:0] != NaN AND b[31:0] != NaN ) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" to see if neither is NaN, and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] != NaN AND b[i+31:i] != NaN ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point elements in "a" and "b" to see if either is NaN, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- dst[31:0] := ( a[31:0] == NaN OR b[31:0] == NaN ) ? 0xFFFFFFFF : 0
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Compare
-
-
-
- Compare packed single-precision (32-bit) floating-point elements in "a" and "b" to see if either is NaN, and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] == NaN OR b[i+31:i] == NaN ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for equality, and return the boolean result (0 or 1).
-
-RETURN ( a[31:0] == b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for less-than, and return the boolean result (0 or 1).
-
-RETURN ( a[31:0] < b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for less-than-or-equal, and return the boolean result (0 or 1).
-
-RETURN ( a[31:0] <= b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for greater-than, and return the boolean result (0 or 1).
-
-RETURN ( a[31:0] > b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for greater-than-or-equal, and return the boolean result (0 or 1).
-
-RETURN ( a[31:0] >= b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for not-equal, and return the boolean result (0 or 1).
-
-RETURN ( a[31:0] != b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for equality, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[31:0] == b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for less-than, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[31:0] < b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for less-than-or-equal, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[31:0] <= b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for greater-than, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[31:0] > b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for greater-than-or-equal, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[31:0] >= b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE
- Compare
-
-
-
- Compare the lower single-precision (32-bit) floating-point element in "a" and "b" for not-equal, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[31:0] != b[31:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Integer
- SSE
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer, and store the result in "dst".
-
-dst[31:0] := Convert_FP32_To_Int32(a[31:0])
-
-
-
-
-
- Floating Point
- SSE
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer, and store the result in "dst".
-
-dst[31:0] := Convert_FP32_To_Int32(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- SSE
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 64-bit integer, and store the result in "dst".
-
-dst[63:0] := Convert_FP32_To_Int64(a[31:0])
-
-
-
-
-
- Floating Point
- SSE
- Convert
-
-
- Copy the lower single-precision (32-bit) floating-point element of "a" to "dst".
-
-dst[31:0] := a[31:0]
-
-
-
-
-
- Floating Point
- Integer
- SSE
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- SSE
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer with truncation, and store the result in "dst".
-
-dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- SSE
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 32-bit integer with truncation, and store the result in "dst".
-
-dst[31:0] := Convert_FP32_To_Int32_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- SSE
- Convert
-
-
- Convert the lower single-precision (32-bit) floating-point element in "a" to a 64-bit integer with truncation, and store the result in "dst".
-
-dst[63:0] := Convert_FP32_To_Int64_Truncate(a[31:0])
-
-
-
-
-
- Floating Point
- Integer
- SSE
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- SSE
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 16-bit integers, and store the results in "dst". Note: this intrinsic will generate 0x7FFF, rather than 0x8000, for input values between 0x7FFF and 0x7FFFFFFF.
-
-FOR j := 0 to 3
- i := 16*j
- k := 32*j
- IF a[k+31:k] >= FP32(0x7FFF) && a[k+31:k] <= FP32(0x7FFFFFFF)
- dst[i+15:i] := 0x7FFF
- ELSE
- dst[i+15:i] := Convert_FP32_To_Int16(a[k+31:k])
- FI
-ENDFOR
-
-
-
-
- Floating Point
- Integer
- SSE
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 8-bit integers, and store the results in lower 4 elements of "dst". Note: this intrinsic will generate 0x7F, rather than 0x80, for input values between 0x7F and 0x7FFFFFFF.
-
-FOR j := 0 to 3
- i := 8*j
- k := 32*j
- IF a[k+31:k] >= FP32(0x7F) && a[k+31:k] <= FP32(0x7FFFFFFF)
- dst[i+7:i] := 0x7F
- ELSE
- dst[i+7:i] := Convert_FP32_To_Int8(a[k+31:k])
- FI
-ENDFOR
-
-
-
-
- Floating Point
- SSE
- Set
-
-
- Copy single-precision (32-bit) floating-point element "a" to the lower element of "dst", and zero the upper 3 elements.
-
-dst[31:0] := a[31:0]
-dst[127:32] := 0
-
-
-
-
- Floating Point
- SSE
- Set
-
-
- Broadcast single-precision (32-bit) floating-point value "a" to all elements of "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-
-
-
-
- Floating Point
- SSE
- Set
-
-
- Broadcast single-precision (32-bit) floating-point value "a" to all elements of "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-
-
-
-
- Floating Point
- SSE
- Set
-
-
-
-
-
- Set packed single-precision (32-bit) floating-point elements in "dst" with the supplied values.
-
-dst[31:0] := e0
-dst[63:32] := e1
-dst[95:64] := e2
-dst[127:96] := e3
-
-
-
-
- Floating Point
- SSE
- Set
-
-
-
-
-
- Set packed single-precision (32-bit) floating-point elements in "dst" with the supplied values in reverse order.
-
-dst[31:0] := e3
-dst[63:32] := e2
-dst[95:64] := e1
-dst[127:96] := e0
-
-
-
-
- Floating Point
- SSE
- Set
-
-
- Return vector of type __m128 with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- Integer
- SSE
- Load
-
-
-
- Load 2 single-precision (32-bit) floating-point elements from memory into the upper 2 elements of "dst", and copy the lower 2 elements from "a" to "dst". "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[31:0] := a[31:0]
-dst[63:32] := a[63:32]
-dst[95:64] := MEM[mem_addr+31:mem_addr]
-dst[127:96] := MEM[mem_addr+63:mem_addr+32]
-
-
-
-
-
- Integer
- SSE
- Load
-
-
-
- Load 2 single-precision (32-bit) floating-point elements from memory into the lower 2 elements of "dst", and copy the upper 2 elements from "a" to "dst". "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[31:0] := MEM[mem_addr+31:mem_addr]
-dst[63:32] := MEM[mem_addr+63:mem_addr+32]
-dst[95:64] := a[95:64]
-dst[127:96] := a[127:96]
-
-
-
-
-
- Floating Point
- SSE
- Load
-
-
- Load a single-precision (32-bit) floating-point element from memory into the lower of "dst", and zero the upper 3 elements. "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[31:0] := MEM[mem_addr+31:mem_addr]
-dst[127:32] := 0
-
-
-
-
-
- Floating Point
- SSE
- Load
-
-
- Load a single-precision (32-bit) floating-point element from memory into all elements of "dst".
-
-dst[31:0] := MEM[mem_addr+31:mem_addr]
-dst[63:32] := MEM[mem_addr+31:mem_addr]
-dst[95:64] := MEM[mem_addr+31:mem_addr]
-dst[127:96] := MEM[mem_addr+31:mem_addr]
-
-
-
-
- Floating Point
- SSE
- Load
-
-
- Load a single-precision (32-bit) floating-point element from memory into all elements of "dst".
-
-dst[31:0] := MEM[mem_addr+31:mem_addr]
-dst[63:32] := MEM[mem_addr+31:mem_addr]
-dst[95:64] := MEM[mem_addr+31:mem_addr]
-dst[127:96] := MEM[mem_addr+31:mem_addr]
-
-
-
-
- Floating Point
- SSE
- Load
-
-
- Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point elements) from memory into "dst".
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-
-
-
-
-
- Floating Point
- SSE
- Load
-
-
- Load 128-bits (composed of 4 packed single-precision (32-bit) floating-point elements) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-
-
-
-
-
- Floating Point
- SSE
- Load
-
-
- Load 4 single-precision (32-bit) floating-point elements from memory into "dst" in reverse order. mem_addr must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-dst[31:0] := MEM[mem_addr+127:mem_addr+96]
-dst[63:32] := MEM[mem_addr+95:mem_addr+64]
-dst[95:64] := MEM[mem_addr+63:mem_addr+32]
-dst[127:96] := MEM[mem_addr+31:mem_addr]
-
-
-
-
- Floating Point
- SSE
- Store
-
-
-
- Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "a" into memory using a non-temporal memory hint.
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Integer
- SSE
- Store
-
-
-
- Store the upper 2 single-precision (32-bit) floating-point elements from "a" into memory.
-
-MEM[mem_addr+31:mem_addr] := a[95:64]
-MEM[mem_addr+63:mem_addr+32] := a[127:96]
-
-
-
-
-
- Integer
- SSE
- Store
-
-
-
- Store the lower 2 single-precision (32-bit) floating-point elements from "a" into memory.
-
-MEM[mem_addr+31:mem_addr] := a[31:0]
-MEM[mem_addr+63:mem_addr+32] := a[63:32]
-
-
-
-
-
- Floating Point
- SSE
- Store
-
-
-
- Store the lower single-precision (32-bit) floating-point element from "a" into memory. "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+31:mem_addr] := a[31:0]
-
-
-
-
-
- Floating Point
- SSE
- Store
-
-
-
- Store the lower single-precision (32-bit) floating-point element from "a" into 4 contiguous elements in memory. "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+31:mem_addr] := a[31:0]
-MEM[mem_addr+63:mem_addr+32] := a[31:0]
-MEM[mem_addr+95:mem_addr+64] := a[31:0]
-MEM[mem_addr+127:mem_addr+96] := a[31:0]
-
-
-
-
- Floating Point
- SSE
- Store
-
-
-
- Store the lower single-precision (32-bit) floating-point element from "a" into 4 contiguous elements in memory. "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+31:mem_addr] := a[31:0]
-MEM[mem_addr+63:mem_addr+32] := a[31:0]
-MEM[mem_addr+95:mem_addr+64] := a[31:0]
-MEM[mem_addr+127:mem_addr+96] := a[31:0]
-
-
-
-
- Floating Point
- SSE
- Store
-
-
-
- Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "a" into memory.
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Floating Point
- SSE
- Store
-
-
-
- Store 128-bits (composed of 4 packed single-precision (32-bit) floating-point elements) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Floating Point
- SSE
- Store
-
-
-
- Store 4 single-precision (32-bit) floating-point elements from "a" into memory in reverse order.
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+31:mem_addr] := a[127:96]
-MEM[mem_addr+63:mem_addr+32] := a[95:64]
-MEM[mem_addr+95:mem_addr+64] := a[63:32]
-MEM[mem_addr+127:mem_addr+96] := a[31:0]
-
-
-
-
-
- Floating Point
- SSE
- Move
-
-
-
- Move the lower single-precision (32-bit) floating-point element from "b" to the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := b[31:0]
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE
- Swizzle
-
-
-
-
- Shuffle single-precision (32-bit) floating-point elements in "a" using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-dst[95:64] := SELECT4(b[127:0], imm8[5:4])
-dst[127:96] := SELECT4(b[127:0], imm8[7:6])
-
-
-
-
-
- Floating Point
- SSE
- Swizzle
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the high half "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-
-
-
-
-
- Floating Point
- SSE
- Swizzle
-
-
-
- Unpack and interleave single-precision (32-bit) floating-point elements from the low half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-
-
-
-
-
- Floating Point
- SSE
- Move
-
-
-
- Move the upper 2 single-precision (32-bit) floating-point elements from "b" to the lower 2 elements of "dst", and copy the upper 2 elements from "a" to the upper 2 elements of "dst".
-
-dst[31:0] := b[95:64]
-dst[63:32] := b[127:96]
-dst[95:64] := a[95:64]
-dst[127:96] := a[127:96]
-
-
-
-
-
- Floating Point
- SSE
- Move
-
-
-
- Move the lower 2 single-precision (32-bit) floating-point elements from "b" to the upper 2 elements of "dst", and copy the lower 2 elements from "a" to the lower 2 elements of "dst".
-
-dst[31:0] := a[31:0]
-dst[63:32] := a[63:32]
-dst[95:64] := b[31:0]
-dst[127:96] := b[63:32]
-
-
-
-
-
- Floating Point
- SSE
- Miscellaneous
-
-
- Set each bit of mask "dst" based on the most significant bit of the corresponding packed single-precision (32-bit) floating-point element in "a".
-
-FOR j := 0 to 3
- i := j*32
- IF a[i+31]
- dst[j] := 1
- ELSE
- dst[j] := 0
- FI
-ENDFOR
-dst[MAX:4] := 0
-
-
-
-
-
- SSE
- General Support
-
-
-
- Allocate "size" bytes of memory, aligned to the alignment specified in "align", and return a pointer to the allocated memory. "_mm_free" should be used to free memory that is allocated with "_mm_malloc".
-
-
-
- SSE
- General Support
-
-
- Free aligned memory that was allocated with "_mm_malloc".
-
-
-
- Floating Point
- SSE
- General Support
-
-
- Return vector of type __m128 with undefined elements.
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ACOS(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ACOS(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse hyperbolic cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ACOSH(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse hyperbolic cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ACOSH(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ASIN(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ASIN(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse hyperbolic sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ASINH(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse hyperbolic sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ASINH(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ATAN(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ATAN(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
-
- Compute the inverse tangent of packed double-precision (64-bit) floating-point elements in "a" divided by packed elements in "b", and store the results in "dst" expressed in radians.
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ATAN2(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
-
- Compute the inverse tangent of packed single-precision (32-bit) floating-point elements in "a" divided by packed elements in "b", and store the results in "dst" expressed in radians.
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ATAN2(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse hyperbolic tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ATANH(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the inverse hyperbolic tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ATANH(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the cube root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := CubeRoot(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the cube root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := CubeRoot(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Probability/Statistics
-
-
- Compute the cumulative distribution function of packed double-precision (64-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := CDFNormal(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Probability/Statistics
-
-
- Compute the cumulative distribution function of packed single-precision (32-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := CDFNormal(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Probability/Statistics
-
-
- Compute the inverse cumulative distribution function of packed double-precision (64-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := InverseCDFNormal(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Probability/Statistics
-
-
- Compute the inverse cumulative distribution function of packed single-precision (32-bit) floating-point elements in "a" using the normal distribution, and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := InverseCDFNormal(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed complex numbers in "a", and store the complex results in "dst". Each complex number is composed of two adjacent single-precision (32-bit) floating-point elements, which defines the complex number "complex = vec.fp32[0] + i * vec.fp32[1]".
-
-DEFINE CEXP(a[31:0], b[31:0]) {
- result[31:0] := POW(FP32(e), a[31:0]) * COS(b[31:0])
- result[63:32] := POW(FP32(e), a[31:0]) * SIN(b[31:0])
- RETURN result
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := CEXP(a[i+31:i], a[i+63:i+32])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the natural logarithm of packed complex numbers in "a", and store the complex results in "dst". Each complex number is composed of two adjacent single-precision (32-bit) floating-point elements, which defines the complex number "complex = vec.fp32[0] + i * vec.fp32[1]".
-
-DEFINE CLOG(a[31:0], b[31:0]) {
- result[31:0] := LOG(SQRT(POW(a, 2.0) + POW(b, 2.0)))
- result[63:32] := ATAN2(b, a)
- RETURN result
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := CLOG(a[i+31:i], a[i+63:i+32])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := COS(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := COS(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := COSD(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := COSD(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the hyperbolic cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := COSH(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the hyperbolic cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := COSH(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the square root of packed complex snumbers in "a", and store the complex results in "dst". Each complex number is composed of two adjacent single-precision (32-bit) floating-point elements, which defines the complex number "complex = vec.fp32[0] + i * vec.fp32[1]".
-
-DEFINE CSQRT(a[31:0], b[31:0]) {
- sign[31:0] := (b < 0.0) ? -FP32(1.0) : FP32(1.0)
- result[31:0] := SQRT((a + SQRT(POW(a, 2.0) + POW(b, 2.0))) / 2.0)
- result[63:32] := sign * SQRT((-a + SQRT(POW(a, 2.0) + POW(b, 2.0))) / 2.0)
- RETURN result
-}
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := CSQRT(a[i+31:i], a[i+63:i+32])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed signed 8-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 15
- i := 8*j
- IF b[i+7:i] == 0
- #DE
- FI
- dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed signed 16-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 7
- i := 16*j
- IF b[i+15:i] == 0
- #DE
- FI
- dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- IF b[i+31:i] == 0
- #DE
- FI
- dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed signed 64-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- IF b[i+63:i] == 0
- #DE
- FI
- dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 15
- i := 8*j
- IF b[i+7:i] == 0
- #DE
- FI
- dst[i+7:i] := Truncate8(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 7
- i := 16*j
- IF b[i+15:i] == 0
- #DE
- FI
- dst[i+15:i] := Truncate16(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- IF b[i+31:i] == 0
- #DE
- FI
- dst[i+31:i] := Truncate32(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- IF b[i+63:i] == 0
- #DE
- FI
- dst[i+63:i] := Truncate64(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Arithmetic
-
-
- Compute the error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ERF(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Probability/Statistics
-
-
- Compute the error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ERF(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Probability/Statistics
-
-
- Compute the complementary error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := 1.0 - ERF(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Probability/Statistics
-
-
- Compute the complementary error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+63:i] := 1.0 - ERF(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Probability/Statistics
-
-
- Compute the inverse complementary error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+63:i]))
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Probability/Statistics
-
-
- Compute the inverse complementary error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+63:i] := 1.0 / (1.0 - ERF(a[i+31:i]))
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Probability/Statistics
-
-
- Compute the inverse error function of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := 1.0 / ERF(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Probability/Statistics
-
-
- Compute the inverse error function of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+63:i] := 1.0 / ERF(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := POW(e, a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := POW(FP32(e), a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the exponential value of 10 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := POW(10.0, a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the exponential value of 10 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := POW(FP32(10.0), a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the exponential value of 2 raised to the power of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := POW(2.0, a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the exponential value of 2 raised to the power of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := POW(FP32(2.0), a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed double-precision (64-bit) floating-point elements in "a", subtract one from each element, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := POW(e, a[i+63:i]) - 1.0
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the exponential value of "e" raised to the power of packed single-precision (32-bit) floating-point elements in "a", subtract one from each element, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := POW(FP32(e), a[i+31:i]) - 1.0
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
-
- Compute the length of the hypotenous of a right triangle, with the lengths of the other two sides of the triangle stored as packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := SQRT(POW(a[i+63:i], 2.0) + POW(b[i+63:i], 2.0))
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
-
- Compute the length of the hypotenous of a right triangle, with the lengths of the other two sides of the triangle stored as packed single-precision (32-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := SQRT(POW(a[i+31:i], 2.0) + POW(b[i+31:i], 2.0))
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
- FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
-
- Divide packed 32-bit integers in "a" by packed elements in "b", store the truncated results in "dst", and store the remainders as packed 32-bit integers into memory at "mem_addr".
- FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
- MEM[mem_addr+i+31:mem_addr+i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the inverse cube root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := InvCubeRoot(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the inverse cube root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := InvCubeRoot(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the inverse square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := InvSQRT(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the inverse square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := InvSQRT(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed 32-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the natural logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := LOG(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the natural logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := LOG(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the base-10 logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := LOG(a[i+63:i]) / LOG(10.0)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the base-10 logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := LOG(a[i+31:i]) / LOG(10.0)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the natural logarithm of one plus packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := LOG(1.0 + a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the natural logarithm of one plus packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := LOG(1.0 + a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the base-2 logarithm of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := LOG(a[i+63:i]) / LOG(2.0)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the base-2 logarithm of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := LOG(a[i+31:i]) / LOG(2.0)
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Convert the exponent of each packed double-precision (64-bit) floating-point element in "a" to a double-precision floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ConvertExpFP64(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Convert the exponent of each packed single-precision (32-bit) floating-point element in "a" to a single-precision floating-point number representing the integer exponent, and store the results in "dst". This intrinsic essentially calculates "floor(log2(x))" for each element.
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ConvertExpFP32(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
-
- Compute the exponential value of packed double-precision (64-bit) floating-point elements in "a" raised by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := POW(a[i+63:i], b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
-
- Compute the exponential value of packed single-precision (32-bit) floating-point elements in "a" raised by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := POW(a[i+31:i], b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed 8-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 15
- i := 8*j
- dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed 16-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 7
- i := 16*j
- dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed 32-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed 64-bit integers in "a" by packed elements in "b", and store the remainders as packed 32-bit integers in "dst".
- FOR j := 0 to 1
- i := 64*j
- dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed unsigned 8-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 15
- i := 8*j
- dst[i+7:i] := REMAINDER(a[i+7:i] / b[i+7:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed unsigned 16-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 7
- i := 16*j
- dst[i+15:i] := REMAINDER(a[i+15:i] / b[i+15:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed unsigned 64-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 1
- i := 64*j
- dst[i+63:i] := REMAINDER(a[i+63:i] / b[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := SIN(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := SIN(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
-
- Compute the sine and cosine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, store the sine in "dst", and store the cosine into memory at "mem_addr".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := SIN(a[i+63:i])
- MEM[mem_addr+i+63:mem_addr+i] := COS(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
-
- Compute the sine and cosine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, store the sine in "dst", and store the cosine into memory at "mem_addr".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := SIN(a[i+31:i])
- MEM[mem_addr+i+31:mem_addr+i] := COS(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the sine of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := SIND(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the sine of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := SIND(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the hyperbolic sine of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := SINH(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the hyperbolic sine of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := SINH(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" up to an integer value, and store the results as packed double-precision floating-point elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := CEIL(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" up to an integer value, and store the results as packed single-precision floating-point elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := CEIL(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" down to an integer value, and store the results as packed double-precision floating-point elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := FLOOR(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" down to an integer value, and store the results as packed single-precision floating-point elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := FLOOR(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" to the nearest integer value, and store the results as packed double-precision floating-point elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ROUND(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" to the nearest integer value, and store the results as packed single-precision floating-point elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ROUND(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst". Note that this intrinsic is less efficient than "_mm_sqrt_pd".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := SQRT(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Elementary Math Functions
-
-
- Compute the square root of packed single-precision (32-bit) floating-point elements in "a", and store the results in "dst". Note that this intrinsic is less efficient than "_mm_sqrt_ps".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := SQRT(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := TAN(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := TAN(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := TAND(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in degrees, and store the results in "dst".
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := TAND(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the hyperbolic tangent of packed double-precision (64-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := TANH(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Trigonometry
-
-
- Compute the hyperbolic tangent of packed single-precision (32-bit) floating-point elements in "a" expressed in radians, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := TANH(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Miscellaneous
-
-
- Truncate the packed double-precision (64-bit) floating-point elements in "a", and store the results as packed double-precision floating-point elements in "dst". This intrinsic may generate the "roundpd"/"vroundpd" instruction.
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := TRUNCATE(a[i+63:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Floating Point
- SSE
- Miscellaneous
-
-
- Truncate the packed single-precision (32-bit) floating-point elements in "a", and store the results as packed single-precision floating-point elements in "dst". This intrinsic may generate the "roundps"/"vroundps" instruction.
- FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := TRUNCATE(a[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the truncated results in "dst".
- FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", store the truncated results in "dst", and store the remainders as packed unsigned 32-bit integers into memory at "mem_addr".
- FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := TRUNCATE(a[i+31:i] / b[i+31:i])
- MEM[mem_addr+i+31:mem_addr+i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Arithmetic
-
-
-
- Divide packed unsigned 32-bit integers in "a" by packed elements in "b", and store the remainders as packed unsigned 32-bit integers in "dst".
- FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := REMAINDER(a[i+31:i] / b[i+31:i])
-ENDFOR
-dst[MAX:128] := 0
-
-
-
-
- Integer
- SSE
- Store
-
-
-
- Store 16-bit integer from the first element of "a" into memory. "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+15:mem_addr] := a[15:0]
-
-
-
-
- Integer
- SSE
- Load
-
-
- Load unaligned 64-bit integer from memory into the first element of "dst".
-
-dst[63:0] := MEM[mem_addr+63:mem_addr]
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- SSE
- Store
-
-
-
- Store 64-bit integer from the first element of "a" into memory. "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+63:mem_addr] := a[63:0]
-
-
-
-
-
- Integer
- SSE
- Load
-
-
- Load unaligned 16-bit integer from memory into the first element of "dst".
-
-dst[15:0] := MEM[mem_addr+15:mem_addr]
-dst[MAX:16] := 0
-
-
-
-
- Floating Point
- SSE2
- General Support
-
-
- Return vector of type __m128d with undefined elements.
-
-
-
- Integer
- SSE2
- General Support
-
-
- Return vector of type __m128i with undefined elements.
-
-
-
- Integer
- SSE2
- Load
-
-
- Load unaligned 32-bit integer from memory into the first element of "dst".
-
-dst[31:0] := MEM[mem_addr+31:mem_addr]
-dst[MAX:32] := 0
-
-
-
-
-
- Integer
- SSE2
- Store
-
-
-
- Store 32-bit integer from the first element of "a" into memory. "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+31:mem_addr] := a[31:0]
-
-
-
-
-
- SSE2
- General Support
-
-
- Provide a hint to the processor that the code sequence is a spin-wait loop. This can help improve the performance and power consumption of spin-wait loops.
-
-
-
-
- SSE2
- General Support
-
-
- Invalidate and flush the cache line that contains "p" from all levels of the cache hierarchy.
-
-
-
-
- SSE2
- General Support
-
-
- Perform a serializing operation on all load-from-memory instructions that were issued prior to this instruction. Guarantees that every load instruction that precedes, in program order, is globally visible before any load instruction which follows the fence in program order.
-
-
-
-
- SSE2
- General Support
-
-
- Perform a serializing operation on all load-from-memory and store-to-memory instructions that were issued prior to this instruction. Guarantees that every memory access that precedes, in program order, the memory fence instruction is globally visible before any memory instruction which follows the fence in program order.
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Add packed 8-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := a[i+7:i] + b[i+7:i]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Add packed 16-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := a[i+15:i] + b[i+15:i]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Add packed 32-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Add 64-bit integers "a" and "b", and store the result in "dst".
-
-dst[63:0] := a[63:0] + b[63:0]
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Add packed 64-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Add packed signed 8-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := Saturate8( a[i+7:i] + b[i+7:i] )
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Add packed signed 16-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := Saturate16( a[i+15:i] + b[i+15:i] )
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Add packed unsigned 8-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := SaturateU8( a[i+7:i] + b[i+7:i] )
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Add packed unsigned 16-bit integers in "a" and "b" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := SaturateU16( a[i+15:i] + b[i+15:i] )
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Probability/Statistics
-
-
-
- Average packed unsigned 8-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := (a[i+7:i] + b[i+7:i] + 1) >> 1
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Probability/Statistics
-
-
-
- Average packed unsigned 16-bit integers in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := (a[i+15:i] + b[i+15:i] + 1) >> 1
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Horizontally add adjacent pairs of intermediate 32-bit integers, and pack the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := SignExtend32(a[i+31:i+16]*b[i+31:i+16]) + SignExtend32(a[i+15:i]*b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Special Math Functions
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Special Math Functions
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Special Math Functions
-
-
-
- Compare packed signed 16-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Special Math Functions
-
-
-
- Compare packed unsigned 8-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Multiply the packed signed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 7
- i := j*16
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Multiply the packed unsigned 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the high 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 7
- i := j*16
- tmp[31:0] := a[i+15:i] * b[i+15:i]
- dst[i+15:i] := tmp[31:16]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Multiply the packed 16-bit integers in "a" and "b", producing intermediate 32-bit integers, and store the low 16 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 7
- i := j*16
- tmp[31:0] := SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])
- dst[i+15:i] := tmp[15:0]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Multiply the low unsigned 32-bit integers from "a" and "b", and store the unsigned 64-bit result in "dst".
-
-dst[63:0] := a[31:0] * b[31:0]
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Multiply the low unsigned 32-bit integers from each packed 64-bit element in "a" and "b", and store the unsigned 64-bit results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[i+31:i] * b[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
- Miscellaneous
-
-
-
- Compute the absolute differences of packed unsigned 8-bit integers in "a" and "b", then horizontally sum each consecutive 8 differences to produce two unsigned 16-bit integers, and pack these unsigned 16-bit integers in the low 16 bits of 64-bit elements in "dst".
-
-FOR j := 0 to 15
- i := j*8
- tmp[i+7:i] := ABS(a[i+7:i] - b[i+7:i])
-ENDFOR
-FOR j := 0 to 1
- i := j*64
- dst[i+15:i] := tmp[i+7:i] + tmp[i+15:i+8] + tmp[i+23:i+16] + tmp[i+31:i+24] + \
- tmp[i+39:i+32] + tmp[i+47:i+40] + tmp[i+55:i+48] + tmp[i+63:i+56]
- dst[i+63:i+16] := 0
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Subtract packed 8-bit integers in "b" from packed 8-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := a[i+7:i] - b[i+7:i]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Subtract packed 16-bit integers in "b" from packed 16-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := a[i+15:i] - b[i+15:i]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Subtract packed 32-bit integers in "b" from packed 32-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Subtract 64-bit integer "b" from 64-bit integer "a", and store the result in "dst".
-
-dst[63:0] := a[63:0] - b[63:0]
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Subtract packed 64-bit integers in "b" from packed 64-bit integers in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Subtract packed signed 8-bit integers in "b" from packed 8-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := Saturate8(a[i+7:i] - b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Subtract packed signed 16-bit integers in "b" from packed 16-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := Saturate16(a[i+15:i] - b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Subtract packed unsigned 8-bit integers in "b" from packed unsigned 8-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := SaturateU8(a[i+7:i] - b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Arithmetic
-
-
-
- Subtract packed unsigned 16-bit integers in "b" from packed unsigned 16-bit integers in "a" using saturation, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := SaturateU16(a[i+15:i] - b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift "a" left by "imm8" bytes while shifting in zeros, and store the results in "dst".
-
-tmp := imm8[7:0]
-IF tmp > 15
- tmp := 16
-FI
-dst[127:0] := a[127:0] << (tmp*8)
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift "a" left by "imm8" bytes while shifting in zeros, and store the results in "dst".
-
-tmp := imm8[7:0]
-IF tmp > 15
- tmp := 16
-FI
-dst[127:0] := a[127:0] << (tmp*8)
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift "a" right by "imm8" bytes while shifting in zeros, and store the results in "dst".
-
-tmp := imm8[7:0]
-IF tmp > 15
- tmp := 16
-FI
-dst[127:0] := a[127:0] >> (tmp*8)
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] << count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] << count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" left by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" left by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] << count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := (a[i+15] ? 0xFFFF : 0x0)
- ELSE
- dst[i+15:i] := SignExtend16(a[i+15:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in sign bits, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := (a[i+31] ? 0xFFFFFFFF : 0x0)
- ELSE
- dst[i+31:i] := SignExtend32(a[i+31:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift "a" right by "imm8" bytes while shifting in zeros, and store the results in "dst".
-
-tmp := imm8[7:0]
-IF tmp > 15
- tmp := 16
-FI
-dst[127:0] := a[127:0] >> (tmp*8)
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- IF imm8[7:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 16-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- IF count[63:0] > 15
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := ZeroExtend16(a[i+15:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF imm8[7:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 32-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF count[63:0] > 31
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := ZeroExtend32(a[i+31:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "imm8" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF imm8[7:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> imm8[7:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Shift
-
-
-
- Shift packed 64-bit integers in "a" right by "count" while shifting in zeros, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF count[63:0] > 63
- dst[i+63:i] := 0
- ELSE
- dst[i+63:i] := ZeroExtend64(a[i+63:i] >> count[63:0])
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[127:0] := (a[127:0] AND b[127:0])
-
-
-
-
-
- Integer
- SSE2
- Logical
-
-
-
- Compute the bitwise NOT of 128 bits (representing integer data) in "a" and then AND with "b", and store the result in "dst".
-
-dst[127:0] := ((NOT a[127:0]) AND b[127:0])
-
-
-
-
-
- Integer
- SSE2
- Logical
-
-
-
- Compute the bitwise OR of 128 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[127:0] := (a[127:0] OR b[127:0])
-
-
-
-
-
- Integer
- SSE2
- Logical
-
-
-
- Compute the bitwise XOR of 128 bits (representing integer data) in "a" and "b", and store the result in "dst".
-
-dst[127:0] := (a[127:0] XOR b[127:0])
-
-
-
-
-
- Integer
- SSE2
- Compare
-
-
-
- Compare packed 8-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := ( a[i+7:i] == b[i+7:i] ) ? 0xFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Compare
-
-
-
- Compare packed 16-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := ( a[i+15:i] == b[i+15:i] ) ? 0xFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Compare
-
-
-
- Compare packed 32-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] == b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := ( a[i+7:i] > b[i+7:i] ) ? 0xFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := ( a[i+15:i] > b[i+15:i] ) ? 0xFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] > b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Compare
-
-
-
- Compare packed signed 8-bit integers in "a" and "b" for less-than, and store the results in "dst". Note: This intrinsic emits the pcmpgtb instruction with the order of the operands switched.
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := ( a[i+7:i] < b[i+7:i] ) ? 0xFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Compare
-
-
-
- Compare packed signed 16-bit integers in "a" and "b" for less-than, and store the results in "dst". Note: This intrinsic emits the pcmpgtw instruction with the order of the operands switched.
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := ( a[i+15:i] < b[i+15:i] ) ? 0xFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Compare
-
-
-
- Compare packed signed 32-bit integers in "a" and "b" for less-than, and store the results in "dst". Note: This intrinsic emits the pcmpgtd instruction with the order of the operands switched.
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ( a[i+31:i] < b[i+31:i] ) ? 0xFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Convert
-
-
-
- Convert the signed 32-bit integer "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := Convert_Int32_To_FP64(b[31:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
-
- Convert the signed 64-bit integer "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := Convert_Int64_To_FP64(b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
-
- Convert the signed 64-bit integer "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := Convert_Int64_To_FP64(b[63:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := Convert_Int32_To_FP32(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Convert
-
-
- Convert packed signed 32-bit integers in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- m := j*64
- dst[m+63:m] := Convert_Int32_To_FP64(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Convert
-
-
- Copy 32-bit integer "a" to the lower elements of "dst", and zero the upper elements of "dst".
-
-dst[31:0] := a[31:0]
-dst[127:32] := 0
-
-
-
-
-
- Integer
- SSE2
- Convert
-
-
- Copy 64-bit integer "a" to the lower element of "dst", and zero the upper element.
-
-dst[63:0] := a[63:0]
-dst[127:64] := 0
-
-
-
-
-
- Integer
- SSE2
- Convert
-
-
- Copy 64-bit integer "a" to the lower element of "dst", and zero the upper element.
-
-dst[63:0] := a[63:0]
-dst[127:64] := 0
-
-
-
-
-
- Integer
- SSE2
- Convert
-
-
- Copy the lower 32-bit integer in "a" to "dst".
-
-dst[31:0] := a[31:0]
-
-
-
-
-
- Integer
- SSE2
- Convert
-
-
- Copy the lower 64-bit integer in "a" to "dst".
-
-dst[63:0] := a[63:0]
-
-
-
-
-
- Integer
- SSE2
- Convert
-
-
- Copy the lower 64-bit integer in "a" to "dst".
-
-dst[63:0] := a[63:0]
-
-
-
-
-
- Integer
- SSE2
- Set
-
-
-
- Set packed 64-bit integers in "dst" with the supplied values.
-
-dst[63:0] := e0
-dst[127:64] := e1
-
-
-
-
- Integer
- SSE2
- Set
-
-
-
- Set packed 64-bit integers in "dst" with the supplied values.
-
-dst[63:0] := e0
-dst[127:64] := e1
-
-
-
-
- Integer
- SSE2
- Set
-
-
-
-
-
- Set packed 32-bit integers in "dst" with the supplied values.
-
-dst[31:0] := e0
-dst[63:32] := e1
-dst[95:64] := e2
-dst[127:96] := e3
-
-
-
-
- Integer
- SSE2
- Set
-
-
-
-
-
-
-
-
-
- Set packed 16-bit integers in "dst" with the supplied values.
-
-dst[15:0] := e0
-dst[31:16] := e1
-dst[47:32] := e2
-dst[63:48] := e3
-dst[79:64] := e4
-dst[95:80] := e5
-dst[111:96] := e6
-dst[127:112] := e7
-
-
-
-
- Integer
- SSE2
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed 8-bit integers in "dst" with the supplied values.
-
-dst[7:0] := e0
-dst[15:8] := e1
-dst[23:16] := e2
-dst[31:24] := e3
-dst[39:32] := e4
-dst[47:40] := e5
-dst[55:48] := e6
-dst[63:56] := e7
-dst[71:64] := e8
-dst[79:72] := e9
-dst[87:80] := e10
-dst[95:88] := e11
-dst[103:96] := e12
-dst[111:104] := e13
-dst[119:112] := e14
-dst[127:120] := e15
-
-
-
-
- Integer
- SSE2
- Set
-
-
- Broadcast 64-bit integer "a" to all elements of "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-
-
-
-
- Integer
- SSE2
- Set
-
-
- Broadcast 64-bit integer "a" to all elements of "dst". This intrinsic may generate the "vpbroadcastq".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-
-
-
-
- Integer
- SSE2
- Set
-
-
- Broadcast 32-bit integer "a" to all elements of "dst". This intrinsic may generate "vpbroadcastd".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := a[31:0]
-ENDFOR
-
-
-
-
- Integer
- SSE2
- Set
-
-
- Broadcast 16-bit integer "a" to all all elements of "dst". This intrinsic may generate "vpbroadcastw".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := a[15:0]
-ENDFOR
-
-
-
-
- Integer
- SSE2
- Set
-
-
- Broadcast 8-bit integer "a" to all elements of "dst". This intrinsic may generate "vpbroadcastb".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := a[7:0]
-ENDFOR
-
-
-
-
- Integer
- SSE2
- Set
-
-
-
- Set packed 64-bit integers in "dst" with the supplied values in reverse order.
-
-dst[63:0] := e1
-dst[127:64] := e0
-
-
-
-
- Integer
- SSE2
- Set
-
-
-
-
-
- Set packed 32-bit integers in "dst" with the supplied values in reverse order.
-
-dst[31:0] := e3
-dst[63:32] := e2
-dst[95:64] := e1
-dst[127:96] := e0
-
-
-
-
- Integer
- SSE2
- Set
-
-
-
-
-
-
-
-
-
- Set packed 16-bit integers in "dst" with the supplied values in reverse order.
-
-dst[15:0] := e7
-dst[31:16] := e6
-dst[47:32] := e5
-dst[63:48] := e4
-dst[79:64] := e3
-dst[95:80] := e2
-dst[111:96] := e1
-dst[127:112] := e0
-
-
-
-
- Integer
- SSE2
- Set
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Set packed 8-bit integers in "dst" with the supplied values in reverse order.
-
-dst[7:0] := e15
-dst[15:8] := e14
-dst[23:16] := e13
-dst[31:24] := e12
-dst[39:32] := e11
-dst[47:40] := e10
-dst[55:48] := e9
-dst[63:56] := e8
-dst[71:64] := e7
-dst[79:72] := e6
-dst[87:80] := e5
-dst[95:88] := e4
-dst[103:96] := e3
-dst[111:104] := e2
-dst[119:112] := e1
-dst[127:120] := e0
-
-
-
-
- Integer
- SSE2
- Set
-
- Return vector of type __m128i with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- Integer
- SSE2
- Load
-
-
- Load 64-bit integer from memory into the first element of "dst".
-
-dst[63:0] := MEM[mem_addr+63:mem_addr]
-dst[MAX:64] := 0
-
-
-
-
-
- Integer
- SSE2
- Load
-
-
- Load 128-bits of integer data from memory into "dst".
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-
-
-
-
-
- Integer
- SSE2
- Load
-
-
- Load 128-bits of integer data from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-
-
-
-
-
- Integer
- SSE2
- Store
-
-
-
-
- Conditionally store 8-bit integer elements from "a" into memory using "mask" (elements are not stored when the highest bit is not set in the corresponding element) and a non-temporal memory hint. "mem_addr" does not need to be aligned on any particular boundary.
-
-FOR j := 0 to 15
- i := j*8
- IF mask[i+7]
- MEM[mem_addr+i+7:mem_addr+i] := a[i+7:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE2
- Store
-
-
-
- Store 128-bits of integer data from "a" into memory.
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Integer
- SSE2
- Store
-
-
-
- Store 128-bits of integer data from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Integer
- SSE2
- Store
-
-
-
- Store 64-bit integer from the first element of "a" into memory.
-
-MEM[mem_addr+63:mem_addr] := a[63:0]
-
-
-
-
-
- Integer
- SSE2
- Store
-
-
-
- Store 128-bits of integer data from "a" into memory using a non-temporal memory hint.
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Integer
- SSE2
- Store
-
-
-
- Store 32-bit integer "a" into memory using a non-temporal hint to minimize cache pollution. If the cache line containing address "mem_addr" is already in the cache, the cache will be updated.
-
-MEM[mem_addr+31:mem_addr] := a[31:0]
-
-
-
-
-
- Integer
- SSE2
- Store
-
-
-
- Store 64-bit integer "a" into memory using a non-temporal hint to minimize cache pollution. If the cache line containing address "mem_addr" is already in the cache, the cache will be updated.
-
-MEM[mem_addr+63:mem_addr] := a[63:0]
-
-
-
-
-
- Integer
- SSE2
- Miscellaneous
-
-
- Copy the lower 64-bit integer in "a" to "dst".
-
-dst[63:0] := a[63:0]
-
-
-
-
-
- Integer
- SSE2
- Move
-
-
- Copy the 64-bit integer "a" to the lower element of "dst", and zero the upper element.
-
-dst[63:0] := a[63:0]
-dst[127:64] := 0
-
-
-
-
-
- Integer
- SSE2
- Move
-
-
- Copy the lower 64-bit integer in "a" to the lower element of "dst", and zero the upper element.
-
-dst[63:0] := a[63:0]
-dst[127:64] := 0
-
-
-
-
-
- Integer
- SSE2
- Miscellaneous
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using signed saturation, and store the results in "dst".
-
-dst[7:0] := Saturate8(a[15:0])
-dst[15:8] := Saturate8(a[31:16])
-dst[23:16] := Saturate8(a[47:32])
-dst[31:24] := Saturate8(a[63:48])
-dst[39:32] := Saturate8(a[79:64])
-dst[47:40] := Saturate8(a[95:80])
-dst[55:48] := Saturate8(a[111:96])
-dst[63:56] := Saturate8(a[127:112])
-dst[71:64] := Saturate8(b[15:0])
-dst[79:72] := Saturate8(b[31:16])
-dst[87:80] := Saturate8(b[47:32])
-dst[95:88] := Saturate8(b[63:48])
-dst[103:96] := Saturate8(b[79:64])
-dst[111:104] := Saturate8(b[95:80])
-dst[119:112] := Saturate8(b[111:96])
-dst[127:120] := Saturate8(b[127:112])
-
-
-
-
-
- Integer
- SSE2
- Miscellaneous
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using signed saturation, and store the results in "dst".
-
-dst[15:0] := Saturate16(a[31:0])
-dst[31:16] := Saturate16(a[63:32])
-dst[47:32] := Saturate16(a[95:64])
-dst[63:48] := Saturate16(a[127:96])
-dst[79:64] := Saturate16(b[31:0])
-dst[95:80] := Saturate16(b[63:32])
-dst[111:96] := Saturate16(b[95:64])
-dst[127:112] := Saturate16(b[127:96])
-
-
-
-
-
- Integer
- SSE2
- Miscellaneous
-
-
-
- Convert packed signed 16-bit integers from "a" and "b" to packed 8-bit integers using unsigned saturation, and store the results in "dst".
-
-dst[7:0] := SaturateU8(a[15:0])
-dst[15:8] := SaturateU8(a[31:16])
-dst[23:16] := SaturateU8(a[47:32])
-dst[31:24] := SaturateU8(a[63:48])
-dst[39:32] := SaturateU8(a[79:64])
-dst[47:40] := SaturateU8(a[95:80])
-dst[55:48] := SaturateU8(a[111:96])
-dst[63:56] := SaturateU8(a[127:112])
-dst[71:64] := SaturateU8(b[15:0])
-dst[79:72] := SaturateU8(b[31:16])
-dst[87:80] := SaturateU8(b[47:32])
-dst[95:88] := SaturateU8(b[63:48])
-dst[103:96] := SaturateU8(b[79:64])
-dst[111:104] := SaturateU8(b[95:80])
-dst[119:112] := SaturateU8(b[111:96])
-dst[127:120] := SaturateU8(b[127:112])
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Extract a 16-bit integer from "a", selected with "imm8", and store the result in the lower element of "dst".
-
-dst[15:0] := (a[127:0] >> (imm8[2:0] * 16))[15:0]
-dst[31:16] := 0
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
-
- Copy "a" to "dst", and insert the 16-bit integer "i" into "dst" at the location specified by "imm8".
-
-dst[127:0] := a[127:0]
-sel := imm8[2:0]*16
-dst[sel+15:sel] := i[15:0]
-
-
-
-
-
- Integer
- SSE2
- Miscellaneous
-
-
- Create mask from the most significant bit of each 8-bit element in "a", and store the result in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[j] := a[i+7]
-ENDFOR
-dst[MAX:16] := 0
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Shuffle 32-bit integers in "a" using the control in "imm8", and store the results in "dst".
-
-DEFINE SELECT4(src, control) {
- CASE(control[1:0]) OF
- 0: tmp[31:0] := src[31:0]
- 1: tmp[31:0] := src[63:32]
- 2: tmp[31:0] := src[95:64]
- 3: tmp[31:0] := src[127:96]
- ESAC
- RETURN tmp[31:0]
-}
-dst[31:0] := SELECT4(a[127:0], imm8[1:0])
-dst[63:32] := SELECT4(a[127:0], imm8[3:2])
-dst[95:64] := SELECT4(a[127:0], imm8[5:4])
-dst[127:96] := SELECT4(a[127:0], imm8[7:6])
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Shuffle 16-bit integers in the high 64 bits of "a" using the control in "imm8". Store the results in the high 64 bits of "dst", with the low 64 bits being copied from from "a" to "dst".
-
-dst[63:0] := a[63:0]
-dst[79:64] := (a >> (imm8[1:0] * 16))[79:64]
-dst[95:80] := (a >> (imm8[3:2] * 16))[79:64]
-dst[111:96] := (a >> (imm8[5:4] * 16))[79:64]
-dst[127:112] := (a >> (imm8[7:6] * 16))[79:64]
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Shuffle 16-bit integers in the low 64 bits of "a" using the control in "imm8". Store the results in the low 64 bits of "dst", with the high 64 bits being copied from from "a" to "dst".
-
-dst[15:0] := (a >> (imm8[1:0] * 16))[15:0]
-dst[31:16] := (a >> (imm8[3:2] * 16))[15:0]
-dst[47:32] := (a >> (imm8[5:4] * 16))[15:0]
-dst[63:48] := (a >> (imm8[7:6] * 16))[15:0]
-dst[127:64] := a[127:64]
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Unpack and interleave 8-bit integers from the high half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[71:64]
- dst[15:8] := src2[71:64]
- dst[23:16] := src1[79:72]
- dst[31:24] := src2[79:72]
- dst[39:32] := src1[87:80]
- dst[47:40] := src2[87:80]
- dst[55:48] := src1[95:88]
- dst[63:56] := src2[95:88]
- dst[71:64] := src1[103:96]
- dst[79:72] := src2[103:96]
- dst[87:80] := src1[111:104]
- dst[95:88] := src2[111:104]
- dst[103:96] := src1[119:112]
- dst[111:104] := src2[119:112]
- dst[119:112] := src1[127:120]
- dst[127:120] := src2[127:120]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_BYTES(a[127:0], b[127:0])
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Unpack and interleave 16-bit integers from the high half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[79:64]
- dst[31:16] := src2[79:64]
- dst[47:32] := src1[95:80]
- dst[63:48] := src2[95:80]
- dst[79:64] := src1[111:96]
- dst[95:80] := src2[111:96]
- dst[111:96] := src1[127:112]
- dst[127:112] := src2[127:112]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_WORDS(a[127:0], b[127:0])
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Unpack and interleave 32-bit integers from the high half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[95:64]
- dst[63:32] := src2[95:64]
- dst[95:64] := src1[127:96]
- dst[127:96] := src2[127:96]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_DWORDS(a[127:0], b[127:0])
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Unpack and interleave 64-bit integers from the high half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Unpack and interleave 8-bit integers from the low half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_BYTES(src1[127:0], src2[127:0]) {
- dst[7:0] := src1[7:0]
- dst[15:8] := src2[7:0]
- dst[23:16] := src1[15:8]
- dst[31:24] := src2[15:8]
- dst[39:32] := src1[23:16]
- dst[47:40] := src2[23:16]
- dst[55:48] := src1[31:24]
- dst[63:56] := src2[31:24]
- dst[71:64] := src1[39:32]
- dst[79:72] := src2[39:32]
- dst[87:80] := src1[47:40]
- dst[95:88] := src2[47:40]
- dst[103:96] := src1[55:48]
- dst[111:104] := src2[55:48]
- dst[119:112] := src1[63:56]
- dst[127:120] := src2[63:56]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_BYTES(a[127:0], b[127:0])
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Unpack and interleave 16-bit integers from the low half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_WORDS(src1[127:0], src2[127:0]) {
- dst[15:0] := src1[15:0]
- dst[31:16] := src2[15:0]
- dst[47:32] := src1[31:16]
- dst[63:48] := src2[31:16]
- dst[79:64] := src1[47:32]
- dst[95:80] := src2[47:32]
- dst[111:96] := src1[63:48]
- dst[127:112] := src2[63:48]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_WORDS(a[127:0], b[127:0])
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Unpack and interleave 32-bit integers from the low half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_DWORDS(src1[127:0], src2[127:0]) {
- dst[31:0] := src1[31:0]
- dst[63:32] := src2[31:0]
- dst[95:64] := src1[63:32]
- dst[127:96] := src2[63:32]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_DWORDS(a[127:0], b[127:0])
-
-
-
-
-
- Integer
- SSE2
- Swizzle
-
-
-
- Unpack and interleave 64-bit integers from the low half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-
-
-
-
-
- Floating Point
- SSE2
- Arithmetic
-
-
-
- Add the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := a[63:0] + b[63:0]
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Arithmetic
-
-
-
- Add packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Arithmetic
-
-
-
- Divide the lower double-precision (64-bit) floating-point element in "a" by the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := a[63:0] / b[63:0]
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Arithmetic
-
-
-
- Divide packed double-precision (64-bit) floating-point elements in "a" by packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- dst[i+63:i] := a[i+63:i] / b[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Special Math Functions
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the maximum value in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := MAX(a[63:0], b[63:0])
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Special Math Functions
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := MAX(a[i+63:i], b[i+63:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Special Math Functions
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b", store the minimum value in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := MIN(a[63:0], b[63:0])
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Special Math Functions
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := MIN(a[i+63:i], b[i+63:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Arithmetic
-
-
-
- Multiply the lower double-precision (64-bit) floating-point element in "a" and "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := a[63:0] * b[63:0]
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Arithmetic
-
-
-
- Multiply packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[i+63:i] * b[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Elementary Math Functions
-
-
-
- Compute the square root of the lower double-precision (64-bit) floating-point element in "b", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := SQRT(b[63:0])
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Elementary Math Functions
-
-
- Compute the square root of packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := SQRT(a[i+63:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Arithmetic
-
-
-
- Subtract the lower double-precision (64-bit) floating-point element in "b" from the lower double-precision (64-bit) floating-point element in "a", store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := a[63:0] - b[63:0]
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Arithmetic
-
-
-
- Subtract packed double-precision (64-bit) floating-point elements in "b" from packed double-precision (64-bit) floating-point elements in "a", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Logical
-
-
-
- Compute the bitwise AND of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (a[i+63:i] AND b[i+63:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Logical
-
-
-
- Compute the bitwise NOT of packed double-precision (64-bit) floating-point elements in "a" and then AND with "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ((NOT a[i+63:i]) AND b[i+63:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Logical
-
-
-
- Compute the bitwise OR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[i+63:i] OR b[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Logical
-
-
-
- Compute the bitwise XOR of packed double-precision (64-bit) floating-point elements in "a" and "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[i+63:i] XOR b[i+63:i]
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" for equality, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (a[63:0] == b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" for less-than, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (a[63:0] < b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" for less-than-or-equal, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (a[63:0] <= b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" for greater-than, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (a[63:0] > b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" for greater-than-or-equal, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (a[63:0] >= b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" to see if neither is NaN, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- dst[63:0] := (a[63:0] != NaN AND b[63:0] != NaN) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" to see if either is NaN, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- dst[63:0] := (a[63:0] == NaN OR b[63:0] == NaN) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" for not-equal, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (a[63:0] != b[63:0]) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" for not-less-than, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (!(a[63:0] < b[63:0])) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" for not-less-than-or-equal, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (!(a[63:0] <= b[63:0])) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" for not-greater-than, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (!(a[63:0] > b[63:0])) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point elements in "a" and "b" for not-greater-than-or-equal, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := (!(a[63:0] >= b[63:0])) ? 0xFFFFFFFFFFFFFFFF : 0
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (a[i+63:i] == b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for less-than, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (a[i+63:i] < b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for less-than-or-equal, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (a[i+63:i] <= b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (a[i+63:i] > b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for greater-than-or-equal, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (a[i+63:i] >= b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" to see if neither is NaN, and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (a[i+63:i] != NaN AND b[i+63:i] != NaN) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" to see if either is NaN, and store the results in "dst".
- FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (a[i+63:i] == NaN OR b[i+63:i] == NaN) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for not-equal, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (a[i+63:i] != b[i+63:i]) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for not-less-than, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (!(a[i+63:i] < b[i+63:i])) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for not-less-than-or-equal, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (!(a[i+63:i] <= b[i+63:i])) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for not-greater-than, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (!(a[i+63:i] > b[i+63:i])) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Compare
-
-
-
- Compare packed double-precision (64-bit) floating-point elements in "a" and "b" for not-greater-than-or-equal, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := (!(a[i+63:i] >= b[i+63:i])) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for equality, and return the boolean result (0 or 1).
-
-RETURN ( a[63:0] == b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for less-than, and return the boolean result (0 or 1).
-
-RETURN ( a[63:0] < b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for less-than-or-equal, and return the boolean result (0 or 1).
-
-RETURN ( a[63:0] <= b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for greater-than, and return the boolean result (0 or 1).
-
-RETURN ( a[63:0] > b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for greater-than-or-equal, and return the boolean result (0 or 1).
-
-RETURN ( a[63:0] >= b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for not-equal, and return the boolean result (0 or 1).
-
-RETURN ( a[63:0] != b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for equality, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[63:0] == b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for less-than, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[63:0] < b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for less-than-or-equal, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[63:0] <= b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for greater-than, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[63:0] > b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for greater-than-or-equal, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[63:0] >= b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- Flag
- SSE2
- Compare
-
-
-
- Compare the lower double-precision (64-bit) floating-point element in "a" and "b" for not-equal, and return the boolean result (0 or 1). This instruction will not signal an exception for QNaNs.
-
-RETURN ( a[63:0] != b[63:0] ) ? 1 : 0
-
-
-
-
-
- Floating Point
- SSE2
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed single-precision (32-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_FP32(a[k+63:k])
-ENDFOR
-dst[127:64] := 0
-
-
-
-
-
- Floating Point
- SSE2
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed double-precision (64-bit) floating-point elements, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 32*j
- dst[i+63:i] := Convert_FP32_To_FP64(a[k+31:k])
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_Int32(a[k+63:k])
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 32-bit integer, and store the result in "dst".
-
-dst[31:0] := Convert_FP64_To_Int32(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 64-bit integer, and store the result in "dst".
-
-dst[63:0] := Convert_FP64_To_Int64(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 64-bit integer, and store the result in "dst".
-
-dst[63:0] := Convert_FP64_To_Int64(a[63:0])
-
-
-
-
-
- Floating Point
- SSE2
- Convert
-
-
-
- Convert the lower double-precision (64-bit) floating-point element in "b" to a single-precision (32-bit) floating-point element, store the result in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := Convert_FP64_To_FP32(b[63:0])
-dst[127:32] := a[127:32]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- SSE2
- Convert
-
-
- Copy the lower double-precision (64-bit) floating-point element of "a" to "dst".
-
-dst[63:0] := a[63:0]
-
-
-
-
-
- Floating Point
- SSE2
- Convert
-
-
-
- Convert the lower single-precision (32-bit) floating-point element in "b" to a double-precision (64-bit) floating-point element, store the result in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := Convert_FP32_To_FP64(b[31:0])
-dst[127:64] := a[127:64]
-dst[MAX:128] := 0
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[k+63:k])
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 32-bit integer with truncation, and store the result in "dst".
-
-dst[31:0] := Convert_FP64_To_Int32_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 64-bit integer with truncation, and store the result in "dst".
-
-dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert the lower double-precision (64-bit) floating-point element in "a" to a 64-bit integer with truncation, and store the result in "dst".
-
-dst[63:0] := Convert_FP64_To_Int64_Truncate(a[63:0])
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert packed single-precision (32-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- dst[i+31:i] := Convert_FP32_To_Int32_Truncate(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_Int32(a[k+63:k])
-ENDFOR
-
-
-
-
-
- Floating Point
- Integer
- SSE2
- Convert
-
-
- Convert packed double-precision (64-bit) floating-point elements in "a" to packed 32-bit integers with truncation, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 32*j
- k := 64*j
- dst[i+31:i] := Convert_FP64_To_Int32_Truncate(a[k+63:k])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE2
- Set
-
-
- Copy double-precision (64-bit) floating-point element "a" to the lower element of "dst", and zero the upper element.
-
-dst[63:0] := a[63:0]
-dst[127:64] := 0
-
-
-
-
- Floating Point
- SSE2
- Set
-
-
- Broadcast double-precision (64-bit) floating-point value "a" to all elements of "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-
-
-
-
- Floating Point
- SSE2
- Set
-
-
- Broadcast double-precision (64-bit) floating-point value "a" to all elements of "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := a[63:0]
-ENDFOR
-
-
-
-
- Floating Point
- SSE2
- Set
-
-
-
- Set packed double-precision (64-bit) floating-point elements in "dst" with the supplied values.
-
-dst[63:0] := e0
-dst[127:64] := e1
-
-
-
-
- Floating Point
- SSE2
- Set
-
-
-
- Set packed double-precision (64-bit) floating-point elements in "dst" with the supplied values in reverse order.
-
-dst[63:0] := e1
-dst[127:64] := e0
-
-
-
-
- Floating Point
- SSE2
- Set
-
-
- Return vector of type __m128d with all elements set to zero.
-
-dst[MAX:0] := 0
-
-
-
-
-
- Floating Point
- SSE2
- Load
-
-
- Load 128-bits (composed of 2 packed double-precision (64-bit) floating-point elements) from memory into "dst".
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-
-
-
-
-
- Floating Point
- SSE2
- Load
-
-
- Load a double-precision (64-bit) floating-point element from memory into both elements of "dst".
-
-dst[63:0] := MEM[mem_addr+63:mem_addr]
-dst[127:64] := MEM[mem_addr+63:mem_addr]
-
-
-
-
-
- Floating Point
- SSE2
- Load
-
-
- Load a double-precision (64-bit) floating-point element from memory into both elements of "dst".
-
-dst[63:0] := MEM[mem_addr+63:mem_addr]
-dst[127:64] := MEM[mem_addr+63:mem_addr]
-
-
-
-
-
- Floating Point
- SSE2
- Load
-
-
- Load 2 double-precision (64-bit) floating-point elements from memory into "dst" in reverse order. mem_addr must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-dst[63:0] := MEM[mem_addr+127:mem_addr+64]
-dst[127:64] := MEM[mem_addr+63:mem_addr]
-
-
-
-
-
- Floating Point
- SSE2
- Load
-
-
- Load 128-bits (composed of 2 packed double-precision (64-bit) floating-point elements) from memory into "dst".
- "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-
-
-
-
-
- Floating Point
- SSE2
- Load
-
-
- Load a double-precision (64-bit) floating-point element from memory into the lower of "dst", and zero the upper element. "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[63:0] := MEM[mem_addr+63:mem_addr]
-dst[127:64] := 0
-
-
-
-
-
- Floating Point
- SSE2
- Load
-
-
-
- Load a double-precision (64-bit) floating-point element from memory into the upper element of "dst", and copy the lower element from "a" to "dst". "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[63:0] := a[63:0]
-dst[127:64] := MEM[mem_addr+63:mem_addr]
-
-
-
-
-
- Floating Point
- SSE2
- Load
-
-
-
- Load a double-precision (64-bit) floating-point element from memory into the lower element of "dst", and copy the upper element from "a" to "dst". "mem_addr" does not need to be aligned on any particular boundary.
-
-dst[63:0] := MEM[mem_addr+63:mem_addr]
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Store
-
-
-
- Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "a" into memory using a non-temporal memory hint.
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Floating Point
- SSE2
- Store
-
-
-
- Store the lower double-precision (64-bit) floating-point element from "a" into memory. "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+63:mem_addr] := a[63:0]
-
-
-
-
-
- Floating Point
- SSE2
- Store
-
-
-
- Store the lower double-precision (64-bit) floating-point element from "a" into 2 contiguous elements in memory. "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+63:mem_addr] := a[63:0]
-MEM[mem_addr+127:mem_addr+64] := a[63:0]
-
-
-
-
- Floating Point
- SSE2
- Store
-
-
-
- Store the lower double-precision (64-bit) floating-point element from "a" into 2 contiguous elements in memory. "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+63:mem_addr] := a[63:0]
-MEM[mem_addr+127:mem_addr+64] := a[63:0]
-
-
-
-
- Floating Point
- SSE2
- Store
-
-
-
- Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "a" into memory.
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Floating Point
- SSE2
- Store
-
-
-
- Store 128-bits (composed of 2 packed double-precision (64-bit) floating-point elements) from "a" into memory.
- "mem_addr" does not need to be aligned on any particular boundary.
-
-MEM[mem_addr+127:mem_addr] := a[127:0]
-
-
-
-
-
- Floating Point
- SSE2
- Store
-
-
-
- Store 2 double-precision (64-bit) floating-point elements from "a" into memory in reverse order.
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-MEM[mem_addr+63:mem_addr] := a[127:64]
-MEM[mem_addr+127:mem_addr+64] := a[63:0]
-
-
-
-
- Floating Point
- SSE2
- Store
-
-
-
- Store the upper double-precision (64-bit) floating-point element from "a" into memory.
-
-MEM[mem_addr+63:mem_addr] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Store
-
-
-
- Store the lower double-precision (64-bit) floating-point element from "a" into memory.
-
-MEM[mem_addr+63:mem_addr] := a[63:0]
-
-
-
-
-
- Floating Point
- SSE2
- Swizzle
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the high half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_HIGH_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[127:64]
- dst[127:64] := src2[127:64]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_HIGH_QWORDS(a[127:0], b[127:0])
-
-
-
-
-
- Floating Point
- SSE2
- Swizzle
-
-
-
- Unpack and interleave double-precision (64-bit) floating-point elements from the low half of "a" and "b", and store the results in "dst".
-
-DEFINE INTERLEAVE_QWORDS(src1[127:0], src2[127:0]) {
- dst[63:0] := src1[63:0]
- dst[127:64] := src2[63:0]
- RETURN dst[127:0]
-}
-dst[127:0] := INTERLEAVE_QWORDS(a[127:0], b[127:0])
-
-
-
-
-
- Floating Point
- SSE2
- Miscellaneous
-
-
- Set each bit of mask "dst" based on the most significant bit of the corresponding packed double-precision (64-bit) floating-point element in "a".
-
-FOR j := 0 to 1
- i := j*64
- IF a[i+63]
- dst[j] := 1
- ELSE
- dst[j] := 0
- FI
-ENDFOR
-dst[MAX:2] := 0
-
-
-
-
-
- Floating Point
- SSE2
- Swizzle
-
-
-
-
- Shuffle double-precision (64-bit) floating-point elements using the control in "imm8", and store the results in "dst".
-
-dst[63:0] := (imm8[0] == 0) ? a[63:0] : a[127:64]
-dst[127:64] := (imm8[1] == 0) ? b[63:0] : b[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Move
-
-
-
- Move the lower double-precision (64-bit) floating-point element from "b" to the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := b[63:0]
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE2
- Cast
-
-
- Cast vector of type __m128d to type __m128. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- Integer
- SSE2
- Cast
-
-
- Cast vector of type __m128d to type __m128i. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- SSE2
- Cast
-
-
- Cast vector of type __m128 to type __m128d. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- Integer
- SSE2
- Cast
-
-
- Cast vector of type __m128 to type __m128i. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- SSE2
- Cast
-
-
- Cast vector of type __m128i to type __m128d. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- SSE2
- Cast
-
-
- Cast vector of type __m128i to type __m128. This intrinsic is only used for compilation and does not generate any instructions, thus it has zero latency.
-
-
-
- Floating Point
- SSE3
- Arithmetic
-
-
-
- Alternatively add and subtract packed single-precision (32-bit) floating-point elements in "a" to/from packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF ((j & 1) == 0)
- dst[i+31:i] := a[i+31:i] - b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i] + b[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE3
- Arithmetic
-
-
-
- Alternatively add and subtract packed double-precision (64-bit) floating-point elements in "a" to/from packed elements in "b", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF ((j & 1) == 0)
- dst[i+63:i] := a[i+63:i] - b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i] + b[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE3
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of double-precision (64-bit) floating-point elements in "a" and "b", and pack the results in "dst".
-
-dst[63:0] := a[127:64] + a[63:0]
-dst[127:64] := b[127:64] + b[63:0]
-
-
-
-
-
- Floating Point
- SSE3
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of single-precision (32-bit) floating-point elements in "a" and "b", and pack the results in "dst".
-
-dst[31:0] := a[63:32] + a[31:0]
-dst[63:32] := a[127:96] + a[95:64]
-dst[95:64] := b[63:32] + b[31:0]
-dst[127:96] := b[127:96] + b[95:64]
-
-
-
-
-
- Floating Point
- SSE3
- Arithmetic
-
-
-
- Horizontally subtract adjacent pairs of double-precision (64-bit) floating-point elements in "a" and "b", and pack the results in "dst".
-
-dst[63:0] := a[63:0] - a[127:64]
-dst[127:64] := b[63:0] - b[127:64]
-
-
-
-
-
- Floating Point
- SSE3
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of single-precision (32-bit) floating-point elements in "a" and "b", and pack the results in "dst".
-
-dst[31:0] := a[31:0] - a[63:32]
-dst[63:32] := a[95:64] - a[127:96]
-dst[95:64] := b[31:0] - b[63:32]
-dst[127:96] := b[95:64] - b[127:96]
-
-
-
-
-
- Integer
- SSE3
- Load
-
-
- Load 128-bits of integer data from unaligned memory into "dst". This intrinsic may perform better than "_mm_loadu_si128" when the data crosses a cache line boundary.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-
-
-
-
-
- Floating Point
- SSE3
- Move
-
-
- Duplicate the low double-precision (64-bit) floating-point element from "a", and store the results in "dst".
-
-dst[63:0] := a[63:0]
-dst[127:64] := a[63:0]
-
-
-
-
-
- Floating Point
- SSE3
- Load
-
-
- Load a double-precision (64-bit) floating-point element from memory into both elements of "dst".
-
-dst[63:0] := MEM[mem_addr+63:mem_addr]
-dst[127:64] := MEM[mem_addr+63:mem_addr]
-
-
-
-
-
- Floating Point
- SSE3
- Move
-
-
- Duplicate odd-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst".
-
-dst[31:0] := a[63:32]
-dst[63:32] := a[63:32]
-dst[95:64] := a[127:96]
-dst[127:96] := a[127:96]
-
-
-
-
-
- Floating Point
- SSE3
- Move
-
-
- Duplicate even-indexed single-precision (32-bit) floating-point elements from "a", and store the results in "dst".
-
-dst[31:0] := a[31:0]
-dst[63:32] := a[31:0]
-dst[95:64] := a[95:64]
-dst[127:96] := a[95:64]
-
-
-
-
-
- Floating Point
- SSE4.1
- Swizzle
-
-
-
-
- Blend packed double-precision (64-bit) floating-point elements from "a" and "b" using control mask "imm8", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF imm8[j]
- dst[i+63:i] := b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE4.1
- Swizzle
-
-
-
-
- Blend packed single-precision (32-bit) floating-point elements from "a" and "b" using control mask "imm8", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF imm8[j]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE4.1
- Swizzle
-
-
-
-
- Blend packed double-precision (64-bit) floating-point elements from "a" and "b" using "mask", and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- IF mask[i+63]
- dst[i+63:i] := b[i+63:i]
- ELSE
- dst[i+63:i] := a[i+63:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE4.1
- Swizzle
-
-
-
-
- Blend packed single-precision (32-bit) floating-point elements from "a" and "b" using "mask", and store the results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- IF mask[i+31]
- dst[i+31:i] := b[i+31:i]
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Swizzle
-
-
-
-
- Blend packed 8-bit integers from "a" and "b" using "mask", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- IF mask[i+7]
- dst[i+7:i] := b[i+7:i]
- ELSE
- dst[i+7:i] := a[i+7:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Swizzle
-
-
-
-
- Blend packed 16-bit integers from "a" and "b" using control mask "imm8", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- IF imm8[j]
- dst[i+15:i] := b[i+15:i]
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE4.1
- Arithmetic
-
-
-
-
- Conditionally multiply the packed double-precision (64-bit) floating-point elements in "a" and "b" using the high 4 bits in "imm8", sum the four products, and conditionally store the sum in "dst" using the low 4 bits of "imm8".
-
-DEFINE DP(a[127:0], b[127:0], imm8[7:0]) {
- FOR j := 0 to 1
- i := j*64
- IF imm8[(4+j)%8]
+ FOR j := 0 to 3
+ i := j*32
+ IF imm8[j%8]
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := tmp2[i+31:i]
+ FI
+ ENDFOR
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", and insert the lower 8-bit integer from "i" into "dst" at
+ the location specified by "imm8".
+
+ dst[127:0] := a[127:0]
+ sel := imm8[3:0]*8
+ dst[sel+7:sel] := i[7:0]
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", and insert the 32-bit integer "i" into "dst" at the location
+ specified by "imm8".
+
+ dst[127:0] := a[127:0]
+ sel := imm8[1:0]*32
+ dst[sel+31:sel] := i[31:0]
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+
+ Copy "a" to "dst", and insert the 64-bit integer "i" into "dst" at the location
+ specified by "imm8".
+
+ dst[127:0] := a[127:0]
+ sel := imm8[0]*64
+ dst[sel+63:sel] := i[63:0]
+
+
+ SSE4.1
+
+ Swizzle
+
+
+
+
+
+
+ Conditionally multiply the packed double-precision (64-bit) floating-point
+ elements in "a" and "b" using the high 4 bits in "imm8", sum the four products, and
+ conditionally store the sum in "dst" using the low 4 bits of "imm8".
+
+ DEFINE DP(a[127:0], b[127:0], imm8[7:0]) {
+ FOR j := 0 to 1
+ i := j*64
+ IF imm8[(4+j)%8]
temp[i+63:i] := a[i+63:i] * b[i+63:i]
- ELSE
+ ELSE
temp[i+63:i] := 0.0
- FI
- ENDFOR
-
- sum[63:0] := temp[127:64] + temp[63:0]
-
- FOR j := 0 to 1
- i := j*64
- IF imm8[j%8]
+ FI
+ ENDFOR
+
+ sum[63:0] := temp[127:64] + temp[63:0]
+
+ FOR j := 0 to 1
+ i := j*64
+ IF imm8[j%8]
tmpdst[i+63:i] := sum[63:0]
- ELSE
+ ELSE
tmpdst[i+63:i] := 0.0
- FI
- ENDFOR
- RETURN tmpdst[127:0]
-}
-dst[127:0] := DP(a[127:0], b[127:0], imm8[7:0])
-
-
-
-
-
- Floating Point
- SSE4.1
- Arithmetic
-
-
-
-
- Conditionally multiply the packed single-precision (32-bit) floating-point elements in "a" and "b" using the high 4 bits in "imm8", sum the four products, and conditionally store the sum in "dst" using the low 4 bits of "imm8".
-
-DEFINE DP(a[127:0], b[127:0], imm8[7:0]) {
- FOR j := 0 to 3
- i := j*32
- IF imm8[(4+j)%8]
+ FI
+ ENDFOR
+ RETURN tmpdst[127:0]
+ }
+ dst[127:0] := DP(a[127:0], b[127:0], imm8[7:0])
+
+
+ SSE4.1
+
+ Arithmetic
+
+
+
+
+
+
+ Conditionally multiply the packed single-precision (32-bit) floating-point
+ elements in "a" and "b" using the high 4 bits in "imm8", sum the four products, and
+ conditionally store the sum in "dst" using the low 4 bits of "imm8".
+
+ DEFINE DP(a[127:0], b[127:0], imm8[7:0]) {
+ FOR j := 0 to 3
+ i := j*32
+ IF imm8[(4+j)%8]
temp[i+31:i] := a[i+31:i] * b[i+31:i]
- ELSE
+ ELSE
temp[i+31:i] := 0
- FI
- ENDFOR
-
- sum[31:0] := (temp[127:96] + temp[95:64]) + (temp[63:32] + temp[31:0])
-
- FOR j := 0 to 3
- i := j*32
- IF imm8[j%8]
+ FI
+ ENDFOR
+
+ sum[31:0] := (temp[127:96] + temp[95:64]) + (temp[63:32] + temp[31:0])
+
+ FOR j := 0 to 3
+ i := j*32
+ IF imm8[j%8]
tmpdst[i+31:i] := sum[31:0]
- ELSE
+ ELSE
tmpdst[i+31:i] := 0
- FI
- ENDFOR
- RETURN tmpdst[127:0]
-}
-dst[127:0] := DP(a[127:0], b[127:0], imm8[7:0])
-
-
-
-
-
- Floating Point
- SSE4.1
- Swizzle
-
-
-
- Extract a single-precision (32-bit) floating-point element from "a", selected with "imm8", and store the result in "dst".
-
-dst[31:0] := (a[127:0] >> (imm8[1:0] * 32))[31:0]
-
-
-
-
-
- Integer
- SSE4.1
- Swizzle
-
-
-
- Extract an 8-bit integer from "a", selected with "imm8", and store the result in the lower element of "dst".
-
-dst[7:0] := (a[127:0] >> (imm8[3:0] * 8))[7:0]
-dst[31:8] := 0
-
-
-
-
-
- Integer
- SSE4.1
- Swizzle
-
-
-
- Extract a 32-bit integer from "a", selected with "imm8", and store the result in "dst".
-
-dst[31:0] := (a[127:0] >> (imm8[1:0] * 32))[31:0]
-
-
-
-
-
- Integer
- SSE4.1
- Swizzle
-
-
-
- Extract a 64-bit integer from "a", selected with "imm8", and store the result in "dst".
-
-dst[63:0] := (a[127:0] >> (imm8[0] * 64))[63:0]
-
-
-
-
-
- Floating Point
- SSE4.1
- Swizzle
-
-
-
-
- Copy "a" to "tmp", then insert a single-precision (32-bit) floating-point element from "b" into "tmp" using the control in "imm8". Store "tmp" to "dst" using the mask in "imm8" (elements are zeroed out when the corresponding bit is set).
-
-tmp2[127:0] := a[127:0]
-CASE (imm8[7:6]) OF
-0: tmp1[31:0] := b[31:0]
-1: tmp1[31:0] := b[63:32]
-2: tmp1[31:0] := b[95:64]
-3: tmp1[31:0] := b[127:96]
-ESAC
-CASE (imm8[5:4]) OF
-0: tmp2[31:0] := tmp1[31:0]
-1: tmp2[63:32] := tmp1[31:0]
-2: tmp2[95:64] := tmp1[31:0]
-3: tmp2[127:96] := tmp1[31:0]
-ESAC
-FOR j := 0 to 3
- i := j*32
- IF imm8[j%8]
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := tmp2[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Swizzle
-
-
-
-
- Copy "a" to "dst", and insert the lower 8-bit integer from "i" into "dst" at the location specified by "imm8".
-
-dst[127:0] := a[127:0]
-sel := imm8[3:0]*8
-dst[sel+7:sel] := i[7:0]
-
-
-
-
-
- Integer
- SSE4.1
- Swizzle
-
-
-
-
- Copy "a" to "dst", and insert the 32-bit integer "i" into "dst" at the location specified by "imm8".
-
-dst[127:0] := a[127:0]
-sel := imm8[1:0]*32
-dst[sel+31:sel] := i[31:0]
-
-
-
-
-
- Integer
- SSE4.1
- Swizzle
-
-
-
-
- Copy "a" to "dst", and insert the 64-bit integer "i" into "dst" at the location specified by "imm8".
-
-dst[127:0] := a[127:0]
-sel := imm8[0]*64
-dst[sel+63:sel] := i[63:0]
-
-
-
-
-
- Integer
- SSE4.1
- Special Math Functions
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Special Math Functions
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Special Math Functions
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Special Math Functions
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed maximum values in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Special Math Functions
-
-
-
- Compare packed signed 8-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Special Math Functions
-
-
-
- Compare packed signed 32-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Special Math Functions
-
-
-
- Compare packed unsigned 32-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Special Math Functions
-
-
-
- Compare packed unsigned 16-bit integers in "a" and "b", and store packed minimum values in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
- Miscellaneous
-
-
-
- Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit integers using unsigned saturation, and store the results in "dst".
-
-dst[15:0] := SaturateU16(a[31:0])
-dst[31:16] := SaturateU16(a[63:32])
-dst[47:32] := SaturateU16(a[95:64])
-dst[63:48] := SaturateU16(a[127:96])
-dst[79:64] := SaturateU16(b[31:0])
-dst[95:80] := SaturateU16(b[63:32])
-dst[111:96] := SaturateU16(b[95:64])
-dst[127:112] := SaturateU16(b[127:96])
-
-
-
-
-
- Integer
- SSE4.1
- Compare
-
-
-
- Compare packed 64-bit integers in "a" and "b" for equality, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ( a[i+63:i] == b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- l := j*16
- dst[l+15:l] := SignExtend16(a[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Sign extend packed 8-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 8*j
- dst[i+31:i] := SignExtend32(a[k+7:k])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 8*j
- dst[i+63:i] := SignExtend64(a[k+7:k])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 16*j
- dst[i+31:i] := SignExtend32(a[k+15:k])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Sign extend packed 16-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 16*j
- dst[i+63:i] := SignExtend64(a[k+15:k])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 32*j
- dst[i+63:i] := SignExtend64(a[k+31:k])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers, and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- l := j*16
- dst[l+15:l] := ZeroExtend16(a[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Zero extend packed unsigned 8-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 8*j
- dst[i+31:i] := ZeroExtend32(a[k+7:k])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Zero extend packed unsigned 8-bit integers in the low 8 byte sof "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 8*j
- dst[i+63:i] := ZeroExtend64(a[k+7:k])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers, and store the results in "dst".
-
-FOR j := 0 to 3
- i := 32*j
- k := 16*j
- dst[i+31:i] := ZeroExtend32(a[k+15:k])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Zero extend packed unsigned 16-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 16*j
- dst[i+63:i] := ZeroExtend64(a[k+15:k])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Convert
-
-
- Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers, and store the results in "dst".
-
-FOR j := 0 to 1
- i := 64*j
- k := 32*j
- dst[i+63:i] := ZeroExtend64(a[k+31:k])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Arithmetic
-
-
-
- Multiply the low signed 32-bit integers from each packed 64-bit element in "a" and "b", and store the signed 64-bit results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.1
- Arithmetic
-
-
-
- Multiply the packed 32-bit integers in "a" and "b", producing intermediate 64-bit integers, and store the low 32 bits of the intermediate integers in "dst".
-
-FOR j := 0 to 3
- i := j*32
- tmp[63:0] := a[i+31:i] * b[i+31:i]
- dst[i+31:i] := tmp[31:0]
-ENDFOR
-
-
-
-
-
- Integer
- Flag
- SSE4.1
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing integer data) in "a" and "b", and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set "CF" to 0. Return the "ZF" value.
-
-IF ((a[127:0] AND b[127:0]) == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-IF (((NOT a[127:0]) AND b[127:0]) == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-RETURN ZF
-
-
-
-
-
- Integer
- Flag
- SSE4.1
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing integer data) in "a" and "b", and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set "CF" to 0. Return the "CF" value.
-
-IF ((a[127:0] AND b[127:0]) == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-IF (((NOT a[127:0]) AND b[127:0]) == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-RETURN CF
-
-
-
-
-
- Integer
- Flag
- SSE4.1
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing integer data) in "a" and "b", and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF" values are zero, otherwise return 0.
-
-IF ((a[127:0] AND b[127:0]) == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-IF (((NOT a[127:0]) AND b[127:0]) == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-IF (ZF == 0 && CF == 0)
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Integer
- Flag
- SSE4.1
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing integer data) in "a" and "mask", and return 1 if the result is zero, otherwise return 0.
-
-IF ((a[127:0] AND mask[127:0]) == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-dst := ZF
-
-
-
-
-
- Integer
- Flag
- SSE4.1
- Logical
-
-
-
- Compute the bitwise AND of 128 bits (representing integer data) in "a" and "mask", and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise NOT of "a" and then AND with "mask", and set "CF" to 1 if the result is zero, otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF" values are zero, otherwise return 0.
-
-IF ((a[127:0] AND mask[127:0]) == 0)
- ZF := 1
-ELSE
- ZF := 0
-FI
-IF (((NOT a[127:0]) AND mask[127:0]) == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-IF (ZF == 0 && CF == 0)
- dst := 1
-ELSE
- dst := 0
-FI
-
-
-
-
-
- Integer
- Flag
- SSE4.1
- Logical
-
-
- Compute the bitwise NOT of "a" and then AND with a 128-bit vector containing all 1's, and return 1 if the result is zero, otherwise return 0.
-
-FOR j := 0 to 127
- tmp[j] := 1
-ENDFOR
-IF (((NOT a[127:0]) AND tmp[127:0]) == 0)
- CF := 1
-ELSE
- CF := 0
-FI
-dst := CF
-
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" using the "rounding" parameter, and store the results as packed double-precision floating-point elements in "dst".
- [round_note]
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ROUND(a[i+63:i], rounding)
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" down to an integer value, and store the results as packed double-precision floating-point elements in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := FLOOR(a[i+63:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
- Round the packed double-precision (64-bit) floating-point elements in "a" up to an integer value, and store the results as packed double-precision floating-point elements in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := CEIL(a[i+63:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" using the "rounding" parameter, and store the results as packed single-precision floating-point elements in "dst".
- [round_note]
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ROUND(a[i+31:i], rounding)
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" down to an integer value, and store the results as packed single-precision floating-point elements in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := FLOOR(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
- Round the packed single-precision (32-bit) floating-point elements in "a" up to an integer value, and store the results as packed single-precision floating-point elements in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := CEIL(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
-
-
- Round the lower double-precision (64-bit) floating-point element in "b" using the "rounding" parameter, store the result as a double-precision floating-point element in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
- [round_note]
-
-dst[63:0] := ROUND(b[63:0], rounding)
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
-
- Round the lower double-precision (64-bit) floating-point element in "b" down to an integer value, store the result as a double-precision floating-point element in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := FLOOR(b[63:0])
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
-
- Round the lower double-precision (64-bit) floating-point element in "b" up to an integer value, store the result as a double-precision floating-point element in the lower element of "dst", and copy the upper element from "a" to the upper element of "dst".
-
-dst[63:0] := CEIL(b[63:0])
-dst[127:64] := a[127:64]
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
-
-
- Round the lower single-precision (32-bit) floating-point element in "b" using the "rounding" parameter, store the result as a single-precision floating-point element in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
- [round_note]
-
-dst[31:0] := ROUND(b[31:0], rounding)
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
-
- Round the lower single-precision (32-bit) floating-point element in "b" down to an integer value, store the result as a single-precision floating-point element in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := FLOOR(b[31:0])
-dst[127:32] := a[127:32]
-
-
-
-
-
- Floating Point
- SSE4.1
- Special Math Functions
-
-
-
- Round the lower single-precision (32-bit) floating-point element in "b" up to an integer value, store the result as a single-precision floating-point element in the lower element of "dst", and copy the upper 3 packed elements from "a" to the upper elements of "dst".
-
-dst[31:0] := CEIL(b[31:0])
-dst[127:32] := a[127:32]
-
-
-
-
-
- Integer
- SSE4.1
- Miscellaneous
-
-
- Horizontally compute the minimum amongst the packed unsigned 16-bit integers in "a", store the minimum and index in "dst", and zero the remaining bits in "dst".
-
-index[2:0] := 0
-min[15:0] := a[15:0]
-FOR j := 0 to 7
- i := j*16
- IF a[i+15:i] < min[15:0]
- index[2:0] := j
- min[15:0] := a[i+15:i]
- FI
-ENDFOR
-dst[15:0] := min[15:0]
-dst[18:16] := index[2:0]
-dst[127:19] := 0
-
-
-
-
-
- Integer
- SSE4.1
- Arithmetic
- Miscellaneous
-
-
-
-
- Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit integers in "a" compared to those in "b", and store the 16-bit results in "dst".
- Eight SADs are performed using one quadruplet from "b" and eight quadruplets from "a". One quadruplet is selected from "b" starting at on the offset specified in "imm8". Eight quadruplets are formed from sequential 8-bit integers selected from "a" starting at the offset specified in "imm8".
-
-DEFINE MPSADBW(a[127:0], b[127:0], imm8[2:0]) {
- a_offset := imm8[2]*32
- b_offset := imm8[1:0]*32
- FOR j := 0 to 7
- i := j*8
- k := a_offset+i
- l := b_offset
- tmp[i*2+15:i*2] := ABS(Signed(a[k+7:k] - b[l+7:l])) + ABS(Signed(a[k+15:k+8] - b[l+15:l+8])) + \
- ABS(Signed(a[k+23:k+16] - b[l+23:l+16])) + ABS(Signed(a[k+31:k+24] - b[l+31:l+24]))
- ENDFOR
- RETURN tmp[127:0]
-}
-dst[127:0] := MPSADBW(a[127:0], b[127:0], imm8[2:0])
-
-
-
-
-
- Integer
- SSE4.1
- Load
-
-
- Load 128-bits of integer data from memory into "dst" using a non-temporal memory hint.
- "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may be generated.
-
-dst[127:0] := MEM[mem_addr+127:mem_addr]
-
-
-
-
-
- SSE4.2
- String Compare
-
-
-
-
- Compare packed strings with implicit lengths in "a" and "b" using the control in "imm8", and store the generated mask in "dst".
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-BoolRes := 0
-// compare all characters
-aInvalid := 0
-bInvalid := 0
-FOR i := 0 to UpperBound
- m := i*size
- FOR j := 0 to UpperBound
- n := j*size
- BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
-
- // invalidate characters after EOS
- IF a[m+size-1:m] == 0
+ FI
+ ENDFOR
+ RETURN tmpdst[127:0]
+ }
+ dst[127:0] := DP(a[127:0], b[127:0], imm8[7:0])
+
+
+ SSE4.1
+
+ Arithmetic
+
+
+
+
+
+ Multiply the low signed 32-bit integers from each packed 64-bit element in "a"
+ and "b", and store the signed 64-bit results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := SignExtend64(a[i+31:i]) * SignExtend64(b[i+31:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Arithmetic
+
+
+
+
+
+ Multiply the packed 32-bit integers in "a" and "b", producing intermediate
+ 64-bit integers, and store the low 32 bits of the intermediate integers in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ tmp[63:0] := a[i+31:i] * b[i+31:i]
+ dst[i+31:i] := tmp[31:0]
+ ENDFOR
+
+
+ SSE4.1
+
+ Arithmetic
+
+
+ Miscellaneous
+
+
+
+
+ Compute the sum of absolute differences (SADs) of quadruplets of unsigned 8-bit
+ integers in "a" compared to those in "b", and store the 16-bit results in "dst".
+ Eight SADs are performed using one quadruplet from "b" and eight quadruplets from "a".
+ One quadruplet is selected from "b" starting at on the offset specified in "imm8". Eight
+ quadruplets are formed from sequential 8-bit integers selected from "a" starting at the
+ offset specified in "imm8".
+
+ DEFINE MPSADBW(a[127:0], b[127:0], imm8[2:0]) {
+ a_offset := imm8[2]*32
+ b_offset := imm8[1:0]*32
+ FOR j := 0 to 7
+ i := j*8
+ k := a_offset+i
+ l := b_offset
+ tmp[i*2+15:i*2] := ABS(Signed(a[k+7:k] - b[l+7:l])) + ABS(Signed(a[k+15:k+8] -
+ b[l+15:l+8])) + \
+ ABS(Signed(a[k+23:k+16] - b[l+23:l+16])) + ABS(Signed(a[k+31:k+24] - b[l+31:l+24]))
+ ENDFOR
+ RETURN tmp[127:0]
+ }
+ dst[127:0] := MPSADBW(a[127:0], b[127:0], imm8[2:0])
+
+
+ SSE4.1
+
+ Arithmetic
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := MAX(a[i+7:i], b[i+7:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed maximum
+ values in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ maximum values in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := MAX(a[i+31:i], b[i+31:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ maximum values in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := MAX(a[i+15:i], b[i+15:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 8-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := MIN(a[i+7:i], b[i+7:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed signed 32-bit integers in "a" and "b", and store packed minimum
+ values in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 32-bit integers in "a" and "b", and store packed
+ minimum values in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := MIN(a[i+31:i], b[i+31:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Compare packed unsigned 16-bit integers in "a" and "b", and store packed
+ minimum values in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := MIN(a[i+15:i], b[i+15:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" using
+ the "rounding" parameter, and store the results as packed double-precision
+ floating-point elements in "dst".
+ [round_note]
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ROUND(a[i+63:i], rounding)
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed double-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := FLOOR(a[i+63:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+ Round the packed double-precision (64-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed double-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := CEIL(a[i+63:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" using
+ the "rounding" parameter, and store the results as packed single-precision
+ floating-point elements in "dst".
+ [round_note]
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ROUND(a[i+31:i], rounding)
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" down
+ to an integer value, and store the results as packed single-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := FLOOR(a[i+31:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+ Round the packed single-precision (32-bit) floating-point elements in "a" up to
+ an integer value, and store the results as packed single-precision floating-point
+ elements in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := CEIL(a[i+31:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+
+ Round the lower double-precision (64-bit) floating-point element in "b" using
+ the "rounding" parameter, store the result as a double-precision floating-point element
+ in the lower element of "dst", and copy the upper element from "a" to the upper element
+ of "dst".
+ [round_note]
+
+ dst[63:0] := ROUND(b[63:0], rounding)
+ dst[127:64] := a[127:64]
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Round the lower double-precision (64-bit) floating-point element in "b" down to
+ an integer value, store the result as a double-precision floating-point element in the
+ lower element of "dst", and copy the upper element from "a" to the upper element of
+ "dst".
+
+ dst[63:0] := FLOOR(b[63:0])
+ dst[127:64] := a[127:64]
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Round the lower double-precision (64-bit) floating-point element in "b" up to
+ an integer value, store the result as a double-precision floating-point element in the
+ lower element of "dst", and copy the upper element from "a" to the upper element of
+ "dst".
+
+ dst[63:0] := CEIL(b[63:0])
+ dst[127:64] := a[127:64]
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+
+ Round the lower single-precision (32-bit) floating-point element in "b" using
+ the "rounding" parameter, store the result as a single-precision floating-point element
+ in the lower element of "dst", and copy the upper 3 packed elements from "a" to the
+ upper elements of "dst".
+ [round_note]
+
+ dst[31:0] := ROUND(b[31:0], rounding)
+ dst[127:32] := a[127:32]
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Round the lower single-precision (32-bit) floating-point element in "b" down to
+ an integer value, store the result as a single-precision floating-point element in the
+ lower element of "dst", and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ dst[31:0] := FLOOR(b[31:0])
+ dst[127:32] := a[127:32]
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+
+
+
+ Round the lower single-precision (32-bit) floating-point element in "b" up to
+ an integer value, store the result as a single-precision floating-point element in the
+ lower element of "dst", and copy the upper 3 packed elements from "a" to the upper
+ elements of "dst".
+
+ dst[31:0] := CEIL(b[31:0])
+ dst[127:32] := a[127:32]
+
+
+ SSE4.1
+
+ Special Math Functions
+
+
+ Miscellaneous
+
+
+
+ Convert packed signed 32-bit integers from "a" and "b" to packed 16-bit
+ integers using unsigned saturation, and store the results in "dst".
+
+ dst[15:0] := SaturateU16(a[31:0])
+ dst[31:16] := SaturateU16(a[63:32])
+ dst[47:32] := SaturateU16(a[95:64])
+ dst[63:48] := SaturateU16(a[127:96])
+ dst[79:64] := SaturateU16(b[31:0])
+ dst[95:80] := SaturateU16(b[63:32])
+ dst[111:96] := SaturateU16(b[95:64])
+ dst[127:112] := SaturateU16(b[127:96])
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 16-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ l := j*16
+ dst[l+15:l] := SignExtend16(a[i+7:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Sign extend packed 8-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 8*j
+ dst[i+31:i] := SignExtend32(a[k+7:k])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Sign extend packed 8-bit integers in the low 8 bytes of "a" to packed 64-bit
+ integers, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 8*j
+ dst[i+63:i] := SignExtend64(a[k+7:k])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 32-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 16*j
+ dst[i+31:i] := SignExtend32(a[k+15:k])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Sign extend packed 16-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 16*j
+ dst[i+63:i] := SignExtend64(a[k+15:k])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Sign extend packed 32-bit integers in "a" to packed 64-bit integers, and store
+ the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 32*j
+ dst[i+63:i] := SignExtend64(a[k+31:k])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 16-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ l := j*16
+ dst[l+15:l] := ZeroExtend16(a[i+7:i])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 8*j
+ dst[i+31:i] := ZeroExtend32(a[k+7:k])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 8-bit integers in the low 8 byte sof "a" to packed
+ 64-bit integers, and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 8*j
+ dst[i+63:i] := ZeroExtend64(a[k+7:k])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 32-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 3
+ i := 32*j
+ k := 16*j
+ dst[i+31:i] := ZeroExtend32(a[k+15:k])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 16-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 16*j
+ dst[i+63:i] := ZeroExtend64(a[k+15:k])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+ Zero extend packed unsigned 32-bit integers in "a" to packed 64-bit integers,
+ and store the results in "dst".
+
+ FOR j := 0 to 1
+ i := 64*j
+ k := 32*j
+ dst[i+63:i] := ZeroExtend64(a[k+31:k])
+ ENDFOR
+
+
+ SSE4.1
+
+ Convert
+
+
+
+
+
+ Compare packed 64-bit integers in "a" and "b" for equality, and store the
+ results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ( a[i+63:i] == b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE4.1
+
+ Compare
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing integer data) in "a" and "b",
+ and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise
+ NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set
+ "CF" to 0. Return the "ZF" value.
+
+ IF ((a[127:0] AND b[127:0]) == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ IF (((NOT a[127:0]) AND b[127:0]) == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ RETURN ZF
+
+
+ SSE4.1
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing integer data) in "a" and "b",
+ and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise
+ NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set
+ "CF" to 0. Return the "CF" value.
+
+ IF ((a[127:0] AND b[127:0]) == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ IF (((NOT a[127:0]) AND b[127:0]) == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ RETURN CF
+
+
+ SSE4.1
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing integer data) in "a" and "b",
+ and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the bitwise
+ NOT of "a" and then AND with "b", and set "CF" to 1 if the result is zero, otherwise set
+ "CF" to 0. Return 1 if both the "ZF" and "CF" values are zero, otherwise return 0.
+
+ IF ((a[127:0] AND b[127:0]) == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ IF (((NOT a[127:0]) AND b[127:0]) == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ IF (ZF == 0 && CF == 0)
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ SSE4.1
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing integer data) in "a" and
+ "mask", and return 1 if the result is zero, otherwise return 0.
+
+ IF ((a[127:0] AND mask[127:0]) == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ dst := ZF
+
+
+ SSE4.1
+
+ Logical
+
+
+
+
+
+ Compute the bitwise AND of 128 bits (representing integer data) in "a" and
+ "mask", and set "ZF" to 1 if the result is zero, otherwise set "ZF" to 0. Compute the
+ bitwise NOT of "a" and then AND with "mask", and set "CF" to 1 if the result is zero,
+ otherwise set "CF" to 0. Return 1 if both the "ZF" and "CF" values are zero, otherwise
+ return 0.
+
+ IF ((a[127:0] AND mask[127:0]) == 0)
+ ZF := 1
+ ELSE
+ ZF := 0
+ FI
+ IF (((NOT a[127:0]) AND mask[127:0]) == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ IF (ZF == 0 && CF == 0)
+ dst := 1
+ ELSE
+ dst := 0
+ FI
+
+
+ SSE4.1
+
+ Logical
+
+
+
+
+ Compute the bitwise NOT of "a" and then AND with a 128-bit vector containing
+ all 1's, and return 1 if the result is zero, otherwise return 0.
+
+ FOR j := 0 to 127
+ tmp[j] := 1
+ ENDFOR
+ IF (((NOT a[127:0]) AND tmp[127:0]) == 0)
+ CF := 1
+ ELSE
+ CF := 0
+ FI
+ dst := CF
+
+
+
+ SSE4.1
+
+ Logical
+
+
+
+
+ Horizontally compute the minimum amongst the packed unsigned 16-bit integers in
+ "a", store the minimum and index in "dst", and zero the remaining bits in "dst".
+
+ index[2:0] := 0
+ min[15:0] := a[15:0]
+ FOR j := 0 to 7
+ i := j*16
+ IF a[i+15:i] < min[15:0]
+ index[2:0] := j
+ min[15:0] := a[i+15:i]
+ FI
+ ENDFOR
+ dst[15:0] := min[15:0]
+ dst[18:16] := index[2:0]
+ dst[127:19] := 0
+
+
+ SSE4.1
+
+ Miscellaneous
+
+
+
+
+ Load 128-bits of integer data from memory into "dst" using a non-temporal
+ memory hint.
+ "mem_addr" must be aligned on a 16-byte boundary or a general-protection exception may
+ be generated.
+
+ dst[127:0] := MEM[mem_addr+127:mem_addr]
+
+
+ SSE4.1
+
+ Load
+
+
+
+
+
+
+
+
+ Compare packed strings with implicit lengths in "a" and "b" using the control
+ in "imm8", and store the generated mask in "dst".
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ BoolRes := 0
+ // compare all characters
+ aInvalid := 0
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ m := i*size
+ FOR j := 0 to UpperBound
+ n := j*size
+ BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
+
+ // invalidate characters after EOS
+ IF a[m+size-1:m] == 0
aInvalid := 1
- FI
- IF b[n+size-1:n] == 0
+ FI
+ IF b[n+size-1:n] == 0
bInvalid := 1
- FI
-
- // override comparisons for invalid characters
- CASE (imm8[3:2]) OF
- 0: // equal any
+ FI
+
+ // override comparisons for invalid characters
+ CASE (imm8[3:2]) OF
+ 0: // equal any
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 1: // ranges
+ 1: // ranges
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 2: // equal each
+ 2: // equal each
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
FI
- 3: // equal ordered
+ 3: // equal ordered
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
- FI
- ESAC
- ENDFOR
-ENDFOR
-// aggregate results
-CASE (imm8[3:2]) OF
-0: // equal any
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ BoolRes.word[i].bit[j] := 1
+ FI
+ ESAC
+ ENDFOR
+ ENDFOR
+ // aggregate results
+ CASE (imm8[3:2]) OF
+ 0: // equal any
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR BoolRes.word[i].bit[j]
- ENDFOR
- ENDFOR
-1: // ranges
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ ENDFOR
+ ENDFOR
+ 1: // ranges
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR (BoolRes.word[i].bit[j] AND BoolRes.word[i].bit[j+1])
j += 2
- ENDFOR
- ENDFOR
-2: // equal each
- IntRes1 := 0
- FOR i := 0 to UpperBound
- IntRes1[i] := BoolRes.word[i].bit[i]
- ENDFOR
-3: // equal ordered
- IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
- FOR i := 0 to UpperBound
- k := i
- FOR j := 0 to UpperBound-i
+ ENDFOR
+ ENDFOR
+ 2: // equal each
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ IntRes1[i] := BoolRes.word[i].bit[i]
+ ENDFOR
+ 3: // equal ordered
+ IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
+ FOR i := 0 to UpperBound
+ k := i
+ FOR j := 0 to UpperBound-i
IntRes1[i] := IntRes1[i] AND BoolRes.word[k].bit[j]
k := k+1
- ENDFOR
- ENDFOR
-ESAC
-// optionally negate results
-bInvalid := 0
-FOR i := 0 to UpperBound
- IF imm8[4]
- IF imm8[5] // only negate valid
+ ENDFOR
+ ENDFOR
+ ESAC
+ // optionally negate results
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ IF imm8[4]
+ IF imm8[5] // only negate valid
IF b[n+size-1:n] == 0
- bInvalid := 1
+ bInvalid := 1
FI
IF bInvalid // invalid, don't negate
- IntRes2[i] := IntRes1[i]
+ IntRes2[i] := IntRes1[i]
ELSE // valid, negate
- IntRes2[i] := -1 XOR IntRes1[i]
+ IntRes2[i] := -1 XOR IntRes1[i]
FI
- ELSE // negate all
+ ELSE // negate all
IntRes2[i] := -1 XOR IntRes1[i]
- FI
- ELSE // don't negate
- IntRes2[i] := IntRes1[i]
- FI
-ENDFOR
-// output
-IF imm8[6] // byte / word mask
- FOR i := 0 to UpperBound
- j := i*size
- IF IntRes2[i]
+ FI
+ ELSE // don't negate
+ IntRes2[i] := IntRes1[i]
+ FI
+ ENDFOR
+ // output
+ IF imm8[6] // byte / word mask
+ FOR i := 0 to UpperBound
+ j := i*size
+ IF IntRes2[i]
dst[j+size-1:j] := (imm8[0] ? 0xFF : 0xFFFF)
- ELSE
+ ELSE
dst[j+size-1:j] := 0
- FI
- ENDFOR
-ELSE // bit mask
- dst[UpperBound:0] := IntRes2[UpperBound:0]
- dst[127:UpperBound+1] := 0
-FI
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
- Compare packed strings with implicit lengths in "a" and "b" using the control in "imm8", and store the generated index in "dst".
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-BoolRes := 0
-// compare all characters
-aInvalid := 0
-bInvalid := 0
-FOR i := 0 to UpperBound
- m := i*size
- FOR j := 0 to UpperBound
- n := j*size
- BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
-
- // invalidate characters after EOS
- IF a[m+size-1:m] == 0
+ FI
+ ENDFOR
+ ELSE // bit mask
+ dst[UpperBound:0] := IntRes2[UpperBound:0]
+ dst[127:UpperBound+1] := 0
+ FI
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+ Compare packed strings with implicit lengths in "a" and "b" using the control
+ in "imm8", and store the generated index in "dst".
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ BoolRes := 0
+ // compare all characters
+ aInvalid := 0
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ m := i*size
+ FOR j := 0 to UpperBound
+ n := j*size
+ BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
+
+ // invalidate characters after EOS
+ IF a[m+size-1:m] == 0
aInvalid := 1
- FI
- IF b[n+size-1:n] == 0
+ FI
+ IF b[n+size-1:n] == 0
bInvalid := 1
- FI
-
- // override comparisons for invalid characters
- CASE (imm8[3:2]) OF
- 0: // equal any
+ FI
+
+ // override comparisons for invalid characters
+ CASE (imm8[3:2]) OF
+ 0: // equal any
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 1: // ranges
+ 1: // ranges
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 2: // equal each
+ 2: // equal each
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
FI
- 3: // equal ordered
+ 3: // equal ordered
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
- FI
- ESAC
- ENDFOR
-ENDFOR
-// aggregate results
-CASE (imm8[3:2]) OF
-0: // equal any
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ BoolRes.word[i].bit[j] := 1
+ FI
+ ESAC
+ ENDFOR
+ ENDFOR
+ // aggregate results
+ CASE (imm8[3:2]) OF
+ 0: // equal any
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR BoolRes.word[i].bit[j]
- ENDFOR
- ENDFOR
-1: // ranges
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ ENDFOR
+ ENDFOR
+ 1: // ranges
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR (BoolRes.word[i].bit[j] AND BoolRes.word[i].bit[j+1])
j += 2
- ENDFOR
- ENDFOR
-2: // equal each
- IntRes1 := 0
- FOR i := 0 to UpperBound
- IntRes1[i] := BoolRes.word[i].bit[i]
- ENDFOR
-3: // equal ordered
- IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
- FOR i := 0 to UpperBound
- k := i
- FOR j := 0 to UpperBound-i
+ ENDFOR
+ ENDFOR
+ 2: // equal each
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ IntRes1[i] := BoolRes.word[i].bit[i]
+ ENDFOR
+ 3: // equal ordered
+ IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
+ FOR i := 0 to UpperBound
+ k := i
+ FOR j := 0 to UpperBound-i
IntRes1[i] := IntRes1[i] AND BoolRes.word[k].bit[j]
k := k+1
- ENDFOR
- ENDFOR
-ESAC
-// optionally negate results
-bInvalid := 0
-FOR i := 0 to UpperBound
- IF imm8[4]
- IF imm8[5] // only negate valid
+ ENDFOR
+ ENDFOR
+ ESAC
+ // optionally negate results
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ IF imm8[4]
+ IF imm8[5] // only negate valid
IF b[n+size-1:n] == 0
- bInvalid := 1
+ bInvalid := 1
FI
IF bInvalid // invalid, don't negate
- IntRes2[i] := IntRes1[i]
+ IntRes2[i] := IntRes1[i]
ELSE // valid, negate
- IntRes2[i] := -1 XOR IntRes1[i]
+ IntRes2[i] := -1 XOR IntRes1[i]
FI
- ELSE // negate all
+ ELSE // negate all
IntRes2[i] := -1 XOR IntRes1[i]
- FI
- ELSE // don't negate
- IntRes2[i] := IntRes1[i]
- FI
-ENDFOR
-// output
-IF imm8[6] // most significant bit
- tmp := UpperBound
- dst := tmp
- DO WHILE ((tmp >= 0) AND a[tmp] == 0)
- tmp := tmp - 1
- dst := tmp
- OD
-ELSE // least significant bit
- tmp := 0
- dst := tmp
- DO WHILE ((tmp <= UpperBound) AND a[tmp] == 0)
- tmp := tmp + 1
- dst := tmp
- OD
-FI
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
- Compare packed strings with implicit lengths in "a" and "b" using the control in "imm8", and returns 1 if any character in "b" was null, and 0 otherwise.
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-bInvalid := 0
-FOR j := 0 to UpperBound
- n := j*size
- IF b[n+size-1:n] == 0
- bInvalid := 1
- FI
-ENDFOR
-dst := bInvalid
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
- Compare packed strings with implicit lengths in "a" and "b" using the control in "imm8", and returns 1 if the resulting mask was non-zero, and 0 otherwise.
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-BoolRes := 0
-// compare all characters
-aInvalid := 0
-bInvalid := 0
-FOR i := 0 to UpperBound
- m := i*size
- FOR j := 0 to UpperBound
- n := j*size
- BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
-
- // invalidate characters after EOS
- IF a[m+size-1:m] == 0
+ FI
+ ELSE // don't negate
+ IntRes2[i] := IntRes1[i]
+ FI
+ ENDFOR
+ // output
+ IF imm8[6] // most significant bit
+ tmp := UpperBound
+ dst := tmp
+ DO WHILE ((tmp >= 0) AND a[tmp] == 0)
+ tmp := tmp - 1
+ dst := tmp
+ OD
+ ELSE // least significant bit
+ tmp := 0
+ dst := tmp
+ DO WHILE ((tmp <= UpperBound) AND a[tmp] == 0)
+ tmp := tmp + 1
+ dst := tmp
+ OD
+ FI
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+ Compare packed strings with implicit lengths in "a" and "b" using the control
+ in "imm8", and returns 1 if any character in "b" was null, and 0 otherwise.
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ bInvalid := 0
+ FOR j := 0 to UpperBound
+ n := j*size
+ IF b[n+size-1:n] == 0
+ bInvalid := 1
+ FI
+ ENDFOR
+ dst := bInvalid
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+ Compare packed strings with implicit lengths in "a" and "b" using the control
+ in "imm8", and returns 1 if the resulting mask was non-zero, and 0 otherwise.
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ BoolRes := 0
+ // compare all characters
+ aInvalid := 0
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ m := i*size
+ FOR j := 0 to UpperBound
+ n := j*size
+ BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
+
+ // invalidate characters after EOS
+ IF a[m+size-1:m] == 0
aInvalid := 1
- FI
- IF b[n+size-1:n] == 0
+ FI
+ IF b[n+size-1:n] == 0
bInvalid := 1
- FI
-
- // override comparisons for invalid characters
- CASE (imm8[3:2]) OF
- 0: // equal any
+ FI
+
+ // override comparisons for invalid characters
+ CASE (imm8[3:2]) OF
+ 0: // equal any
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 1: // ranges
+ 1: // ranges
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 2: // equal each
+ 2: // equal each
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
FI
- 3: // equal ordered
+ 3: // equal ordered
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
- FI
- ESAC
- ENDFOR
-ENDFOR
-// aggregate results
-CASE (imm8[3:2]) OF
-0: // equal any
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ BoolRes.word[i].bit[j] := 1
+ FI
+ ESAC
+ ENDFOR
+ ENDFOR
+ // aggregate results
+ CASE (imm8[3:2]) OF
+ 0: // equal any
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR BoolRes.word[i].bit[j]
- ENDFOR
- ENDFOR
-1: // ranges
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ ENDFOR
+ ENDFOR
+ 1: // ranges
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR (BoolRes.word[i].bit[j] AND BoolRes.word[i].bit[j+1])
j += 2
- ENDFOR
- ENDFOR
-2: // equal each
- IntRes1 := 0
- FOR i := 0 to UpperBound
- IntRes1[i] := BoolRes.word[i].bit[i]
- ENDFOR
-3: // equal ordered
- IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
- FOR i := 0 to UpperBound
- k := i
- FOR j := 0 to UpperBound-i
+ ENDFOR
+ ENDFOR
+ 2: // equal each
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ IntRes1[i] := BoolRes.word[i].bit[i]
+ ENDFOR
+ 3: // equal ordered
+ IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
+ FOR i := 0 to UpperBound
+ k := i
+ FOR j := 0 to UpperBound-i
IntRes1[i] := IntRes1[i] AND BoolRes.word[k].bit[j]
k := k+1
- ENDFOR
- ENDFOR
-ESAC
-// optionally negate results
-bInvalid := 0
-FOR i := 0 to UpperBound
- IF imm8[4]
- IF imm8[5] // only negate valid
+ ENDFOR
+ ENDFOR
+ ESAC
+ // optionally negate results
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ IF imm8[4]
+ IF imm8[5] // only negate valid
IF b[n+size-1:n] == 0
- bInvalid := 1
+ bInvalid := 1
FI
IF bInvalid // invalid, don't negate
- IntRes2[i] := IntRes1[i]
+ IntRes2[i] := IntRes1[i]
ELSE // valid, negate
- IntRes2[i] := -1 XOR IntRes1[i]
+ IntRes2[i] := -1 XOR IntRes1[i]
FI
- ELSE // negate all
+ ELSE // negate all
IntRes2[i] := -1 XOR IntRes1[i]
- FI
- ELSE // don't negate
- IntRes2[i] := IntRes1[i]
- FI
-ENDFOR
-// output
-dst := (IntRes2 != 0)
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
- Compare packed strings with implicit lengths in "a" and "b" using the control in "imm8", and returns 1 if any character in "a" was null, and 0 otherwise.
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-aInvalid := 0
-FOR i := 0 to UpperBound
- m := i*size
- IF a[m+size-1:m] == 0
- aInvalid := 1
- FI
-ENDFOR
-dst := aInvalid
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
- Compare packed strings with implicit lengths in "a" and "b" using the control in "imm8", and returns bit 0 of the resulting bit mask.
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-BoolRes := 0
-// compare all characters
-aInvalid := 0
-bInvalid := 0
-FOR i := 0 to UpperBound
- m := i*size
- FOR j := 0 to UpperBound
- n := j*size
- BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
-
- // invalidate characters after EOS
- IF a[m+size-1:m] == 0
+ FI
+ ELSE // don't negate
+ IntRes2[i] := IntRes1[i]
+ FI
+ ENDFOR
+ // output
+ dst := (IntRes2 != 0)
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+ Compare packed strings with implicit lengths in "a" and "b" using the control
+ in "imm8", and returns 1 if any character in "a" was null, and 0 otherwise.
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ aInvalid := 0
+ FOR i := 0 to UpperBound
+ m := i*size
+ IF a[m+size-1:m] == 0
+ aInvalid := 1
+ FI
+ ENDFOR
+ dst := aInvalid
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+ Compare packed strings with implicit lengths in "a" and "b" using the control
+ in "imm8", and returns bit 0 of the resulting bit mask.
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ BoolRes := 0
+ // compare all characters
+ aInvalid := 0
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ m := i*size
+ FOR j := 0 to UpperBound
+ n := j*size
+ BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
+
+ // invalidate characters after EOS
+ IF a[m+size-1:m] == 0
aInvalid := 1
- FI
- IF b[n+size-1:n] == 0
+ FI
+ IF b[n+size-1:n] == 0
bInvalid := 1
- FI
-
- // override comparisons for invalid characters
- CASE (imm8[3:2]) OF
- 0: // equal any
+ FI
+
+ // override comparisons for invalid characters
+ CASE (imm8[3:2]) OF
+ 0: // equal any
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 1: // ranges
+ 1: // ranges
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 2: // equal each
+ 2: // equal each
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
FI
- 3: // equal ordered
+ 3: // equal ordered
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
- FI
- ESAC
- ENDFOR
-ENDFOR
-// aggregate results
-CASE (imm8[3:2]) OF
-0: // equal any
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ BoolRes.word[i].bit[j] := 1
+ FI
+ ESAC
+ ENDFOR
+ ENDFOR
+ // aggregate results
+ CASE (imm8[3:2]) OF
+ 0: // equal any
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR BoolRes.word[i].bit[j]
- ENDFOR
- ENDFOR
-1: // ranges
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ ENDFOR
+ ENDFOR
+ 1: // ranges
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR (BoolRes.word[i].bit[j] AND BoolRes.word[i].bit[j+1])
j += 2
- ENDFOR
- ENDFOR
-2: // equal each
- IntRes1 := 0
- FOR i := 0 to UpperBound
- IntRes1[i] := BoolRes.word[i].bit[i]
- ENDFOR
-3: // equal ordered
- IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
- FOR i := 0 to UpperBound
- k := i
- FOR j := 0 to UpperBound-i
+ ENDFOR
+ ENDFOR
+ 2: // equal each
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ IntRes1[i] := BoolRes.word[i].bit[i]
+ ENDFOR
+ 3: // equal ordered
+ IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
+ FOR i := 0 to UpperBound
+ k := i
+ FOR j := 0 to UpperBound-i
IntRes1[i] := IntRes1[i] AND BoolRes.word[k].bit[j]
k := k+1
- ENDFOR
- ENDFOR
-ESAC
-// optionally negate results
-bInvalid := 0
-FOR i := 0 to UpperBound
- IF imm8[4]
- IF imm8[5] // only negate valid
+ ENDFOR
+ ENDFOR
+ ESAC
+ // optionally negate results
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ IF imm8[4]
+ IF imm8[5] // only negate valid
IF b[n+size-1:n] == 0
- bInvalid := 1
+ bInvalid := 1
FI
IF bInvalid // invalid, don't negate
- IntRes2[i] := IntRes1[i]
+ IntRes2[i] := IntRes1[i]
ELSE // valid, negate
- IntRes2[i] := -1 XOR IntRes1[i]
+ IntRes2[i] := -1 XOR IntRes1[i]
FI
- ELSE // negate all
+ ELSE // negate all
IntRes2[i] := -1 XOR IntRes1[i]
- FI
- ELSE // don't negate
- IntRes2[i] := IntRes1[i]
- FI
-ENDFOR
-// output
-dst := IntRes2[0]
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
- Compare packed strings with implicit lengths in "a" and "b" using the control in "imm8", and returns 1 if "b" did not contain a null character and the resulting mask was zero, and 0 otherwise.
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-BoolRes := 0
-// compare all characters
-aInvalid := 0
-bInvalid := 0
-FOR i := 0 to UpperBound
- m := i*size
- FOR j := 0 to UpperBound
- n := j*size
- BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
-
- // invalidate characters after EOS
- IF a[m+size-1:m] == 0
+ FI
+ ELSE // don't negate
+ IntRes2[i] := IntRes1[i]
+ FI
+ ENDFOR
+ // output
+ dst := IntRes2[0]
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+ Compare packed strings with implicit lengths in "a" and "b" using the control
+ in "imm8", and returns 1 if "b" did not contain a null character and the resulting mask
+ was zero, and 0 otherwise.
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ BoolRes := 0
+ // compare all characters
+ aInvalid := 0
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ m := i*size
+ FOR j := 0 to UpperBound
+ n := j*size
+ BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
+
+ // invalidate characters after EOS
+ IF a[m+size-1:m] == 0
aInvalid := 1
- FI
- IF b[n+size-1:n] == 0
+ FI
+ IF b[n+size-1:n] == 0
bInvalid := 1
- FI
-
- // override comparisons for invalid characters
- CASE (imm8[3:2]) OF
- 0: // equal any
+ FI
+
+ // override comparisons for invalid characters
+ CASE (imm8[3:2]) OF
+ 0: // equal any
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 1: // ranges
+ 1: // ranges
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 2: // equal each
+ 2: // equal each
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
FI
- 3: // equal ordered
+ 3: // equal ordered
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
- FI
- ESAC
- ENDFOR
-ENDFOR
-// aggregate results
-CASE (imm8[3:2]) OF
-0: // equal any
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ BoolRes.word[i].bit[j] := 1
+ FI
+ ESAC
+ ENDFOR
+ ENDFOR
+ // aggregate results
+ CASE (imm8[3:2]) OF
+ 0: // equal any
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR BoolRes.word[i].bit[j]
- ENDFOR
- ENDFOR
-1: // ranges
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ ENDFOR
+ ENDFOR
+ 1: // ranges
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR (BoolRes.word[i].bit[j] AND BoolRes.word[i].bit[j+1])
j += 2
- ENDFOR
- ENDFOR
-2: // equal each
- IntRes1 := 0
- FOR i := 0 to UpperBound
- IntRes1[i] := BoolRes.word[i].bit[i]
- ENDFOR
-3: // equal ordered
- IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
- FOR i := 0 to UpperBound
- k := i
- FOR j := 0 to UpperBound-i
+ ENDFOR
+ ENDFOR
+ 2: // equal each
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ IntRes1[i] := BoolRes.word[i].bit[i]
+ ENDFOR
+ 3: // equal ordered
+ IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
+ FOR i := 0 to UpperBound
+ k := i
+ FOR j := 0 to UpperBound-i
IntRes1[i] := IntRes1[i] AND BoolRes.word[k].bit[j]
k := k+1
- ENDFOR
- ENDFOR
-ESAC
-// optionally negate results
-bInvalid := 0
-FOR i := 0 to UpperBound
- IF imm8[4]
- IF imm8[5] // only negate valid
+ ENDFOR
+ ENDFOR
+ ESAC
+ // optionally negate results
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ IF imm8[4]
+ IF imm8[5] // only negate valid
IF b[n+size-1:n] == 0
- bInvalid := 1
+ bInvalid := 1
FI
IF bInvalid // invalid, don't negate
- IntRes2[i] := IntRes1[i]
+ IntRes2[i] := IntRes1[i]
ELSE // valid, negate
- IntRes2[i] := -1 XOR IntRes1[i]
+ IntRes2[i] := -1 XOR IntRes1[i]
FI
- ELSE // negate all
+ ELSE // negate all
IntRes2[i] := -1 XOR IntRes1[i]
- FI
- ELSE // don't negate
- IntRes2[i] := IntRes1[i]
- FI
-ENDFOR
-// output
-dst := (IntRes2 == 0) AND bInvalid
-
-
-
-
-
- SSE4.2
- String Compare
-
-
-
-
-
-
- Compare packed strings in "a" and "b" with lengths "la" and "lb" using the control in "imm8", and store the generated mask in "dst".
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-BoolRes := 0
-// compare all characters
-aInvalid := 0
-bInvalid := 0
-FOR i := 0 to UpperBound
- m := i*size
- FOR j := 0 to UpperBound
- n := j*size
- BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
-
- // invalidate characters after EOS
- IF i == la
+ FI
+ ELSE // don't negate
+ IntRes2[i] := IntRes1[i]
+ FI
+ ENDFOR
+ // output
+ dst := (IntRes2 == 0) AND bInvalid
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+
+
+ Compare packed strings in "a" and "b" with lengths "la" and "lb" using the
+ control in "imm8", and store the generated mask in "dst".
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ BoolRes := 0
+ // compare all characters
+ aInvalid := 0
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ m := i*size
+ FOR j := 0 to UpperBound
+ n := j*size
+ BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
+
+ // invalidate characters after EOS
+ IF i == la
aInvalid := 1
- FI
- IF j == lb
+ FI
+ IF j == lb
bInvalid := 1
- FI
-
- // override comparisons for invalid characters
- CASE (imm8[3:2]) OF
- 0: // equal any
+ FI
+
+ // override comparisons for invalid characters
+ CASE (imm8[3:2]) OF
+ 0: // equal any
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 1: // ranges
+ 1: // ranges
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 2: // equal each
+ 2: // equal each
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
FI
- 3: // equal ordered
+ 3: // equal ordered
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
- FI
- ESAC
- ENDFOR
-ENDFOR
-// aggregate results
-CASE (imm8[3:2]) OF
-0: // equal any
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ BoolRes.word[i].bit[j] := 1
+ FI
+ ESAC
+ ENDFOR
+ ENDFOR
+ // aggregate results
+ CASE (imm8[3:2]) OF
+ 0: // equal any
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR BoolRes.word[i].bit[j]
- ENDFOR
- ENDFOR
-1: // ranges
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ ENDFOR
+ ENDFOR
+ 1: // ranges
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR (BoolRes.word[i].bit[j] AND BoolRes.word[i].bit[j+1])
j += 2
- ENDFOR
- ENDFOR
-2: // equal each
- IntRes1 := 0
- FOR i := 0 to UpperBound
- IntRes1[i] := BoolRes.word[i].bit[i]
- ENDFOR
-3: // equal ordered
- IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
- FOR i := 0 to UpperBound
- k := i
- FOR j := 0 to UpperBound-i
+ ENDFOR
+ ENDFOR
+ 2: // equal each
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ IntRes1[i] := BoolRes.word[i].bit[i]
+ ENDFOR
+ 3: // equal ordered
+ IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
+ FOR i := 0 to UpperBound
+ k := i
+ FOR j := 0 to UpperBound-i
IntRes1[i] := IntRes1[i] AND BoolRes.word[k].bit[j]
k := k+1
- ENDFOR
- ENDFOR
-ESAC
-// optionally negate results
-FOR i := 0 to UpperBound
- IF imm8[4]
- IF imm8[5] // only negate valid
+ ENDFOR
+ ENDFOR
+ ESAC
+ // optionally negate results
+ FOR i := 0 to UpperBound
+ IF imm8[4]
+ IF imm8[5] // only negate valid
IF i >= lb // invalid, don't negate
- IntRes2[i] := IntRes1[i]
+ IntRes2[i] := IntRes1[i]
ELSE // valid, negate
- IntRes2[i] := -1 XOR IntRes1[i]
+ IntRes2[i] := -1 XOR IntRes1[i]
FI
- ELSE // negate all
+ ELSE // negate all
IntRes2[i] := -1 XOR IntRes1[i]
- FI
- ELSE // don't negate
- IntRes2[i] := IntRes1[i]
- FI
-ENDFOR
-// output
-IF imm8[6] // byte / word mask
- FOR i := 0 to UpperBound
- j := i*size
- IF IntRes2[i]
+ FI
+ ELSE // don't negate
+ IntRes2[i] := IntRes1[i]
+ FI
+ ENDFOR
+ // output
+ IF imm8[6] // byte / word mask
+ FOR i := 0 to UpperBound
+ j := i*size
+ IF IntRes2[i]
dst[j+size-1:j] := (imm8[0] ? 0xFF : 0xFFFF)
- ELSE
+ ELSE
dst[j+size-1:j] := 0
- FI
- ENDFOR
-ELSE // bit mask
- dst[UpperBound:0] := IntRes2[UpperBound:0]
- dst[127:UpperBound+1] := 0
-FI
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
-
-
- Compare packed strings in "a" and "b" with lengths "la" and "lb" using the control in "imm8", and store the generated index in "dst".
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-BoolRes := 0
-// compare all characters
-aInvalid := 0
-bInvalid := 0
-FOR i := 0 to UpperBound
- m := i*size
- FOR j := 0 to UpperBound
- n := j*size
- BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
-
- // invalidate characters after EOS
- IF i == la
+ FI
+ ENDFOR
+ ELSE // bit mask
+ dst[UpperBound:0] := IntRes2[UpperBound:0]
+ dst[127:UpperBound+1] := 0
+ FI
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+
+
+ Compare packed strings in "a" and "b" with lengths "la" and "lb" using the
+ control in "imm8", and store the generated index in "dst".
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ BoolRes := 0
+ // compare all characters
+ aInvalid := 0
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ m := i*size
+ FOR j := 0 to UpperBound
+ n := j*size
+ BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
+
+ // invalidate characters after EOS
+ IF i == la
aInvalid := 1
- FI
- IF j == lb
+ FI
+ IF j == lb
bInvalid := 1
- FI
-
- // override comparisons for invalid characters
- CASE (imm8[3:2]) OF
- 0: // equal any
+ FI
+
+ // override comparisons for invalid characters
+ CASE (imm8[3:2]) OF
+ 0: // equal any
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 1: // ranges
+ 1: // ranges
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 2: // equal each
+ 2: // equal each
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
FI
- 3: // equal ordered
+ 3: // equal ordered
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
- FI
- ESAC
- ENDFOR
-ENDFOR
-// aggregate results
-CASE (imm8[3:2]) OF
-0: // equal any
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ BoolRes.word[i].bit[j] := 1
+ FI
+ ESAC
+ ENDFOR
+ ENDFOR
+ // aggregate results
+ CASE (imm8[3:2]) OF
+ 0: // equal any
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR BoolRes.word[i].bit[j]
- ENDFOR
- ENDFOR
-1: // ranges
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ ENDFOR
+ ENDFOR
+ 1: // ranges
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR (BoolRes.word[i].bit[j] AND BoolRes.word[i].bit[j+1])
j += 2
- ENDFOR
- ENDFOR
-2: // equal each
- IntRes1 := 0
- FOR i := 0 to UpperBound
- IntRes1[i] := BoolRes.word[i].bit[i]
- ENDFOR
-3: // equal ordered
- IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
- FOR i := 0 to UpperBound
- k := i
- FOR j := 0 to UpperBound-i
+ ENDFOR
+ ENDFOR
+ 2: // equal each
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ IntRes1[i] := BoolRes.word[i].bit[i]
+ ENDFOR
+ 3: // equal ordered
+ IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
+ FOR i := 0 to UpperBound
+ k := i
+ FOR j := 0 to UpperBound-i
IntRes1[i] := IntRes1[i] AND BoolRes.word[k].bit[j]
k := k+1
- ENDFOR
- ENDFOR
-ESAC
-// optionally negate results
-FOR i := 0 to UpperBound
- IF imm8[4]
- IF imm8[5] // only negate valid
+ ENDFOR
+ ENDFOR
+ ESAC
+ // optionally negate results
+ FOR i := 0 to UpperBound
+ IF imm8[4]
+ IF imm8[5] // only negate valid
IF i >= lb // invalid, don't negate
- IntRes2[i] := IntRes1[i]
+ IntRes2[i] := IntRes1[i]
ELSE // valid, negate
- IntRes2[i] := -1 XOR IntRes1[i]
+ IntRes2[i] := -1 XOR IntRes1[i]
FI
- ELSE // negate all
+ ELSE // negate all
IntRes2[i] := -1 XOR IntRes1[i]
- FI
- ELSE // don't negate
- IntRes2[i] := IntRes1[i]
- FI
-ENDFOR
-// output
-IF imm8[6] // most significant bit
- tmp := UpperBound
- dst := tmp
- DO WHILE ((tmp >= 0) AND a[tmp] == 0)
- tmp := tmp - 1
- dst := tmp
- OD
-ELSE // least significant bit
- tmp := 0
- dst := tmp
- DO WHILE ((tmp <= UpperBound) AND a[tmp] == 0)
- tmp := tmp + 1
- dst := tmp
- OD
-FI
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
-
-
- Compare packed strings in "a" and "b" with lengths "la" and "lb" using the control in "imm8", and returns 1 if any character in "b" was null, and 0 otherwise.
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-dst := (lb <= UpperBound)
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
-
-
- Compare packed strings in "a" and "b" with lengths "la" and "lb" using the control in "imm8", and returns 1 if the resulting mask was non-zero, and 0 otherwise.
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-BoolRes := 0
-// compare all characters
-aInvalid := 0
-bInvalid := 0
-FOR i := 0 to UpperBound
- m := i*size
- FOR j := 0 to UpperBound
- n := j*size
- BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
-
- // invalidate characters after EOS
- IF i == la
+ FI
+ ELSE // don't negate
+ IntRes2[i] := IntRes1[i]
+ FI
+ ENDFOR
+ // output
+ IF imm8[6] // most significant bit
+ tmp := UpperBound
+ dst := tmp
+ DO WHILE ((tmp >= 0) AND a[tmp] == 0)
+ tmp := tmp - 1
+ dst := tmp
+ OD
+ ELSE // least significant bit
+ tmp := 0
+ dst := tmp
+ DO WHILE ((tmp <= UpperBound) AND a[tmp] == 0)
+ tmp := tmp + 1
+ dst := tmp
+ OD
+ FI
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+
+
+ Compare packed strings in "a" and "b" with lengths "la" and "lb" using the
+ control in "imm8", and returns 1 if any character in "b" was null, and 0 otherwise.
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ dst := (lb <= UpperBound)
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+
+
+ Compare packed strings in "a" and "b" with lengths "la" and "lb" using the
+ control in "imm8", and returns 1 if the resulting mask was non-zero, and 0 otherwise.
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ BoolRes := 0
+ // compare all characters
+ aInvalid := 0
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ m := i*size
+ FOR j := 0 to UpperBound
+ n := j*size
+ BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
+
+ // invalidate characters after EOS
+ IF i == la
aInvalid := 1
- FI
- IF j == lb
+ FI
+ IF j == lb
bInvalid := 1
- FI
-
- // override comparisons for invalid characters
- CASE (imm8[3:2]) OF
- 0: // equal any
+ FI
+
+ // override comparisons for invalid characters
+ CASE (imm8[3:2]) OF
+ 0: // equal any
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 1: // ranges
+ 1: // ranges
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 2: // equal each
+ 2: // equal each
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
FI
- 3: // equal ordered
+ 3: // equal ordered
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
- FI
- ESAC
- ENDFOR
-ENDFOR
-// aggregate results
-CASE (imm8[3:2]) OF
-0: // equal any
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ BoolRes.word[i].bit[j] := 1
+ FI
+ ESAC
+ ENDFOR
+ ENDFOR
+ // aggregate results
+ CASE (imm8[3:2]) OF
+ 0: // equal any
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR BoolRes.word[i].bit[j]
- ENDFOR
- ENDFOR
-1: // ranges
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ ENDFOR
+ ENDFOR
+ 1: // ranges
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR (BoolRes.word[i].bit[j] AND BoolRes.word[i].bit[j+1])
j += 2
- ENDFOR
- ENDFOR
-2: // equal each
- IntRes1 := 0
- FOR i := 0 to UpperBound
- IntRes1[i] := BoolRes.word[i].bit[i]
- ENDFOR
-3: // equal ordered
- IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
- FOR i := 0 to UpperBound
- k := i
- FOR j := 0 to UpperBound-i
+ ENDFOR
+ ENDFOR
+ 2: // equal each
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ IntRes1[i] := BoolRes.word[i].bit[i]
+ ENDFOR
+ 3: // equal ordered
+ IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
+ FOR i := 0 to UpperBound
+ k := i
+ FOR j := 0 to UpperBound-i
IntRes1[i] := IntRes1[i] AND BoolRes.word[k].bit[j]
k := k+1
- ENDFOR
- ENDFOR
-ESAC
-// optionally negate results
-FOR i := 0 to UpperBound
- IF imm8[4]
- IF imm8[5] // only negate valid
+ ENDFOR
+ ENDFOR
+ ESAC
+ // optionally negate results
+ FOR i := 0 to UpperBound
+ IF imm8[4]
+ IF imm8[5] // only negate valid
IF i >= lb // invalid, don't negate
- IntRes2[i] := IntRes1[i]
+ IntRes2[i] := IntRes1[i]
ELSE // valid, negate
- IntRes2[i] := -1 XOR IntRes1[i]
+ IntRes2[i] := -1 XOR IntRes1[i]
FI
- ELSE // negate all
+ ELSE // negate all
IntRes2[i] := -1 XOR IntRes1[i]
- FI
- ELSE // don't negate
- IntRes2[i] := IntRes1[i]
- FI
-ENDFOR
-// output
-dst := (IntRes2 != 0)
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
-
-
- Compare packed strings in "a" and "b" with lengths "la" and "lb" using the control in "imm8", and returns 1 if any character in "a" was null, and 0 otherwise.
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-dst := (la <= UpperBound)
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
-
-
- Compare packed strings in "a" and "b" with lengths "la" and "lb" using the control in "imm8", and returns bit 0 of the resulting bit mask.
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-BoolRes := 0
-// compare all characters
-aInvalid := 0
-bInvalid := 0
-FOR i := 0 to UpperBound
- m := i*size
- FOR j := 0 to UpperBound
- n := j*size
- BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
-
- // invalidate characters after EOS
- IF i == la
+ FI
+ ELSE // don't negate
+ IntRes2[i] := IntRes1[i]
+ FI
+ ENDFOR
+ // output
+ dst := (IntRes2 != 0)
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+
+
+ Compare packed strings in "a" and "b" with lengths "la" and "lb" using the
+ control in "imm8", and returns 1 if any character in "a" was null, and 0 otherwise.
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ dst := (la <= UpperBound)
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+
+
+ Compare packed strings in "a" and "b" with lengths "la" and "lb" using the
+ control in "imm8", and returns bit 0 of the resulting bit mask.
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ BoolRes := 0
+ // compare all characters
+ aInvalid := 0
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ m := i*size
+ FOR j := 0 to UpperBound
+ n := j*size
+ BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
+
+ // invalidate characters after EOS
+ IF i == la
aInvalid := 1
- FI
- IF j == lb
+ FI
+ IF j == lb
bInvalid := 1
- FI
-
- // override comparisons for invalid characters
- CASE (imm8[3:2]) OF
- 0: // equal any
+ FI
+
+ // override comparisons for invalid characters
+ CASE (imm8[3:2]) OF
+ 0: // equal any
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 1: // ranges
+ 1: // ranges
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 2: // equal each
+ 2: // equal each
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
FI
- 3: // equal ordered
+ 3: // equal ordered
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
- FI
- ESAC
- ENDFOR
-ENDFOR
-// aggregate results
-CASE (imm8[3:2]) OF
-0: // equal any
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ BoolRes.word[i].bit[j] := 1
+ FI
+ ESAC
+ ENDFOR
+ ENDFOR
+ // aggregate results
+ CASE (imm8[3:2]) OF
+ 0: // equal any
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR BoolRes.word[i].bit[j]
- ENDFOR
- ENDFOR
-1: // ranges
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ ENDFOR
+ ENDFOR
+ 1: // ranges
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR (BoolRes.word[i].bit[j] AND BoolRes.word[i].bit[j+1])
j += 2
- ENDFOR
- ENDFOR
-2: // equal each
- IntRes1 := 0
- FOR i := 0 to UpperBound
- IntRes1[i] := BoolRes.word[i].bit[i]
- ENDFOR
-3: // equal ordered
- IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
- FOR i := 0 to UpperBound
- k := i
- FOR j := 0 to UpperBound-i
+ ENDFOR
+ ENDFOR
+ 2: // equal each
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ IntRes1[i] := BoolRes.word[i].bit[i]
+ ENDFOR
+ 3: // equal ordered
+ IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
+ FOR i := 0 to UpperBound
+ k := i
+ FOR j := 0 to UpperBound-i
IntRes1[i] := IntRes1[i] AND BoolRes.word[k].bit[j]
k := k+1
- ENDFOR
- ENDFOR
-ESAC
-// optionally negate results
-FOR i := 0 to UpperBound
- IF imm8[4]
- IF imm8[5] // only negate valid
+ ENDFOR
+ ENDFOR
+ ESAC
+ // optionally negate results
+ FOR i := 0 to UpperBound
+ IF imm8[4]
+ IF imm8[5] // only negate valid
IF i >= lb // invalid, don't negate
- IntRes2[i] := IntRes1[i]
+ IntRes2[i] := IntRes1[i]
ELSE // valid, negate
- IntRes2[i] := -1 XOR IntRes1[i]
+ IntRes2[i] := -1 XOR IntRes1[i]
FI
- ELSE // negate all
+ ELSE // negate all
IntRes2[i] := -1 XOR IntRes1[i]
- FI
- ELSE // don't negate
- IntRes2[i] := IntRes1[i]
- FI
-ENDFOR
-// output
-dst := IntRes2[0]
-
-
-
-
-
- Flag
- SSE4.2
- String Compare
-
-
-
-
-
-
- Compare packed strings in "a" and "b" with lengths "la" and "lb" using the control in "imm8", and returns 1 if "b" did not contain a null character and the resulting mask was zero, and 0 otherwise.
- [strcmp_note]
-
-size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
-UpperBound := (128 / size) - 1
-BoolRes := 0
-// compare all characters
-aInvalid := 0
-bInvalid := 0
-FOR i := 0 to UpperBound
- m := i*size
- FOR j := 0 to UpperBound
- n := j*size
- BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
-
- // invalidate characters after EOS
- IF i == la
+ FI
+ ELSE // don't negate
+ IntRes2[i] := IntRes1[i]
+ FI
+ ENDFOR
+ // output
+ dst := IntRes2[0]
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+
+
+
+ Compare packed strings in "a" and "b" with lengths "la" and "lb" using the
+ control in "imm8", and returns 1 if "b" did not contain a null character and the
+ resulting mask was zero, and 0 otherwise.
+ [strcmp_note]
+
+ size := (imm8[0] ? 16 : 8) // 8 or 16-bit characters
+ UpperBound := (128 / size) - 1
+ BoolRes := 0
+ // compare all characters
+ aInvalid := 0
+ bInvalid := 0
+ FOR i := 0 to UpperBound
+ m := i*size
+ FOR j := 0 to UpperBound
+ n := j*size
+ BoolRes.word[i].bit[j] := (a[m+size-1:m] == b[n+size-1:n]) ? 1 : 0
+
+ // invalidate characters after EOS
+ IF i == la
aInvalid := 1
- FI
- IF j == lb
+ FI
+ IF j == lb
bInvalid := 1
- FI
-
- // override comparisons for invalid characters
- CASE (imm8[3:2]) OF
- 0: // equal any
+ FI
+
+ // override comparisons for invalid characters
+ CASE (imm8[3:2]) OF
+ 0: // equal any
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 1: // ranges
+ 1: // ranges
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
FI
- 2: // equal each
+ 2: // equal each
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
FI
- 3: // equal ordered
+ 3: // equal ordered
IF (!aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 0
+ BoolRes.word[i].bit[j] := 0
ELSE IF (aInvalid && !bInvalid)
- BoolRes.word[i].bit[j] := 1
+ BoolRes.word[i].bit[j] := 1
ELSE IF (aInvalid && bInvalid)
- BoolRes.word[i].bit[j] := 1
- FI
- ESAC
- ENDFOR
-ENDFOR
-// aggregate results
-CASE (imm8[3:2]) OF
-0: // equal any
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ BoolRes.word[i].bit[j] := 1
+ FI
+ ESAC
+ ENDFOR
+ ENDFOR
+ // aggregate results
+ CASE (imm8[3:2]) OF
+ 0: // equal any
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR BoolRes.word[i].bit[j]
- ENDFOR
- ENDFOR
-1: // ranges
- IntRes1 := 0
- FOR i := 0 to UpperBound
- FOR j := 0 to UpperBound
+ ENDFOR
+ ENDFOR
+ 1: // ranges
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ FOR j := 0 to UpperBound
IntRes1[i] := IntRes1[i] OR (BoolRes.word[i].bit[j] AND BoolRes.word[i].bit[j+1])
j += 2
- ENDFOR
- ENDFOR
-2: // equal each
- IntRes1 := 0
- FOR i := 0 to UpperBound
- IntRes1[i] := BoolRes.word[i].bit[i]
- ENDFOR
-3: // equal ordered
- IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
- FOR i := 0 to UpperBound
- k := i
- FOR j := 0 to UpperBound-i
+ ENDFOR
+ ENDFOR
+ 2: // equal each
+ IntRes1 := 0
+ FOR i := 0 to UpperBound
+ IntRes1[i] := BoolRes.word[i].bit[i]
+ ENDFOR
+ 3: // equal ordered
+ IntRes1 := (imm8[0] ? 0xFF : 0xFFFF)
+ FOR i := 0 to UpperBound
+ k := i
+ FOR j := 0 to UpperBound-i
IntRes1[i] := IntRes1[i] AND BoolRes.word[k].bit[j]
k := k+1
- ENDFOR
- ENDFOR
-ESAC
-// optionally negate results
-FOR i := 0 to UpperBound
- IF imm8[4]
- IF imm8[5] // only negate valid
+ ENDFOR
+ ENDFOR
+ ESAC
+ // optionally negate results
+ FOR i := 0 to UpperBound
+ IF imm8[4]
+ IF imm8[5] // only negate valid
IF i >= lb // invalid, don't negate
- IntRes2[i] := IntRes1[i]
+ IntRes2[i] := IntRes1[i]
ELSE // valid, negate
- IntRes2[i] := -1 XOR IntRes1[i]
+ IntRes2[i] := -1 XOR IntRes1[i]
FI
- ELSE // negate all
+ ELSE // negate all
IntRes2[i] := -1 XOR IntRes1[i]
- FI
- ELSE // don't negate
- IntRes2[i] := IntRes1[i]
- FI
-ENDFOR
-// output
-dst := (IntRes2 == 0) AND (lb > UpperBound)
-
-
-
-
-
- Integer
- SSE4.2
- Compare
-
-
-
- Compare packed signed 64-bit integers in "a" and "b" for greater-than, and store the results in "dst".
-
-FOR j := 0 to 1
- i := j*64
- dst[i+63:i] := ( a[i+63:i] > b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
-ENDFOR
-
-
-
-
-
- Integer
- SSE4.2
- Cryptography
-
-
-
- Starting with the initial value in "crc", accumulates a CRC32 value for unsigned 8-bit integer "v", and stores the result in "dst".
- tmp1[7:0] := v[0:7] // bit reflection
-tmp2[31:0] := crc[0:31] // bit reflection
-tmp3[39:0] := tmp1[7:0] << 32
-tmp4[39:0] := tmp2[31:0] << 8
-tmp5[39:0] := tmp3[39:0] XOR tmp4[39:0]
-tmp6[31:0] := MOD2(tmp5[39:0], 0x11EDC6F41) // remainder from polynomial division modulus 2
-dst[31:0] := tmp6[0:31] // bit reflection
-
-
-
-
-
- Integer
- SSE4.2
- Cryptography
-
-
-
- Starting with the initial value in "crc", accumulates a CRC32 value for unsigned 16-bit integer "v", and stores the result in "dst".
- tmp1[15:0] := v[0:15] // bit reflection
-tmp2[31:0] := crc[0:31] // bit reflection
-tmp3[47:0] := tmp1[15:0] << 32
-tmp4[47:0] := tmp2[31:0] << 16
-tmp5[47:0] := tmp3[47:0] XOR tmp4[47:0]
-tmp6[31:0] := MOD2(tmp5[47:0], 0x11EDC6F41) // remainder from polynomial division modulus 2
-dst[31:0] := tmp6[0:31] // bit reflection
-
-
-
-
-
- Integer
- SSE4.2
- Cryptography
-
-
-
- Starting with the initial value in "crc", accumulates a CRC32 value for unsigned 32-bit integer "v", and stores the result in "dst".
- tmp1[31:0] := v[0:31] // bit reflection
-tmp2[31:0] := crc[0:31] // bit reflection
-tmp3[63:0] := tmp1[31:0] << 32
-tmp4[63:0] := tmp2[31:0] << 32
-tmp5[63:0] := tmp3[63:0] XOR tmp4[63:0]
-tmp6[31:0] := MOD2(tmp5[63:0], 0x11EDC6F41) // remainder from polynomial division modulus 2
-dst[31:0] := tmp6[0:31] // bit reflection
-
-
-
-
-
- Integer
- SSE4.2
- Cryptography
-
-
-
- Starting with the initial value in "crc", accumulates a CRC32 value for unsigned 64-bit integer "v", and stores the result in "dst".
- tmp1[63:0] := v[0:63] // bit reflection
-tmp2[31:0] := crc[0:31] // bit reflection
-tmp3[95:0] := tmp1[31:0] << 32
-tmp4[95:0] := tmp2[63:0] << 64
-tmp5[95:0] := tmp3[95:0] XOR tmp4[95:0]
-tmp6[31:0] := MOD2(tmp5[95:0], 0x11EDC6F41) // remainder from polynomial division modulus 2
-dst[31:0] := tmp6[0:31] // bit reflection
-
-
-
-
-
- Integer
- SSSE3
- Special Math Functions
-
-
- Compute the absolute value of packed signed 8-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- dst[i+7:i] := ABS(Int(a[i+7:i]))
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Special Math Functions
-
-
- Compute the absolute value of packed signed 8-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- dst[i+7:i] := ABS(a[i+7:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Special Math Functions
-
-
- Compute the absolute value of packed signed 16-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := ABS(Int(a[i+15:i]))
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Special Math Functions
-
-
- Compute the absolute value of packed signed 16-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := ABS(a[i+15:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Special Math Functions
-
-
- Compute the absolute value of packed signed 32-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 1
- i := j*32
- dst[i+31:i] := ABS(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Special Math Functions
-
-
- Compute the absolute value of packed signed 32-bit integers in "a", and store the unsigned results in "dst".
-
-FOR j := 0 to 3
- i := j*32
- dst[i+31:i] := ABS(a[i+31:i])
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Swizzle
-
-
-
- Shuffle packed 8-bit integers in "a" according to shuffle control mask in the corresponding 8-bit element of "b", and store the results in "dst".
-
-FOR j := 0 to 15
- i := j*8
- IF b[i+7] == 1
- dst[i+7:i] := 0
- ELSE
- index[3:0] := b[i+3:i]
- dst[i+7:i] := a[index*8+7:index*8]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Swizzle
-
-
-
- Shuffle packed 8-bit integers in "a" according to shuffle control mask in the corresponding 8-bit element of "b", and store the results in "dst".
-
-FOR j := 0 to 7
- i := j*8
- IF b[i+7] == 1
- dst[i+7:i] := 0
- ELSE
- index[2:0] := b[i+2:i]
- dst[i+7:i] := a[index*8+7:index*8]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Miscellaneous
-
-
-
-
- Concatenate 16-byte blocks in "a" and "b" into a 32-byte temporary result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst".
-
-tmp[255:0] := ((a[127:0] << 128)[255:0] OR b[127:0]) >> (imm8*8)
-dst[127:0] := tmp[127:0]
-
-
-
-
-
- Integer
- SSSE3
- Miscellaneous
-
-
-
-
- Concatenate 8-byte blocks in "a" and "b" into a 16-byte temporary result, shift the result right by "imm8" bytes, and store the low 16 bytes in "dst".
-
-tmp[127:0] := ((a[63:0] << 64)[127:0] OR b[63:0]) >> (imm8*8)
-dst[63:0] := tmp[63:0]
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of 16-bit integers in "a" and "b", and pack the signed 16-bit results in "dst".
-
-dst[15:0] := a[31:16] + a[15:0]
-dst[31:16] := a[63:48] + a[47:32]
-dst[47:32] := a[95:80] + a[79:64]
-dst[63:48] := a[127:112] + a[111:96]
-dst[79:64] := b[31:16] + b[15:0]
-dst[95:80] := b[63:48] + b[47:32]
-dst[111:96] := b[95:80] + b[79:64]
-dst[127:112] := b[127:112] + b[111:96]
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of signed 16-bit integers in "a" and "b" using saturation, and pack the signed 16-bit results in "dst".
-
-dst[15:0] := Saturate16(a[31:16] + a[15:0])
-dst[31:16] := Saturate16(a[63:48] + a[47:32])
-dst[47:32] := Saturate16(a[95:80] + a[79:64])
-dst[63:48] := Saturate16(a[127:112] + a[111:96])
-dst[79:64] := Saturate16(b[31:16] + b[15:0])
-dst[95:80] := Saturate16(b[63:48] + b[47:32])
-dst[111:96] := Saturate16(b[95:80] + b[79:64])
-dst[127:112] := Saturate16(b[127:112] + b[111:96])
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of 32-bit integers in "a" and "b", and pack the signed 32-bit results in "dst".
-
-dst[31:0] := a[63:32] + a[31:0]
-dst[63:32] := a[127:96] + a[95:64]
-dst[95:64] := b[63:32] + b[31:0]
-dst[127:96] := b[127:96] + b[95:64]
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of 16-bit integers in "a" and "b", and pack the signed 16-bit results in "dst".
-
-dst[15:0] := a[31:16] + a[15:0]
-dst[31:16] := a[63:48] + a[47:32]
-dst[47:32] := b[31:16] + b[15:0]
-dst[63:48] := b[63:48] + b[47:32]
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of 32-bit integers in "a" and "b", and pack the signed 32-bit results in "dst".
-
-dst[31:0] := a[63:32] + a[31:0]
-dst[63:32] := b[63:32] + b[31:0]
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally add adjacent pairs of signed 16-bit integers in "a" and "b" using saturation, and pack the signed 16-bit results in "dst".
-
-dst[15:0] := Saturate16(a[31:16] + a[15:0])
-dst[31:16] := Saturate16(a[63:48] + a[47:32])
-dst[47:32] := Saturate16(b[31:16] + b[15:0])
-dst[63:48] := Saturate16(b[63:48] + b[47:32])
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally subtract adjacent pairs of 16-bit integers in "a" and "b", and pack the signed 16-bit results in "dst".
-
-dst[15:0] := a[15:0] - a[31:16]
-dst[31:16] := a[47:32] - a[63:48]
-dst[47:32] := a[79:64] - a[95:80]
-dst[63:48] := a[111:96] - a[127:112]
-dst[79:64] := b[15:0] - b[31:16]
-dst[95:80] := b[47:32] - b[63:48]
-dst[111:96] := b[79:64] - b[95:80]
-dst[127:112] := b[111:96] - b[127:112]
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally subtract adjacent pairs of signed 16-bit integers in "a" and "b" using saturation, and pack the signed 16-bit results in "dst".
-
-dst[15:0] := Saturate16(a[15:0] - a[31:16])
-dst[31:16] := Saturate16(a[47:32] - a[63:48])
-dst[47:32] := Saturate16(a[79:64] - a[95:80])
-dst[63:48] := Saturate16(a[111:96] - a[127:112])
-dst[79:64] := Saturate16(b[15:0] - b[31:16])
-dst[95:80] := Saturate16(b[47:32] - b[63:48])
-dst[111:96] := Saturate16(b[79:64] - b[95:80])
-dst[127:112] := Saturate16(b[111:96] - b[127:112])
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally subtract adjacent pairs of 32-bit integers in "a" and "b", and pack the signed 32-bit results in "dst".
-
-dst[31:0] := a[31:0] - a[63:32]
-dst[63:32] := a[95:64] - a[127:96]
-dst[95:64] := b[31:0] - b[63:32]
-dst[127:96] := b[95:64] - b[127:96]
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally subtract adjacent pairs of 16-bit integers in "a" and "b", and pack the signed 16-bit results in "dst".
-
-dst[15:0] := a[15:0] - a[31:16]
-dst[31:16] := a[47:32] - a[63:48]
-dst[47:32] := b[15:0] - b[31:16]
-dst[63:48] := b[47:32] - b[63:48]
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally subtract adjacent pairs of 32-bit integers in "a" and "b", and pack the signed 32-bit results in "dst".
-
-dst[31:0] := a[31:0] - a[63:32]
-dst[63:32] := b[31:0] - b[63:32]
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Horizontally subtract adjacent pairs of signed 16-bit integers in "a" and "b" using saturation, and pack the signed 16-bit results in "dst".
-
-dst[15:0] := Saturate16(a[15:0] - a[31:16])
-dst[31:16] := Saturate16(a[47:32] - a[63:48])
-dst[47:32] := Saturate16(b[15:0] - b[31:16])
-dst[63:48] := Saturate16(b[47:32] - b[63:48])
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Vertically multiply each unsigned 8-bit integer from "a" with the corresponding signed 8-bit integer from "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the saturated results in "dst".
-
-FOR j := 0 to 7
- i := j*16
- dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Vertically multiply each unsigned 8-bit integer from "a" with the corresponding signed 8-bit integer from "b", producing intermediate signed 16-bit integers. Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the saturated results in "dst".
-
-FOR j := 0 to 3
- i := j*16
- dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Truncate each intermediate integer to the 18 most significant bits, round by adding 1, and store bits [16:1] to "dst".
-
-FOR j := 0 to 7
- i := j*16
- tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
- dst[i+15:i] := tmp[16:1]
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Multiply packed signed 16-bit integers in "a" and "b", producing intermediate signed 32-bit integers. Truncate each intermediate integer to the 18 most significant bits, round by adding 1, and store bits [16:1] to "dst".
-
-FOR j := 0 to 3
- i := j*16
- tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
- dst[i+15:i] := tmp[16:1]
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Negate packed 8-bit integers in "a" when the corresponding signed 8-bit integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed out when the corresponding element in "b" is zero.
-
-FOR j := 0 to 15
- i := j*8
- IF b[i+7:i] < 0
- dst[i+7:i] := -(a[i+7:i])
- ELSE IF b[i+7:i] == 0
- dst[i+7:i] := 0
- ELSE
- dst[i+7:i] := a[i+7:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Negate packed 16-bit integers in "a" when the corresponding signed 16-bit integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed out when the corresponding element in "b" is zero.
-
-FOR j := 0 to 7
- i := j*16
- IF b[i+15:i] < 0
- dst[i+15:i] := -(a[i+15:i])
- ELSE IF b[i+15:i] == 0
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Negate packed 32-bit integers in "a" when the corresponding signed 32-bit integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed out when the corresponding element in "b" is zero.
-
-FOR j := 0 to 3
- i := j*32
- IF b[i+31:i] < 0
- dst[i+31:i] := -(a[i+31:i])
- ELSE IF b[i+31:i] == 0
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Negate packed 8-bit integers in "a" when the corresponding signed 8-bit integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed out when the corresponding element in "b" is zero.
-
-FOR j := 0 to 7
- i := j*8
- IF b[i+7:i] < 0
- dst[i+7:i] := -(a[i+7:i])
- ELSE IF b[i+7:i] == 0
- dst[i+7:i] := 0
- ELSE
- dst[i+7:i] := a[i+7:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Negate packed 16-bit integers in "a" when the corresponding signed 16-bit integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed out when the corresponding element in "b" is zero.
-
-FOR j := 0 to 3
- i := j*16
- IF b[i+15:i] < 0
- dst[i+15:i] := -(a[i+15:i])
- ELSE IF b[i+15:i] == 0
- dst[i+15:i] := 0
- ELSE
- dst[i+15:i] := a[i+15:i]
- FI
-ENDFOR
-
-
-
-
-
- Integer
- SSSE3
- Arithmetic
-
-
-
- Negate packed 32-bit integers in "a" when the corresponding signed 32-bit integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed out when the corresponding element in "b" is zero.
-
-FOR j := 0 to 1
- i := j*32
- IF b[i+31:i] < 0
- dst[i+31:i] := -(a[i+31:i])
- ELSE IF b[i+31:i] == 0
- dst[i+31:i] := 0
- ELSE
- dst[i+31:i] := a[i+31:i]
- FI
-ENDFOR
-
-
-
-
-
- TSC
- General Support
-
-
- Copy the current 64-bit value of the processor's time-stamp counter into "dst".
- dst[63:0] := TimeStampCounter
-
-
-
-
-
- TSXLDTRK
- Miscellaneous
-
- Mark the start of a TSX (HLE/RTM) suspend load address tracking region. If this is used inside a transactional region, subsequent loads are not added to the read set of the transaction. If this is used inside a suspend load address tracking region it will cause transaction abort. If this is used outside of a transactional region it behaves like a NOP.
-
-
-
-
- TSXLDTRK
- Miscellaneous
-
- Mark the end of a TSX (HLE/RTM) suspend load address tracking region. If this is used inside a suspend load address tracking region it will end the suspend region and all following load addresses will be added to the transaction read set. If this is used inside an active transaction but not in a suspend region it will cause transaction abort. If this is used outside of a transactional region it behaves like a NOP.
-
-
-
-
- Integer
- AVX512VL
- VAES
- Cryptography
-
-
-
- Perform the last round of an AES encryption flow on data (state) in "a" using the round key in "RoundKey", and store the results in "dst"."
- FOR j := 0 to 1
- i := j*128
- a[i+127:i] := ShiftRows(a[i+127:i])
- a[i+127:i] := SubBytes(a[i+127:i])
- dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- VAES
- Cryptography
-
-
-
- Perform one round of an AES encryption flow on data (state) in "a" using the round key in "RoundKey", and store the results in "dst"."
- FOR j := 0 to 1
- i := j*128
- a[i+127:i] := ShiftRows(a[i+127:i])
- a[i+127:i] := SubBytes(a[i+127:i])
- a[i+127:i] := MixColumns(a[i+127:i])
- dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- VAES
- Cryptography
-
-
-
- Perform the last round of an AES decryption flow on data (state) in "a" using the round key in "RoundKey", and store the results in "dst".
- FOR j := 0 to 1
- i := j*128
- a[i+127:i] := InvShiftRows(a[i+127:i])
- a[i+127:i] := InvSubBytes(a[i+127:i])
- dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- AVX512VL
- VAES
- Cryptography
-
-
-
- Perform one round of an AES decryption flow on data (state) in "a" using the round key in "RoundKey", and store the results in "dst".
- FOR j := 0 to 1
- i := j*128
- a[i+127:i] := InvShiftRows(a[i+127:i])
- a[i+127:i] := InvSubBytes(a[i+127:i])
- a[i+127:i] := InvMixColumns(a[i+127:i])
- dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Integer
- VPCLMULQDQ
- Application-Targeted
-
-
-
-
- Carry-less multiplication of one quadword of
- 'b' by one quadword of 'c', stores
- the 128-bit result in 'dst'. The immediate 'Imm8' is
- used to determine which quadwords of 'b'
- and 'c' should be used.
-
-DEFINE PCLMUL128(X,Y) {
- FOR i := 0 to 63
- TMP[i] := X[ 0 ] and Y[ i ]
- FOR j := 1 to i
+ FI
+ ELSE // don't negate
+ IntRes2[i] := IntRes1[i]
+ FI
+ ENDFOR
+ // output
+ dst := (IntRes2 == 0) AND (lb > UpperBound)
+
+
+ SSE4.2
+
+ String Compare
+
+
+
+
+
+ Compare packed signed 64-bit integers in "a" and "b" for greater-than, and
+ store the results in "dst".
+
+ FOR j := 0 to 1
+ i := j*64
+ dst[i+63:i] := ( a[i+63:i] > b[i+63:i] ) ? 0xFFFFFFFFFFFFFFFF : 0
+ ENDFOR
+
+
+ SSE4.2
+
+ Compare
+
+
+
+
+
+ Starting with the initial value in "crc", accumulates a CRC32 value for
+ unsigned 8-bit integer "v", and stores the result in "dst".
+ tmp1[7:0] := v[0:7] // bit reflection
+ tmp2[31:0] := crc[0:31] // bit reflection
+ tmp3[39:0] := tmp1[7:0] << 32
+ tmp4[39:0] := tmp2[31:0] << 8
+ tmp5[39:0] := tmp3[39:0] XOR tmp4[39:0]
+ tmp6[31:0] := MOD2(tmp5[39:0], 0x11EDC6F41) // remainder from polynomial division
+ modulus 2
+ dst[31:0] := tmp6[0:31] // bit reflection
+
+
+ SSE4.2
+
+ Cryptography
+
+
+
+
+
+ Starting with the initial value in "crc", accumulates a CRC32 value for
+ unsigned 16-bit integer "v", and stores the result in "dst".
+ tmp1[15:0] := v[0:15] // bit reflection
+ tmp2[31:0] := crc[0:31] // bit reflection
+ tmp3[47:0] := tmp1[15:0] << 32
+ tmp4[47:0] := tmp2[31:0] << 16
+ tmp5[47:0] := tmp3[47:0] XOR tmp4[47:0]
+ tmp6[31:0] := MOD2(tmp5[47:0], 0x11EDC6F41) // remainder from polynomial division
+ modulus 2
+ dst[31:0] := tmp6[0:31] // bit reflection
+
+
+ SSE4.2
+
+ Cryptography
+
+
+
+
+
+ Starting with the initial value in "crc", accumulates a CRC32 value for
+ unsigned 32-bit integer "v", and stores the result in "dst".
+ tmp1[31:0] := v[0:31] // bit reflection
+ tmp2[31:0] := crc[0:31] // bit reflection
+ tmp3[63:0] := tmp1[31:0] << 32
+ tmp4[63:0] := tmp2[31:0] << 32
+ tmp5[63:0] := tmp3[63:0] XOR tmp4[63:0]
+ tmp6[31:0] := MOD2(tmp5[63:0], 0x11EDC6F41) // remainder from polynomial division
+ modulus 2
+ dst[31:0] := tmp6[0:31] // bit reflection
+
+
+ SSE4.2
+
+ Cryptography
+
+
+
+
+
+ Starting with the initial value in "crc", accumulates a CRC32 value for
+ unsigned 64-bit integer "v", and stores the result in "dst".
+ tmp1[63:0] := v[0:63] // bit reflection
+ tmp2[31:0] := crc[0:31] // bit reflection
+ tmp3[95:0] := tmp1[31:0] << 32
+ tmp4[95:0] := tmp2[63:0] << 64
+ tmp5[95:0] := tmp3[95:0] XOR tmp4[95:0]
+ tmp6[31:0] := MOD2(tmp5[95:0], 0x11EDC6F41) // remainder from polynomial division
+ modulus 2
+ dst[31:0] := tmp6[0:31] // bit reflection
+
+
+ SSE4.2
+
+ Cryptography
+
+
+
+
+
+
+ Compute the absolute value of packed signed 8-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ dst[i+7:i] := ABS(Int(a[i+7:i]))
+ ENDFOR
+
+
+ SSSE3
+
+ Special Math Functions
+
+
+
+
+ Compute the absolute value of packed signed 8-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ dst[i+7:i] := ABS(a[i+7:i])
+ ENDFOR
+
+
+ SSSE3
+
+ Special Math Functions
+
+
+
+
+ Compute the absolute value of packed signed 16-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := ABS(Int(a[i+15:i]))
+ ENDFOR
+
+
+ SSSE3
+
+ Special Math Functions
+
+
+
+
+ Compute the absolute value of packed signed 16-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := ABS(a[i+15:i])
+ ENDFOR
+
+
+ SSSE3
+
+ Special Math Functions
+
+
+
+
+ Compute the absolute value of packed signed 32-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 1
+ i := j*32
+ dst[i+31:i] := ABS(a[i+31:i])
+ ENDFOR
+
+
+ SSSE3
+
+ Special Math Functions
+
+
+
+
+ Compute the absolute value of packed signed 32-bit integers in "a", and store
+ the unsigned results in "dst".
+
+ FOR j := 0 to 3
+ i := j*32
+ dst[i+31:i] := ABS(a[i+31:i])
+ ENDFOR
+
+
+ SSSE3
+
+ Special Math Functions
+
+
+
+
+
+ Shuffle packed 8-bit integers in "a" according to shuffle control mask in the
+ corresponding 8-bit element of "b", and store the results in "dst".
+
+ FOR j := 0 to 15
+ i := j*8
+ IF b[i+7] == 1
+ dst[i+7:i] := 0
+ ELSE
+ index[3:0] := b[i+3:i]
+ dst[i+7:i] := a[index*8+7:index*8]
+ FI
+ ENDFOR
+
+
+ SSSE3
+
+ Swizzle
+
+
+
+
+
+ Shuffle packed 8-bit integers in "a" according to shuffle control mask in the
+ corresponding 8-bit element of "b", and store the results in "dst".
+
+ FOR j := 0 to 7
+ i := j*8
+ IF b[i+7] == 1
+ dst[i+7:i] := 0
+ ELSE
+ index[2:0] := b[i+2:i]
+ dst[i+7:i] := a[index*8+7:index*8]
+ FI
+ ENDFOR
+
+
+ SSSE3
+
+ Swizzle
+
+
+
+
+
+
+ Concatenate 16-byte blocks in "a" and "b" into a 32-byte temporary result,
+ shift the result right by "imm8" bytes, and store the low 16 bytes in "dst".
+
+ tmp[255:0] := ((a[127:0] << 128)[255:0] OR b[127:0]) >> (imm8*8)
+ dst[127:0] := tmp[127:0]
+
+
+ SSSE3
+
+ Miscellaneous
+
+
+
+
+
+
+ Concatenate 8-byte blocks in "a" and "b" into a 16-byte temporary result, shift
+ the result right by "imm8" bytes, and store the low 16 bytes in "dst".
+
+ tmp[127:0] := ((a[63:0] << 64)[127:0] OR b[63:0]) >> (imm8*8)
+ dst[63:0] := tmp[63:0]
+
+
+ SSSE3
+
+ Miscellaneous
+
+
+
+
+
+ Horizontally add adjacent pairs of 16-bit integers in "a" and "b", and pack the
+ signed 16-bit results in "dst".
+
+ dst[15:0] := a[31:16] + a[15:0]
+ dst[31:16] := a[63:48] + a[47:32]
+ dst[47:32] := a[95:80] + a[79:64]
+ dst[63:48] := a[127:112] + a[111:96]
+ dst[79:64] := b[31:16] + b[15:0]
+ dst[95:80] := b[63:48] + b[47:32]
+ dst[111:96] := b[95:80] + b[79:64]
+ dst[127:112] := b[127:112] + b[111:96]
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of signed 16-bit integers in "a" and "b" using
+ saturation, and pack the signed 16-bit results in "dst".
+
+ dst[15:0] := Saturate16(a[31:16] + a[15:0])
+ dst[31:16] := Saturate16(a[63:48] + a[47:32])
+ dst[47:32] := Saturate16(a[95:80] + a[79:64])
+ dst[63:48] := Saturate16(a[127:112] + a[111:96])
+ dst[79:64] := Saturate16(b[31:16] + b[15:0])
+ dst[95:80] := Saturate16(b[63:48] + b[47:32])
+ dst[111:96] := Saturate16(b[95:80] + b[79:64])
+ dst[127:112] := Saturate16(b[127:112] + b[111:96])
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of 32-bit integers in "a" and "b", and pack the
+ signed 32-bit results in "dst".
+
+ dst[31:0] := a[63:32] + a[31:0]
+ dst[63:32] := a[127:96] + a[95:64]
+ dst[95:64] := b[63:32] + b[31:0]
+ dst[127:96] := b[127:96] + b[95:64]
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of 16-bit integers in "a" and "b", and pack the
+ signed 16-bit results in "dst".
+
+ dst[15:0] := a[31:16] + a[15:0]
+ dst[31:16] := a[63:48] + a[47:32]
+ dst[47:32] := b[31:16] + b[15:0]
+ dst[63:48] := b[63:48] + b[47:32]
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of 32-bit integers in "a" and "b", and pack the
+ signed 32-bit results in "dst".
+
+ dst[31:0] := a[63:32] + a[31:0]
+ dst[63:32] := b[63:32] + b[31:0]
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally add adjacent pairs of signed 16-bit integers in "a" and "b" using
+ saturation, and pack the signed 16-bit results in "dst".
+
+ dst[15:0] := Saturate16(a[31:16] + a[15:0])
+ dst[31:16] := Saturate16(a[63:48] + a[47:32])
+ dst[47:32] := Saturate16(b[31:16] + b[15:0])
+ dst[63:48] := Saturate16(b[63:48] + b[47:32])
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of 16-bit integers in "a" and "b", and
+ pack the signed 16-bit results in "dst".
+
+ dst[15:0] := a[15:0] - a[31:16]
+ dst[31:16] := a[47:32] - a[63:48]
+ dst[47:32] := a[79:64] - a[95:80]
+ dst[63:48] := a[111:96] - a[127:112]
+ dst[79:64] := b[15:0] - b[31:16]
+ dst[95:80] := b[47:32] - b[63:48]
+ dst[111:96] := b[79:64] - b[95:80]
+ dst[127:112] := b[111:96] - b[127:112]
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of signed 16-bit integers in "a" and "b"
+ using saturation, and pack the signed 16-bit results in "dst".
+
+ dst[15:0] := Saturate16(a[15:0] - a[31:16])
+ dst[31:16] := Saturate16(a[47:32] - a[63:48])
+ dst[47:32] := Saturate16(a[79:64] - a[95:80])
+ dst[63:48] := Saturate16(a[111:96] - a[127:112])
+ dst[79:64] := Saturate16(b[15:0] - b[31:16])
+ dst[95:80] := Saturate16(b[47:32] - b[63:48])
+ dst[111:96] := Saturate16(b[79:64] - b[95:80])
+ dst[127:112] := Saturate16(b[111:96] - b[127:112])
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of 32-bit integers in "a" and "b", and
+ pack the signed 32-bit results in "dst".
+
+ dst[31:0] := a[31:0] - a[63:32]
+ dst[63:32] := a[95:64] - a[127:96]
+ dst[95:64] := b[31:0] - b[63:32]
+ dst[127:96] := b[95:64] - b[127:96]
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of 16-bit integers in "a" and "b", and
+ pack the signed 16-bit results in "dst".
+
+ dst[15:0] := a[15:0] - a[31:16]
+ dst[31:16] := a[47:32] - a[63:48]
+ dst[47:32] := b[15:0] - b[31:16]
+ dst[63:48] := b[47:32] - b[63:48]
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of 32-bit integers in "a" and "b", and
+ pack the signed 32-bit results in "dst".
+
+ dst[31:0] := a[31:0] - a[63:32]
+ dst[63:32] := b[31:0] - b[63:32]
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Horizontally subtract adjacent pairs of signed 16-bit integers in "a" and "b"
+ using saturation, and pack the signed 16-bit results in "dst".
+
+ dst[15:0] := Saturate16(a[15:0] - a[31:16])
+ dst[31:16] := Saturate16(a[47:32] - a[63:48])
+ dst[47:32] := Saturate16(b[15:0] - b[31:16])
+ dst[63:48] := Saturate16(b[47:32] - b[63:48])
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Vertically multiply each unsigned 8-bit integer from "a" with the corresponding
+ signed 8-bit integer from "b", producing intermediate signed 16-bit integers.
+ Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the
+ saturated results in "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
+ ENDFOR
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Vertically multiply each unsigned 8-bit integer from "a" with the corresponding
+ signed 8-bit integer from "b", producing intermediate signed 16-bit integers.
+ Horizontally add adjacent pairs of intermediate signed 16-bit integers, and pack the
+ saturated results in "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ dst[i+15:i] := Saturate16( a[i+15:i+8]*b[i+15:i+8] + a[i+7:i]*b[i+7:i] )
+ ENDFOR
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Truncate each intermediate integer to the 18 most significant
+ bits, round by adding 1, and store bits [16:1] to "dst".
+
+ FOR j := 0 to 7
+ i := j*16
+ tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
+ dst[i+15:i] := tmp[16:1]
+ ENDFOR
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Multiply packed signed 16-bit integers in "a" and "b", producing intermediate
+ signed 32-bit integers. Truncate each intermediate integer to the 18 most significant
+ bits, round by adding 1, and store bits [16:1] to "dst".
+
+ FOR j := 0 to 3
+ i := j*16
+ tmp[31:0] := ((SignExtend32(a[i+15:i]) * SignExtend32(b[i+15:i])) >> 14) + 1
+ dst[i+15:i] := tmp[16:1]
+ ENDFOR
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Negate packed 8-bit integers in "a" when the corresponding signed 8-bit integer
+ in "b" is negative, and store the results in "dst". Element in "dst" are zeroed out when
+ the corresponding element in "b" is zero.
+
+ FOR j := 0 to 15
+ i := j*8
+ IF b[i+7:i] < 0
+ dst[i+7:i] := -(a[i+7:i])
+ ELSE IF b[i+7:i] == 0
+ dst[i+7:i] := 0
+ ELSE
+ dst[i+7:i] := a[i+7:i]
+ FI
+ ENDFOR
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Negate packed 16-bit integers in "a" when the corresponding signed 16-bit
+ integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed
+ out when the corresponding element in "b" is zero.
+
+ FOR j := 0 to 7
+ i := j*16
+ IF b[i+15:i] < 0
+ dst[i+15:i] := -(a[i+15:i])
+ ELSE IF b[i+15:i] == 0
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Negate packed 32-bit integers in "a" when the corresponding signed 32-bit
+ integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed
+ out when the corresponding element in "b" is zero.
+
+ FOR j := 0 to 3
+ i := j*32
+ IF b[i+31:i] < 0
+ dst[i+31:i] := -(a[i+31:i])
+ ELSE IF b[i+31:i] == 0
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Negate packed 8-bit integers in "a" when the corresponding signed 8-bit integer
+ in "b" is negative, and store the results in "dst". Element in "dst" are zeroed out when
+ the corresponding element in "b" is zero.
+
+ FOR j := 0 to 7
+ i := j*8
+ IF b[i+7:i] < 0
+ dst[i+7:i] := -(a[i+7:i])
+ ELSE IF b[i+7:i] == 0
+ dst[i+7:i] := 0
+ ELSE
+ dst[i+7:i] := a[i+7:i]
+ FI
+ ENDFOR
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Negate packed 16-bit integers in "a" when the corresponding signed 16-bit
+ integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed
+ out when the corresponding element in "b" is zero.
+
+ FOR j := 0 to 3
+ i := j*16
+ IF b[i+15:i] < 0
+ dst[i+15:i] := -(a[i+15:i])
+ ELSE IF b[i+15:i] == 0
+ dst[i+15:i] := 0
+ ELSE
+ dst[i+15:i] := a[i+15:i]
+ FI
+ ENDFOR
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+ Negate packed 32-bit integers in "a" when the corresponding signed 32-bit
+ integer in "b" is negative, and store the results in "dst". Element in "dst" are zeroed
+ out when the corresponding element in "b" is zero.
+
+ FOR j := 0 to 1
+ i := j*32
+ IF b[i+31:i] < 0
+ dst[i+31:i] := -(a[i+31:i])
+ ELSE IF b[i+31:i] == 0
+ dst[i+31:i] := 0
+ ELSE
+ dst[i+31:i] := a[i+31:i]
+ FI
+ ENDFOR
+
+
+ SSSE3
+
+ Arithmetic
+
+
+
+
+
+
+ Copy the current 64-bit value of the processor's time-stamp counter into "dst".
+ dst[63:0] := TimeStampCounter
+
+
+ TSC
+
+ General Support
+
+
+
+
+
+ Mark the start of a TSX (HLE/RTM) suspend load address tracking region. If this
+ is used inside a transactional region, subsequent loads are not added to the read set of
+ the transaction. If this is used inside a suspend load address tracking region it will
+ cause transaction abort. If this is used outside of a transactional region it behaves
+ like a NOP.
+
+ TSXLDTRK
+
+ Miscellaneous
+
+
+
+ Mark the end of a TSX (HLE/RTM) suspend load address tracking region. If this
+ is used inside a suspend load address tracking region it will end the suspend region and
+ all following load addresses will be added to the transaction read set. If this is used
+ inside an active transaction but not in a suspend region it will cause transaction
+ abort. If this is used outside of a transactional region it behaves like a NOP.
+
+ TSXLDTRK
+
+ Miscellaneous
+
+
+
+
+
+
+ Clear the user interrupt flag (UIF).
+
+ UINTR
+
+ General Support
+
+
+
+
+ Send user interprocessor interrupts specified in unsigned 64-bit integer "__a".
+
+ UINTR
+
+ General Support
+
+
+
+
+ Sets the user interrupt flag (UIF).
+
+ UINTR
+
+ General Support
+
+
+
+
+ Store the current user interrupt flag (UIF) in unsigned 8-bit integer "dst".
+
+ UINTR
+
+ General Support
+
+
+
+
+
+ Reads the contents of a 64-bit MSR specified in "__A" into "dst".
+ DEST := MSR[__A]
+
+
+ USER_MSR
+
+ General Support
+
+
+
+
+
+ Writes the contents of "__B" into the 64-bit MSR specified in "__A".
+ MSR[__A] := __B
+
+
+ USER_MSR
+
+ General Support
+
+
+
+
+
+ Perform the last round of an AES encryption flow on data (state) in "a" using
+ the round key in "RoundKey", and store the results in "dst"."
+ FOR j := 0 to 1
+ i := j*128
+ a[i+127:i] := ShiftRows(a[i+127:i])
+ a[i+127:i] := SubBytes(a[i+127:i])
+ dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ VAES
+ AVX512VL
+
+ Cryptography
+
+
+
+
+
+ Perform one round of an AES encryption flow on data (state) in "a" using the
+ round key in "RoundKey", and store the results in "dst"."
+ FOR j := 0 to 1
+ i := j*128
+ a[i+127:i] := ShiftRows(a[i+127:i])
+ a[i+127:i] := SubBytes(a[i+127:i])
+ a[i+127:i] := MixColumns(a[i+127:i])
+ dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ VAES
+ AVX512VL
+
+ Cryptography
+
+
+
+
+
+ Perform the last round of an AES decryption flow on data (state) in "a" using
+ the round key in "RoundKey", and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*128
+ a[i+127:i] := InvShiftRows(a[i+127:i])
+ a[i+127:i] := InvSubBytes(a[i+127:i])
+ dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ VAES
+ AVX512VL
+
+ Cryptography
+
+
+
+
+
+ Perform one round of an AES decryption flow on data (state) in "a" using the
+ round key in "RoundKey", and store the results in "dst".
+ FOR j := 0 to 1
+ i := j*128
+ a[i+127:i] := InvShiftRows(a[i+127:i])
+ a[i+127:i] := InvSubBytes(a[i+127:i])
+ a[i+127:i] := InvMixColumns(a[i+127:i])
+ dst[i+127:i] := a[i+127:i] XOR RoundKey[i+127:i]
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ VAES
+ AVX512VL
+
+ Cryptography
+
+
+
+
+
+
+
+
+ Carry-less multiplication of one quadword of
+ 'b' by one quadword of 'c', stores
+ the 128-bit result in 'dst'. The immediate 'Imm8' is
+ used to determine which quadwords of 'b'
+ and 'c' should be used.
+
+ DEFINE PCLMUL128(X,Y) {
+ FOR i := 0 to 63
+ TMP[i] := X[ 0 ] and Y[ i ]
+ FOR j := 1 to i
TMP[i] := TMP[i] xor (X[ j ] and Y[ i - j ])
- ENDFOR
- DEST[ i ] := TMP[ i ]
- ENDFOR
- FOR i := 64 to 126
- TMP[i] := 0
- FOR j := i - 63 to 63
+ ENDFOR
+ DEST[ i ] := TMP[ i ]
+ ENDFOR
+ FOR i := 64 to 126
+ TMP[i] := 0
+ FOR j := i - 63 to 63
TMP[i] := TMP[i] xor (X[ j ] and Y[ i - j ])
- ENDFOR
- DEST[ i ] := TMP[ i ]
- ENDFOR
- DEST[127] := 0
- RETURN DEST // 128b vector
-}
-FOR i := 0 to 3
- IF Imm8[0] == 0
- TEMP1 := b.m128[i].qword[0]
- ELSE
- TEMP1 := b.m128[i].qword[1]
- FI
- IF Imm8[4] == 0
- TEMP2 := c.m128[i].qword[0]
- ELSE
- TEMP2 := c.m128[i].qword[1]
- FI
- dst.m128[i] := PCLMUL128(TEMP1, TEMP2)
-ENDFOR
-dst[MAX:512] := 0
-
-
-
-
-
- Integer
- AVX512VL
- VPCLMULQDQ
- Application-Targeted
-
-
-
-
- Carry-less multiplication of one quadword of
- 'b' by one quadword of 'c', stores
- the 128-bit result in 'dst'. The immediate 'Imm8' is
- used to determine which quadwords of 'b'
- and 'c' should be used.
-
-DEFINE PCLMUL128(X,Y) {
- FOR i := 0 to 63
- TMP[i] := X[ 0 ] and Y[ i ]
- FOR j := 1 to i
+ ENDFOR
+ DEST[ i ] := TMP[ i ]
+ ENDFOR
+ DEST[127] := 0
+ RETURN DEST // 128b vector
+ }
+ FOR i := 0 to 1
+ IF Imm8[0] == 0
+ TEMP1 := b.m128[i].qword[0]
+ ELSE
+ TEMP1 := b.m128[i].qword[1]
+ FI
+ IF Imm8[4] == 0
+ TEMP2 := c.m128[i].qword[0]
+ ELSE
+ TEMP2 := c.m128[i].qword[1]
+ FI
+ dst.m128[i] := PCLMUL128(TEMP1, TEMP2)
+ ENDFOR
+ dst[MAX:256] := 0
+
+
+ VPCLMULQDQ
+ AVX512VL
+
+ Application-Targeted
+
+
+
+
+
+
+
+
+ Carry-less multiplication of one quadword of
+ 'b' by one quadword of 'c', stores
+ the 128-bit result in 'dst'. The immediate 'Imm8' is
+ used to determine which quadwords of 'b'
+ and 'c' should be used.
+
+ DEFINE PCLMUL128(X,Y) {
+ FOR i := 0 to 63
+ TMP[i] := X[ 0 ] and Y[ i ]
+ FOR j := 1 to i
TMP[i] := TMP[i] xor (X[ j ] and Y[ i - j ])
- ENDFOR
- DEST[ i ] := TMP[ i ]
- ENDFOR
- FOR i := 64 to 126
- TMP[i] := 0
- FOR j := i - 63 to 63
+ ENDFOR
+ DEST[ i ] := TMP[ i ]
+ ENDFOR
+ FOR i := 64 to 126
+ TMP[i] := 0
+ FOR j := i - 63 to 63
TMP[i] := TMP[i] xor (X[ j ] and Y[ i - j ])
- ENDFOR
- DEST[ i ] := TMP[ i ]
- ENDFOR
- DEST[127] := 0
- RETURN DEST // 128b vector
-}
-FOR i := 0 to 1
- IF Imm8[0] == 0
- TEMP1 := b.m128[i].qword[0]
- ELSE
- TEMP1 := b.m128[i].qword[1]
- FI
- IF Imm8[4] == 0
- TEMP2 := c.m128[i].qword[0]
- ELSE
- TEMP2 := c.m128[i].qword[1]
- FI
- dst.m128[i] := PCLMUL128(TEMP1, TEMP2)
-ENDFOR
-dst[MAX:256] := 0
-
-
-
-
-
- Flag
- WAITPKG
- Miscellaneous
-
-
-
- Directs the processor to enter an implementation-dependent optimized state until the TSC reaches or exceeds the value specified in "counter". Bit 0 of "ctrl" selects between a lower power (cleared) or faster wakeup (set) optimized state. Returns the carry flag (CF).
-
-
-
-
- Flag
- WAITPKG
- Miscellaneous
-
-
-
- Directs the processor to enter an implementation-dependent optimized state while monitoring a range of addresses. The instruction wakes up when the TSC reaches or exceeds the value specified in "counter" (if the monitoring hardware did not trigger beforehand). Bit 0 of "ctrl" selects between a lower power (cleared) or faster wakeup (set) optimized state. Returns the carry flag (CF).
-
-
-
-
- WAITPKG
- Miscellaneous
-
-
- Sets up a linear address range to be
- monitored by hardware and activates the
- monitor. The address range should be a writeback
- memory caching type. The address is
- contained in "a".
-
-
-
-
- WBNOINVD
- Miscellaneous
-
-
- Write back and do not flush internal caches.
- Initiate writing-back without flushing of external
- caches.
-
-
-
-
- XSAVE
- OS-Targeted
-
-
- Copy up to 64-bits from the value of the extended control register (XCR) specified by "a" into "dst". Currently only XFEATURE_ENABLED_MASK XCR is supported.
- dst[63:0] := XCR[a]
-
-
-
-
-
- XSAVE
- OS-Targeted
-
-
-
- Perform a full or partial restore of the enabled processor states using the state information stored in memory at "mem_addr". State is restored based on bits [62:0] in "rs_mask", "XCR0", and "mem_addr.HEADER.XSTATE_BV". "mem_addr" must be aligned on a 64-byte boundary.
- st_mask := mem_addr.HEADER.XSTATE_BV[62:0]
-FOR i := 0 to 62
- IF (rs_mask[i] AND XCR0[i])
- IF st_mask[i]
+ ENDFOR
+ DEST[ i ] := TMP[ i ]
+ ENDFOR
+ DEST[127] := 0
+ RETURN DEST // 128b vector
+ }
+ FOR i := 0 to 3
+ IF Imm8[0] == 0
+ TEMP1 := b.m128[i].qword[0]
+ ELSE
+ TEMP1 := b.m128[i].qword[1]
+ FI
+ IF Imm8[4] == 0
+ TEMP2 := c.m128[i].qword[0]
+ ELSE
+ TEMP2 := c.m128[i].qword[1]
+ FI
+ dst.m128[i] := PCLMUL128(TEMP1, TEMP2)
+ ENDFOR
+ dst[MAX:512] := 0
+
+
+ VPCLMULQDQ
+
+ Application-Targeted
+
+
+
+
+
+
+
+ Directs the processor to enter an implementation-dependent optimized state
+ until the TSC reaches or exceeds the value specified in "counter". Bit 0 of "ctrl"
+ selects between a lower power (cleared) or faster wakeup (set) optimized state. Returns
+ the carry flag (CF). If the processor that executed a UMWAIT instruction wakes due to
+ the expiration of the operating system timelimit, the instructions sets RFLAGS.CF;
+ otherwise, that flag is cleared.
+
+ WAITPKG
+
+ Miscellaneous
+
+
+
+
+
+ Directs the processor to enter an implementation-dependent optimized state
+ while monitoring a range of addresses. The instruction wakes up when the TSC reaches or
+ exceeds the value specified in "counter" (if the monitoring hardware did not trigger
+ beforehand). Bit 0 of "ctrl" selects between a lower power (cleared) or faster wakeup
+ (set) optimized state. Returns the carry flag (CF). If the processor that executed a
+ UMWAIT instruction wakes due to the expiration of the operating system timelimit, the
+ instructions sets RFLAGS.CF; otherwise, that flag is cleared.
+
+ WAITPKG
+
+ Miscellaneous
+
+
+
+
+ Sets up a linear address range to be
+ monitored by hardware and activates the
+ monitor. The address range should be a writeback
+ memory caching type. The address is
+ contained in "a".
+
+ WAITPKG
+
+ Miscellaneous
+
+
+
+
+
+
+ Write back and do not flush internal caches.
+ Initiate writing-back without flushing of external
+ caches.
+
+ WBNOINVD
+
+ Miscellaneous
+
+
+
+
+
+
+
+ Perform a full or partial save of the enabled processor states to memory at
+ "mem_addr"; xsavec differs from xsave in that it uses compaction and that it may use
+ init optimization. State is saved based on bits [62:0] in "save_mask" and "XCR0".
+ "mem_addr" must be aligned on a 64-byte boundary.
+ mask[62:0] := save_mask[62:0] AND XCR0[62:0]
+ FOR i := 0 to 62
+ IF mask[i]
+ CASE (i) OF
+ 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
+ 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
+ DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
+ ESAC
+ mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+ XSAVEC
+
+ OS-Targeted
+
+
+
+
+
+ Perform a full or partial save of the enabled processor states to memory at
+ "mem_addr"; xsavec differs from xsave in that it uses compaction and that it may use
+ init optimization. State is saved based on bits [62:0] in "save_mask" and "XCR0".
+ "mem_addr" must be aligned on a 64-byte boundary.
+ mask[62:0] := save_mask[62:0] AND XCR0[62:0]
+ FOR i := 0 to 62
+ IF mask[i]
+ CASE (i) OF
+ 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
+ 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
+ DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
+ ESAC
+ mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+ XSAVEC
+
+ OS-Targeted
+
+
+
+
+
+
+
+ Perform a full or partial save of the enabled processor states to memory at
+ "mem_addr". State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr"
+ must be aligned on a 64-byte boundary. The hardware may optimize the manner in which
+ data is saved. The performance of this instruction will be equal to or better than using
+ the XSAVE instruction.
+ mask[62:0] := save_mask[62:0] AND XCR0[62:0]
+ FOR i := 0 to 62
+ IF mask[i]
+ CASE (i) OF
+ 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
+ 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
+ 2: mem_addr.EXT_SAVE_Area2[YMM] := ProcessorState[YMM]
+ DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
+ ESAC
+ mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+ XSAVEOPT
+
+ OS-Targeted
+
+
+
+
+
+ Perform a full or partial save of the enabled processor states to memory at
+ "mem_addr". State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr"
+ must be aligned on a 64-byte boundary. The hardware may optimize the manner in which
+ data is saved. The performance of this instruction will be equal to or better than using
+ the XSAVE64 instruction.
+ mask[62:0] := save_mask[62:0] AND XCR0[62:0]
+ FOR i := 0 to 62
+ IF mask[i]
+ CASE (i) OF
+ 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
+ 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
+ 2: mem_addr.EXT_SAVE_Area2[YMM] := ProcessorState[YMM]
+ DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
+ ESAC
+ mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+ XSAVEOPT
+
+ OS-Targeted
+
+
+
+
+
+
+
+ Perform a full or partial save of the enabled processor states to memory at
+ "mem_addr"; xsaves differs from xsave in that it can save state components corresponding
+ to bits set in IA32_XSS MSR and that it may use the modified optimization. State is
+ saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr" must be aligned on a
+ 64-byte boundary.
+ mask[62:0] := save_mask[62:0] AND XCR0[62:0]
+ FOR i := 0 to 62
+ IF mask[i]
+ CASE (i) OF
+ 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
+ 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
+ DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
+ ESAC
+ mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+ XSS
+
+ OS-Targeted
+
+
+
+
+
+ Perform a full or partial save of the enabled processor states to memory at
+ "mem_addr"; xsaves differs from xsave in that it can save state components corresponding
+ to bits set in IA32_XSS MSR and that it may use the modified optimization. State is
+ saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr" must be aligned on a
+ 64-byte boundary.
+ mask[62:0] := save_mask[62:0] AND XCR0[62:0]
+ FOR i := 0 to 62
+ IF mask[i]
+ CASE (i) OF
+ 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
+ 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
+ DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
+ ESAC
+ mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+ XSS
+
+ OS-Targeted
+
+
+
+
+
+ Perform a full or partial restore of the enabled processor states using the
+ state information stored in memory at "mem_addr". xrstors differs from xrstor in that it
+ can restore state components corresponding to bits set in the IA32_XSS MSR; xrstors
+ cannot restore from an xsave area in which the extended region is in the standard form.
+ State is restored based on bits [62:0] in "rs_mask", "XCR0", and
+ "mem_addr.HEADER.XSTATE_BV". "mem_addr" must be aligned on a 64-byte boundary.
+ st_mask := mem_addr.HEADER.XSTATE_BV[62:0]
+ FOR i := 0 to 62
+ IF (rs_mask[i] AND XCR0[i])
+ IF st_mask[i]
CASE (i) OF
0: ProcessorState[x87_FPU] := mem_addr.FPUSSESave_Area[FPU]
1: ProcessorState[SSE] := mem_addr.FPUSSESaveArea[SSE]
DEFAULT: ProcessorState[i] := mem_addr.Ext_Save_Area[i]
ESAC
- ELSE
+ ELSE
// ProcessorExtendedState := Processor Supplied Values
CASE (i) OF
1: MXCSR := mem_addr.FPUSSESave_Area[SSE]
ESAC
- FI
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
- XSAVE
- OS-Targeted
-
-
-
- Perform a full or partial restore of the enabled processor states using the state information stored in memory at "mem_addr". State is restored based on bits [62:0] in "rs_mask", "XCR0", and "mem_addr.HEADER.XSTATE_BV". "mem_addr" must be aligned on a 64-byte boundary.
- st_mask := mem_addr.HEADER.XSTATE_BV[62:0]
-FOR i := 0 to 62
- IF (rs_mask[i] AND XCR0[i])
- IF st_mask[i]
+ FI
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+ XSS
+
+ OS-Targeted
+
+
+
+
+
+ Perform a full or partial restore of the enabled processor states using the
+ state information stored in memory at "mem_addr". xrstors differs from xrstor in that it
+ can restore state components corresponding to bits set in the IA32_XSS MSR; xrstors
+ cannot restore from an xsave area in which the extended region is in the standard form.
+ State is restored based on bits [62:0] in "rs_mask", "XCR0", and
+ "mem_addr.HEADER.XSTATE_BV". "mem_addr" must be aligned on a 64-byte boundary.
+ st_mask := mem_addr.HEADER.XSTATE_BV[62:0]
+ FOR i := 0 to 62
+ IF (rs_mask[i] AND XCR0[i])
+ IF st_mask[i]
CASE (i) OF
0: ProcessorState[x87_FPU] := mem_addr.FPUSSESave_Area[FPU]
1: ProcessorState[SSE] := mem_addr.FPUSSESaveArea[SSE]
DEFAULT: ProcessorState[i] := mem_addr.Ext_Save_Area[i]
ESAC
- ELSE
+ ELSE
// ProcessorExtendedState := Processor Supplied Values
CASE (i) OF
1: MXCSR := mem_addr.FPUSSESave_Area[SSE]
ESAC
- FI
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
- XSAVE
- OS-Targeted
-
-
-
- Perform a full or partial save of the enabled processor states to memory at "mem_addr". State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr" must be aligned on a 64-byte boundary.
- mask[62:0] := save_mask[62:0] AND XCR0[62:0]
-FOR i := 0 to 62
- IF mask[i]
- CASE (i) OF
- 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
- 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
- DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
- ESAC
- mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
- XSAVE
- OS-Targeted
-
-
-
- Perform a full or partial save of the enabled processor states to memory at "mem_addr". State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr" must be aligned on a 64-byte boundary.
- mask[62:0] := save_mask[62:0] AND XCR0[62:0]
-FOR i := 0 to 62
- IF mask[i]
- CASE (i) OF
- 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
- 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
- DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
- ESAC
- mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
- XSAVE
- XSAVEOPT
- OS-Targeted
-
-
-
- Perform a full or partial save of the enabled processor states to memory at "mem_addr". State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr" must be aligned on a 64-byte boundary. The hardware may optimize the manner in which data is saved. The performance of this instruction will be equal to or better than using the XSAVE instruction.
- mask[62:0] := save_mask[62:0] AND XCR0[62:0]
-FOR i := 0 to 62
- IF mask[i]
- CASE (i) OF
- 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
- 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
- 2: mem_addr.EXT_SAVE_Area2[YMM] := ProcessorState[YMM]
- DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
- ESAC
- mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
- XSAVE
- XSAVEOPT
- OS-Targeted
-
-
-
- Perform a full or partial save of the enabled processor states to memory at "mem_addr". State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr" must be aligned on a 64-byte boundary. The hardware may optimize the manner in which data is saved. The performance of this instruction will be equal to or better than using the XSAVE64 instruction.
- mask[62:0] := save_mask[62:0] AND XCR0[62:0]
-FOR i := 0 to 62
- IF mask[i]
- CASE (i) OF
- 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
- 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
- 2: mem_addr.EXT_SAVE_Area2[YMM] := ProcessorState[YMM]
- DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
- ESAC
- mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
- XSAVE
- OS-Targeted
-
-
-
- Copy 64-bits from "val" to the extended control register (XCR) specified by "a". Currently only XFEATURE_ENABLED_MASK XCR is supported.
-
-XCR[a] := val[63:0]
-
-
-
-
-
- XSAVE
- XSAVEC
- OS-Targeted
-
-
-
- Perform a full or partial save of the enabled processor states to memory at "mem_addr"; xsavec differs from xsave in that it uses compaction and that it may use init optimization. State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr" must be aligned on a 64-byte boundary.
- mask[62:0] := save_mask[62:0] AND XCR0[62:0]
-FOR i := 0 to 62
- IF mask[i]
- CASE (i) OF
- 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
- 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
- DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
- ESAC
- mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
- XSAVE
- XSS
- OS-Targeted
-
-
-
- Perform a full or partial save of the enabled processor states to memory at "mem_addr"; xsaves differs from xsave in that it can save state components corresponding to bits set in IA32_XSS MSR and that it may use the modified optimization. State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr" must be aligned on a 64-byte boundary.
- mask[62:0] := save_mask[62:0] AND XCR0[62:0]
-FOR i := 0 to 62
- IF mask[i]
- CASE (i) OF
- 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
- 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
- DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
- ESAC
- mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
- XSAVE
- XSAVEC
- OS-Targeted
-
-
-
- Perform a full or partial save of the enabled processor states to memory at "mem_addr"; xsavec differs from xsave in that it uses compaction and that it may use init optimization. State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr" must be aligned on a 64-byte boundary.
- mask[62:0] := save_mask[62:0] AND XCR0[62:0]
-FOR i := 0 to 62
- IF mask[i]
- CASE (i) OF
- 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
- 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
- DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
- ESAC
- mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
- XSAVE
- XSS
- OS-Targeted
-
-
-
- Perform a full or partial save of the enabled processor states to memory at "mem_addr"; xsaves differs from xsave in that it can save state components corresponding to bits set in IA32_XSS MSR and that it may use the modified optimization. State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr" must be aligned on a 64-byte boundary.
- mask[62:0] := save_mask[62:0] AND XCR0[62:0]
-FOR i := 0 to 62
- IF mask[i]
- CASE (i) OF
- 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
- 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
- DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
- ESAC
- mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
- XSAVE
- XSS
- OS-Targeted
-
-
-
- Perform a full or partial restore of the enabled processor states using the state information stored in memory at "mem_addr". xrstors differs from xrstor in that it can restore state components corresponding to bits set in the IA32_XSS MSR; xrstors cannot restore from an xsave area in which the extended region is in the standard form. State is restored based on bits [62:0] in "rs_mask", "XCR0", and "mem_addr.HEADER.XSTATE_BV". "mem_addr" must be aligned on a 64-byte boundary.
- st_mask := mem_addr.HEADER.XSTATE_BV[62:0]
-FOR i := 0 to 62
- IF (rs_mask[i] AND XCR0[i])
- IF st_mask[i]
+ FI
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+ XSS
+
+ OS-Targeted
+
+
+
+
+
+
+ Copy up to 64-bits from the value of the extended control register (XCR)
+ specified by "a" into "dst". Currently only XFEATURE_ENABLED_MASK XCR is supported.
+ dst[63:0] := XCR[a]
+
+
+ XSAVE
+
+ OS-Targeted
+
+
+
+
+
+ Perform a full or partial restore of the enabled processor states using the
+ state information stored in memory at "mem_addr". State is restored based on bits [62:0]
+ in "rs_mask", "XCR0", and "mem_addr.HEADER.XSTATE_BV". "mem_addr" must be aligned on a
+ 64-byte boundary.
+ st_mask := mem_addr.HEADER.XSTATE_BV[62:0]
+ FOR i := 0 to 62
+ IF (rs_mask[i] AND XCR0[i])
+ IF st_mask[i]
CASE (i) OF
0: ProcessorState[x87_FPU] := mem_addr.FPUSSESave_Area[FPU]
1: ProcessorState[SSE] := mem_addr.FPUSSESaveArea[SSE]
DEFAULT: ProcessorState[i] := mem_addr.Ext_Save_Area[i]
ESAC
- ELSE
+ ELSE
// ProcessorExtendedState := Processor Supplied Values
CASE (i) OF
1: MXCSR := mem_addr.FPUSSESave_Area[SSE]
ESAC
- FI
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
- XSAVE
- XSS
- OS-Targeted
-
-
-
- Perform a full or partial restore of the enabled processor states using the state information stored in memory at "mem_addr". xrstors differs from xrstor in that it can restore state components corresponding to bits set in the IA32_XSS MSR; xrstors cannot restore from an xsave area in which the extended region is in the standard form. State is restored based on bits [62:0] in "rs_mask", "XCR0", and "mem_addr.HEADER.XSTATE_BV". "mem_addr" must be aligned on a 64-byte boundary.
- st_mask := mem_addr.HEADER.XSTATE_BV[62:0]
-FOR i := 0 to 62
- IF (rs_mask[i] AND XCR0[i])
- IF st_mask[i]
+ FI
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+
+ OS-Targeted
+
+
+
+
+
+ Perform a full or partial restore of the enabled processor states using the
+ state information stored in memory at "mem_addr". State is restored based on bits [62:0]
+ in "rs_mask", "XCR0", and "mem_addr.HEADER.XSTATE_BV". "mem_addr" must be aligned on a
+ 64-byte boundary.
+ st_mask := mem_addr.HEADER.XSTATE_BV[62:0]
+ FOR i := 0 to 62
+ IF (rs_mask[i] AND XCR0[i])
+ IF st_mask[i]
CASE (i) OF
0: ProcessorState[x87_FPU] := mem_addr.FPUSSESave_Area[FPU]
1: ProcessorState[SSE] := mem_addr.FPUSSESaveArea[SSE]
DEFAULT: ProcessorState[i] := mem_addr.Ext_Save_Area[i]
ESAC
- ELSE
+ ELSE
// ProcessorExtendedState := Processor Supplied Values
CASE (i) OF
1: MXCSR := mem_addr.FPUSSESave_Area[SSE]
ESAC
- FI
- FI
- i := i + 1
-ENDFOR
-
-
-
-
-
+ FI
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+
+ OS-Targeted
+
+
+
+
+
+ Perform a full or partial save of the enabled processor states to memory at
+ "mem_addr". State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr"
+ must be aligned on a 64-byte boundary.
+ mask[62:0] := save_mask[62:0] AND XCR0[62:0]
+ FOR i := 0 to 62
+ IF mask[i]
+ CASE (i) OF
+ 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
+ 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
+ DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
+ ESAC
+ mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+
+ OS-Targeted
+
+
+
+
+
+ Perform a full or partial save of the enabled processor states to memory at
+ "mem_addr". State is saved based on bits [62:0] in "save_mask" and "XCR0". "mem_addr"
+ must be aligned on a 64-byte boundary.
+ mask[62:0] := save_mask[62:0] AND XCR0[62:0]
+ FOR i := 0 to 62
+ IF mask[i]
+ CASE (i) OF
+ 0: mem_addr.FPUSSESave_Area[FPU] := ProcessorState[x87_FPU]
+ 1: mem_addr.FPUSSESaveArea[SSE] := ProcessorState[SSE]
+ DEFAULT: mem_addr.Ext_Save_Area[i] := ProcessorState[i]
+ ESAC
+ mem_addr.HEADER.XSTATE_BV[i] := INIT_FUNCTION[i]
+ FI
+ i := i + 1
+ ENDFOR
+
+
+ XSAVE
+
+ OS-Targeted
+
+
+
+
+
+ Copy 64-bits from "val" to the extended control register (XCR) specified by
+ "a". Currently only XFEATURE_ENABLED_MASK XCR is supported.
+
+ XCR[a] := val[63:0]
+
+
+ XSAVE
+
+ OS-Targeted
+
+
+
+
\ No newline at end of file