Add tools
This commit is contained in:
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Exit if anything fails
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Prefer rustc in the same directory as this script
|
||||||
|
DIR="$(dirname "$0")"
|
||||||
|
if [ -x "$DIR/rustc" ]; then
|
||||||
|
RUSTC="$DIR/rustc"
|
||||||
|
else
|
||||||
|
RUSTC="rustc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find out where the pretty printer Python module is
|
||||||
|
RUSTC_SYSROOT="$("$RUSTC" --print=sysroot)"
|
||||||
|
GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc"
|
||||||
|
# Get the commit hash for path remapping
|
||||||
|
RUSTC_COMMIT_HASH="$("$RUSTC" -vV | sed -n 's/commit-hash: \([a-zA-Z0-9_]*\)/\1/p')"
|
||||||
|
|
||||||
|
# Run GDB with the additional arguments that load the pretty printers
|
||||||
|
# Set the environment variable `RUST_GDB` to overwrite the call to a
|
||||||
|
# different/specific command (defaults to `gdb`).
|
||||||
|
RUST_GDB="${RUST_GDB:-gdb}"
|
||||||
|
PYTHONPATH="$PYTHONPATH:$GDB_PYTHON_MODULE_DIRECTORY" exec ${RUST_GDB} \
|
||||||
|
--directory="$GDB_PYTHON_MODULE_DIRECTORY" \
|
||||||
|
-iex "add-auto-load-safe-path $GDB_PYTHON_MODULE_DIRECTORY" \
|
||||||
|
-iex "set substitute-path /rustc/$RUSTC_COMMIT_HASH $RUSTC_SYSROOT/lib/rustlib/src/rust" \
|
||||||
|
"$@"
|
||||||
|
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Exit if anything fails
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ]; then
|
||||||
|
echo "
|
||||||
|
rust-gdbgui
|
||||||
|
===========
|
||||||
|
gdbgui - https://gdbgui.com - is a graphical front-end to GDB
|
||||||
|
that runs in a browser. This script invokes gdbgui with the Rust
|
||||||
|
pretty printers loaded.
|
||||||
|
|
||||||
|
Simple usage : rust-gdbgui target/debug/myprog
|
||||||
|
With arguments: rust-gdbgui 'target/debug/myprog arg1 arg2...'
|
||||||
|
(note the quotes)
|
||||||
|
|
||||||
|
|
||||||
|
Hints
|
||||||
|
=====
|
||||||
|
gdbgui won't be able to find the rust 'main' method automatically, so
|
||||||
|
in its options make sure to disable the 'Add breakpoint to main after
|
||||||
|
loading executable' setting to avoid a 'File not found: main' warning
|
||||||
|
on startup.
|
||||||
|
|
||||||
|
Instead, type 'main' into gdbgui's file browser and you should get
|
||||||
|
auto-completion on the filename. Just pick 'main.rs', add a breakpoint
|
||||||
|
by clicking in the line number gutter, and type 'r' or hit the Restart
|
||||||
|
icon to start your program running.
|
||||||
|
"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prefer rustc in the same directory as this script
|
||||||
|
DIR="$(dirname "$0")"
|
||||||
|
if [ -x "$DIR/rustc" ]; then
|
||||||
|
RUSTC="$DIR/rustc"
|
||||||
|
else
|
||||||
|
RUSTC="rustc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Find out where the pretty printer Python module is
|
||||||
|
RUSTC_SYSROOT="$("$RUSTC" --print=sysroot)"
|
||||||
|
GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc"
|
||||||
|
# Get the commit hash for path remapping
|
||||||
|
RUSTC_COMMIT_HASH="$("$RUSTC" -vV | sed -n 's/commit-hash: \([a-zA-Z0-9_]*\)/\1/p')"
|
||||||
|
|
||||||
|
# Set the environment variable `RUST_GDB` to overwrite the call to a
|
||||||
|
# different/specific command (defaults to `gdb`).
|
||||||
|
RUST_GDB="${RUST_GDB:-gdb}"
|
||||||
|
|
||||||
|
# Set the environment variable `RUST_GDBGUI` to overwrite the call to a
|
||||||
|
# different/specific command (defaults to `gdbgui`).
|
||||||
|
RUST_GDBGUI="${RUST_GDBGUI:-gdbgui}"
|
||||||
|
|
||||||
|
# These arguments get passed through to GDB and make it load the
|
||||||
|
# Rust pretty printers.
|
||||||
|
GDB_ARGS="--directory=\"$GDB_PYTHON_MODULE_DIRECTORY\" \
|
||||||
|
-iex \"add-auto-load-safe-path $GDB_PYTHON_MODULE_DIRECTORY\" \
|
||||||
|
-iex \"set substitute-path /rustc/$RUSTC_COMMIT_HASH $RUSTC_SYSROOT/lib/rustlib/src/rust\""
|
||||||
|
|
||||||
|
# Finally we execute gdbgui.
|
||||||
|
PYTHONPATH="$PYTHONPATH:$GDB_PYTHON_MODULE_DIRECTORY" \
|
||||||
|
exec ${RUST_GDBGUI} \
|
||||||
|
--gdb-cmd "${RUST_GDB} ${GDB_ARGS}" \
|
||||||
|
"${@}"
|
||||||
|
|
||||||
+37
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Exit if anything fails
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Find the host triple so we can find lldb in rustlib.
|
||||||
|
host=$(rustc -vV | sed -n -e 's/^host: //p')
|
||||||
|
|
||||||
|
# Find out where to look for the pretty printer Python module
|
||||||
|
RUSTC_SYSROOT=$(rustc --print sysroot)
|
||||||
|
RUST_LLDB="$RUSTC_SYSROOT/lib/rustlib/$host/bin/lldb"
|
||||||
|
|
||||||
|
lldb=lldb
|
||||||
|
if [ -f "$RUST_LLDB" ]; then
|
||||||
|
lldb="$RUST_LLDB"
|
||||||
|
else
|
||||||
|
if ! command -v "$lldb" > /dev/null; then
|
||||||
|
echo "$lldb not found! Please install it." >&2
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
LLDB_VERSION=$("$lldb" --version | cut -d ' ' -f3)
|
||||||
|
|
||||||
|
if [ "$LLDB_VERSION" = "3.5.0" ]; then
|
||||||
|
cat << EOF >&2
|
||||||
|
***
|
||||||
|
WARNING: This version of LLDB has known issues with Rust and cannot display the contents of local variables!
|
||||||
|
***
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
script_import="command script import \"$RUSTC_SYSROOT/lib/rustlib/etc/lldb_lookup.py\""
|
||||||
|
commands_file="$RUSTC_SYSROOT/lib/rustlib/etc/lldb_commands"
|
||||||
|
|
||||||
|
# Call LLDB with the commands added to the argument list
|
||||||
|
exec "$lldb" --one-line-before-file "$script_import" --source-before-file "$commands_file" "$@"
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
+188
@@ -0,0 +1,188 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# Add a .gdb_index section to a file.
|
||||||
|
|
||||||
|
# Copyright (C) 2010-2024 Free Software Foundation, Inc.
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# This program assumes gdb and objcopy are in $PATH.
|
||||||
|
# If not, or you want others, pass the following in the environment
|
||||||
|
GDB=${GDB:=gdb}
|
||||||
|
OBJCOPY=${OBJCOPY:=objcopy}
|
||||||
|
READELF=${READELF:=readelf}
|
||||||
|
|
||||||
|
myname="${0##*/}"
|
||||||
|
|
||||||
|
dwarf5=""
|
||||||
|
if [ "$1" = "-dwarf-5" ]; then
|
||||||
|
dwarf5="$1"
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $# != 1; then
|
||||||
|
echo "usage: $myname [-dwarf-5] FILE" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
file="$1"
|
||||||
|
|
||||||
|
if test -L "$file"; then
|
||||||
|
if ! command -v readlink >/dev/null 2>&1; then
|
||||||
|
echo "$myname: 'readlink' missing. Failed to follow symlink $1." 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Count number of links followed in order to detect loops.
|
||||||
|
count=0
|
||||||
|
while test -L "$file"; do
|
||||||
|
target=$(readlink "$file")
|
||||||
|
|
||||||
|
case "$target" in
|
||||||
|
/*)
|
||||||
|
file="$target"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
file="$(dirname "$file")/$target"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
count="$((count + 1))"
|
||||||
|
if test "$count" -gt 10; then
|
||||||
|
echo "$myname: Detected loop while following link $file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test ! -r "$file"; then
|
||||||
|
echo "$myname: unable to access: $file" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
dir="${file%/*}"
|
||||||
|
test "$dir" = "$file" && dir="."
|
||||||
|
|
||||||
|
dwz_file=""
|
||||||
|
if $READELF -S "$file" | grep -q " \.gnu_debugaltlink "; then
|
||||||
|
dwz_file=$($READELF --string-dump=.gnu_debugaltlink "$file" \
|
||||||
|
| grep -A1 "'\.gnu_debugaltlink':" \
|
||||||
|
| tail -n +2 \
|
||||||
|
| sed 's/.*]//')
|
||||||
|
dwz_file=$(echo $dwz_file)
|
||||||
|
if $READELF -S "$dwz_file" | grep -E -q " \.(gdb_index|debug_names) "; then
|
||||||
|
# Already has an index, skip it.
|
||||||
|
dwz_file=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
set_files ()
|
||||||
|
{
|
||||||
|
fpath="$1"
|
||||||
|
|
||||||
|
index4="${fpath}.gdb-index"
|
||||||
|
index5="${fpath}.debug_names"
|
||||||
|
debugstr="${fpath}.debug_str"
|
||||||
|
debugstrmerge="${fpath}.debug_str.merge"
|
||||||
|
debugstrerr="${fpath}.debug_str.err"
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp_files=
|
||||||
|
for f in "$file" "$dwz_file"; do
|
||||||
|
if [ "$f" = "" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
set_files "$f"
|
||||||
|
tmp_files="$tmp_files $index4 $index5 $debugstr $debugstrmerge $debugstrerr"
|
||||||
|
done
|
||||||
|
|
||||||
|
rm -f $tmp_files
|
||||||
|
|
||||||
|
# Ensure intermediate index file is removed when we exit.
|
||||||
|
trap "rm -f $tmp_files" 0
|
||||||
|
|
||||||
|
$GDB --batch -nx -iex 'set auto-load no' \
|
||||||
|
-iex 'set debuginfod enabled off' \
|
||||||
|
-ex "file $file" -ex "save gdb-index $dwarf5 $dir" || {
|
||||||
|
# Just in case.
|
||||||
|
status=$?
|
||||||
|
echo "$myname: gdb error generating index for $file" 1>&2
|
||||||
|
exit $status
|
||||||
|
}
|
||||||
|
|
||||||
|
# In some situations gdb can exit without creating an index. This is
|
||||||
|
# not an error.
|
||||||
|
# E.g., if $file is stripped. This behaviour is akin to stripping an
|
||||||
|
# already stripped binary, it's a no-op.
|
||||||
|
status=0
|
||||||
|
|
||||||
|
handle_file ()
|
||||||
|
{
|
||||||
|
fpath="$1"
|
||||||
|
|
||||||
|
set_files "$fpath"
|
||||||
|
|
||||||
|
if test -f "$index4" -a -f "$index5"; then
|
||||||
|
echo "$myname: Both index types were created for $fpath" 1>&2
|
||||||
|
status=1
|
||||||
|
elif test -f "$index4" -o -f "$index5"; then
|
||||||
|
if test -f "$index4"; then
|
||||||
|
index="$index4"
|
||||||
|
section=".gdb_index"
|
||||||
|
else
|
||||||
|
index="$index5"
|
||||||
|
section=".debug_names"
|
||||||
|
fi
|
||||||
|
debugstradd=false
|
||||||
|
debugstrupdate=false
|
||||||
|
if test -s "$debugstr"; then
|
||||||
|
if ! $OBJCOPY --dump-section .debug_str="$debugstrmerge" "$fpath" \
|
||||||
|
/dev/null 2>$debugstrerr; then
|
||||||
|
cat >&2 $debugstrerr
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if grep -q "can't dump section '.debug_str' - it does not exist" \
|
||||||
|
$debugstrerr; then
|
||||||
|
debugstradd=true
|
||||||
|
else
|
||||||
|
debugstrupdate=true
|
||||||
|
cat >&2 $debugstrerr
|
||||||
|
fi
|
||||||
|
cat "$debugstr" >>"$debugstrmerge"
|
||||||
|
fi
|
||||||
|
|
||||||
|
$OBJCOPY --add-section $section="$index" \
|
||||||
|
--set-section-flags $section=readonly \
|
||||||
|
$(if $debugstradd; then \
|
||||||
|
echo --add-section .debug_str="$debugstrmerge"; \
|
||||||
|
echo --set-section-flags .debug_str=readonly; \
|
||||||
|
fi; \
|
||||||
|
if $debugstrupdate; then \
|
||||||
|
echo --update-section .debug_str="$debugstrmerge"; \
|
||||||
|
fi) \
|
||||||
|
"$fpath" "$fpath"
|
||||||
|
|
||||||
|
status=$?
|
||||||
|
else
|
||||||
|
echo "$myname: No index was created for $fpath" 1>&2
|
||||||
|
echo "$myname: [Was there no debuginfo? Was there already an index?]" \
|
||||||
|
1>&2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
handle_file "$file"
|
||||||
|
if [ "$dwz_file" != "" ]; then
|
||||||
|
handle_file "$dwz_file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit $status
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,284 @@
|
|||||||
|
# Required for bash versions < 4.1
|
||||||
|
# Default bash version is 3.2 on latest macOS. See #6874
|
||||||
|
shopt -s extglob
|
||||||
|
|
||||||
|
command -v cargo >/dev/null 2>&1 &&
|
||||||
|
_cargo()
|
||||||
|
{
|
||||||
|
local cur prev words cword
|
||||||
|
_get_comp_words_by_ref cur prev words cword
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
|
||||||
|
# Skip past - and + options to find the command.
|
||||||
|
local nwords=${#words[@]}
|
||||||
|
local cmd_i cmd dd_i
|
||||||
|
for (( cmd_i=1; cmd_i<$nwords; cmd_i++ ));
|
||||||
|
do
|
||||||
|
if [[ ! "${words[$cmd_i]}" =~ ^[+-] ]]; then
|
||||||
|
cmd="${words[$cmd_i]}"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
# Find the location of the -- separator.
|
||||||
|
for (( dd_i=1; dd_i<$nwords-1; dd_i++ ));
|
||||||
|
do
|
||||||
|
if [[ "${words[$dd_i]}" = "--" ]]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
local vcs='git hg none pijul fossil'
|
||||||
|
local color='auto always never'
|
||||||
|
local msg_format='human json short'
|
||||||
|
|
||||||
|
local opt_help='-h --help'
|
||||||
|
local opt_verbose='-v --verbose'
|
||||||
|
local opt_quiet='-q --quiet'
|
||||||
|
local opt_color='--color'
|
||||||
|
local opt_common="$opt_help $opt_verbose $opt_quiet $opt_color"
|
||||||
|
local opt_pkg_spec='-p --package --all --exclude --workspace'
|
||||||
|
local opt_pkg='-p --package'
|
||||||
|
local opt_feat='-F --features --all-features --no-default-features'
|
||||||
|
local opt_mani='--manifest-path'
|
||||||
|
local opt_jobs='-j --jobs'
|
||||||
|
local opt_parallel="$opt_jobs --keep-going"
|
||||||
|
local opt_force='-f --force'
|
||||||
|
local opt_sync='-s --sync'
|
||||||
|
local opt_lock='--frozen --locked --offline'
|
||||||
|
local opt_targets="--lib --bin --bins --example --examples --test --tests --bench --benches --all-targets"
|
||||||
|
|
||||||
|
local opt___nocmd="$opt_common -V --version --list --explain"
|
||||||
|
local opt__add="$opt_common -p --package --features --default-features --no-default-features $opt_mani --optional --no-optional --rename --dry-run --path --git --branch --tag --rev --registry --dev --build --target --ignore-rust-version"
|
||||||
|
local opt__bench="$opt_common $opt_pkg_spec $opt_feat $opt_mani $opt_lock $opt_jobs $opt_targets --message-format --target --no-run --no-fail-fast --target-dir --ignore-rust-version"
|
||||||
|
local opt__build="$opt_common $opt_pkg_spec $opt_feat $opt_mani $opt_lock $opt_parallel $opt_targets --message-format --target --release --profile --target-dir --ignore-rust-version"
|
||||||
|
local opt__b="$opt__build"
|
||||||
|
local opt__check="$opt_common $opt_pkg_spec $opt_feat $opt_mani $opt_lock $opt_parallel $opt_targets --message-format --target --release --profile --target-dir --ignore-rust-version"
|
||||||
|
local opt__c="$opt__check"
|
||||||
|
local opt__clean="$opt_common $opt_pkg $opt_mani $opt_lock --target --release --doc --target-dir --profile"
|
||||||
|
local opt__clippy="$opt_common $opt_pkg_spec $opt_feat $opt_mani $opt_lock $opt_parallel $opt_targets --message-format --target --release --profile --target-dir --no-deps --fix"
|
||||||
|
local opt__doc="$opt_common $opt_pkg_spec $opt_feat $opt_mani $opt_lock $opt_parallel --message-format --bin --bins --lib --target --open --no-deps --release --document-private-items --target-dir --profile --ignore-rust-version"
|
||||||
|
local opt__d="$opt__doc"
|
||||||
|
local opt__fetch="$opt_common $opt_mani $opt_lock --target"
|
||||||
|
local opt__fix="$opt_common $opt_pkg_spec $opt_feat $opt_mani $opt_parallel $opt_targets $opt_lock --release --target --message-format --broken-code --edition --edition-idioms --allow-no-vcs --allow-dirty --allow-staged --profile --target-dir --ignore-rust-version"
|
||||||
|
local opt__generate_lockfile="$opt_common $opt_mani $opt_lock"
|
||||||
|
local opt__help="$opt_help"
|
||||||
|
local opt__init="$opt_common $opt_lock --bin --lib --name --vcs --edition --registry"
|
||||||
|
local opt__install="$opt_common $opt_feat $opt_parallel $opt_lock $opt_force --bin --bins --branch --debug --example --examples --git --list --path --rev --root --tag --version --registry --target --profile --no-track --ignore-rust-version"
|
||||||
|
local opt__locate_project="$opt_common $opt_mani $opt_lock --message-format --workspace"
|
||||||
|
local opt__login="$opt_common $opt_lock --registry"
|
||||||
|
local opt__metadata="$opt_common $opt_feat $opt_mani $opt_lock --format-version=1 --no-deps --filter-platform"
|
||||||
|
local opt__new="$opt_common $opt_lock --vcs --bin --lib --name --edition --registry"
|
||||||
|
local opt__owner="$opt_common $opt_lock -a --add -r --remove -l --list --index --token --registry"
|
||||||
|
local opt__package="$opt_common $opt_mani $opt_feat $opt_lock $opt_parallel --allow-dirty -l --list --no-verify --no-metadata --target --target-dir"
|
||||||
|
local opt__pkgid="$opt_common $opt_mani $opt_lock $opt_pkg"
|
||||||
|
local opt__publish="$opt_common $opt_mani $opt_feat $opt_lock $opt_parallel --allow-dirty --dry-run --token --no-verify --index --registry --target --target-dir"
|
||||||
|
local opt__read_manifest="$opt_help $opt_quiet $opt_verbose $opt_mani $opt_color $opt_lock --no-deps"
|
||||||
|
local opt__remove="$opt_common $opt_pkg $opt_lock $opt_mani --dry-run --dev --build --target"
|
||||||
|
local opt__rm="$opt__remove"
|
||||||
|
local opt__report="$opt_help $opt_verbose $opt_color future-incompat future-incompatibilities"
|
||||||
|
local opt__report__future_incompat="$opt_help $opt_verbose $opt_color $opt_pkg --id"
|
||||||
|
local opt__run="$opt_common $opt_pkg $opt_feat $opt_mani $opt_lock $opt_parallel --message-format --target --bin --example --release --target-dir --profile --ignore-rust-version"
|
||||||
|
local opt__r="$opt__run"
|
||||||
|
local opt__rustc="$opt_common $opt_pkg $opt_feat $opt_mani $opt_lock $opt_parallel $opt_targets -L --crate-type --extern --message-format --profile --target --release --target-dir --ignore-rust-version"
|
||||||
|
local opt__rustdoc="$opt_common $opt_pkg $opt_feat $opt_mani $opt_lock $opt_parallel $opt_targets --message-format --target --release --open --target-dir --profile --ignore-rust-version"
|
||||||
|
local opt__search="$opt_common $opt_lock --limit --index --registry"
|
||||||
|
local opt__test="$opt_common $opt_pkg_spec $opt_feat $opt_mani $opt_lock $opt_jobs $opt_targets --message-format --doc --target --no-run --release --no-fail-fast --target-dir --profile --ignore-rust-version"
|
||||||
|
local opt__t="$opt__test"
|
||||||
|
local opt__tree="$opt_common $opt_pkg_spec $opt_feat $opt_mani $opt_lock --target -i --invert --prefix --no-dedupe --duplicates -d --charset -f --format -e --edges"
|
||||||
|
local opt__uninstall="$opt_common $opt_lock $opt_pkg --bin --root"
|
||||||
|
local opt__update="$opt_common $opt_mani $opt_lock $opt_pkg --aggressive --recursive --precise --dry-run"
|
||||||
|
local opt__vendor="$opt_common $opt_mani $opt_lock $opt_sync --no-delete --respect-source-config --versioned-dirs"
|
||||||
|
local opt__verify_project="$opt_common $opt_mani $opt_lock"
|
||||||
|
local opt__version="$opt_common $opt_lock"
|
||||||
|
local opt__yank="$opt_common $opt_lock --version --undo --index --token --registry"
|
||||||
|
local opt__libtest="--help --include-ignored --ignored --test --bench --list --logfile --nocapture --test-threads --skip -q --quiet --exact --color --format"
|
||||||
|
|
||||||
|
if [[ $cword -gt $dd_i ]]; then
|
||||||
|
# Completion after -- separator.
|
||||||
|
if [[ "${cmd}" = @(test|bench) ]]; then
|
||||||
|
COMPREPLY=( $( compgen -W "${opt__libtest}" -- "$cur" ) )
|
||||||
|
else
|
||||||
|
# Fallback to filename completion, useful with `cargo run`.
|
||||||
|
_filedir
|
||||||
|
fi
|
||||||
|
elif [[ $cword -le $cmd_i ]]; then
|
||||||
|
# Completion before or at the command.
|
||||||
|
if [[ "$cur" == -* ]]; then
|
||||||
|
COMPREPLY=( $( compgen -W "${opt___nocmd}" -- "$cur" ) )
|
||||||
|
elif [[ "$cur" == +* ]]; then
|
||||||
|
COMPREPLY=( $( compgen -W "$(_toolchains)" -- "$cur" ) )
|
||||||
|
else
|
||||||
|
_ensure_cargo_commands_cache_filled
|
||||||
|
COMPREPLY=( $( compgen -W "$__cargo_commands_cache" -- "$cur" ) )
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
case "${prev}" in
|
||||||
|
--vcs)
|
||||||
|
COMPREPLY=( $( compgen -W "$vcs" -- "$cur" ) )
|
||||||
|
;;
|
||||||
|
--color)
|
||||||
|
COMPREPLY=( $( compgen -W "$color" -- "$cur" ) )
|
||||||
|
;;
|
||||||
|
--message-format)
|
||||||
|
COMPREPLY=( $( compgen -W "$msg_format" -- "$cur" ) )
|
||||||
|
;;
|
||||||
|
--manifest-path)
|
||||||
|
_filedir toml
|
||||||
|
;;
|
||||||
|
--bin)
|
||||||
|
COMPREPLY=( $( compgen -W "$(_bin_names)" -- "$cur" ) )
|
||||||
|
;;
|
||||||
|
--test)
|
||||||
|
COMPREPLY=( $( compgen -W "$(_test_names)" -- "$cur" ) )
|
||||||
|
;;
|
||||||
|
--bench)
|
||||||
|
COMPREPLY=( $( compgen -W "$(_benchmark_names)" -- "$cur" ) )
|
||||||
|
;;
|
||||||
|
--example)
|
||||||
|
COMPREPLY=( $( compgen -W "$(_get_examples)" -- "$cur" ) )
|
||||||
|
;;
|
||||||
|
--target)
|
||||||
|
COMPREPLY=( $( compgen -W "$(_get_targets)" -- "$cur" ) )
|
||||||
|
;;
|
||||||
|
--target-dir|--path)
|
||||||
|
_filedir -d
|
||||||
|
;;
|
||||||
|
help)
|
||||||
|
_ensure_cargo_commands_cache_filled
|
||||||
|
COMPREPLY=( $( compgen -W "$__cargo_commands_cache" -- "$cur" ) )
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [[ "$cmd" == "report" && "$prev" == future-incompat* ]]; then
|
||||||
|
local opt_var=opt__${cmd//-/_}__${prev//-/_}
|
||||||
|
else
|
||||||
|
local opt_var=opt__${cmd//-/_}
|
||||||
|
fi
|
||||||
|
if [[ -z "${!opt_var-}" ]]; then
|
||||||
|
# Fallback to filename completion.
|
||||||
|
_filedir
|
||||||
|
else
|
||||||
|
COMPREPLY=( $( compgen -W "${!opt_var}" -- "$cur" ) )
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# compopt does not work in bash version 3
|
||||||
|
|
||||||
|
return 0
|
||||||
|
} &&
|
||||||
|
complete -F _cargo cargo
|
||||||
|
|
||||||
|
__cargo_commands_cache=
|
||||||
|
_ensure_cargo_commands_cache_filled(){
|
||||||
|
if [[ -z $__cargo_commands_cache ]]; then
|
||||||
|
__cargo_commands_cache="$(cargo --list 2>/dev/null | awk 'NR>1 {print $1}')"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_locate_manifest(){
|
||||||
|
cargo locate-project --message-format plain 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Extracts the values of "name" from the array given in $1 and shows them as
|
||||||
|
# command line options for completion
|
||||||
|
_get_names_from_array()
|
||||||
|
{
|
||||||
|
local manifest=$(_locate_manifest)
|
||||||
|
if [[ -z $manifest ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local last_line
|
||||||
|
local -a names
|
||||||
|
local in_block=false
|
||||||
|
local block_name=$1
|
||||||
|
while read line
|
||||||
|
do
|
||||||
|
if [[ $last_line == "[[$block_name]]" ]]; then
|
||||||
|
in_block=true
|
||||||
|
else
|
||||||
|
if [[ $last_line =~ .*\[\[.* ]]; then
|
||||||
|
in_block=false
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $in_block == true ]]; then
|
||||||
|
if [[ $line =~ .*name.*\= ]]; then
|
||||||
|
line=${line##*=}
|
||||||
|
line=${line%%\"}
|
||||||
|
line=${line##*\"}
|
||||||
|
names+=("$line")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
last_line=$line
|
||||||
|
done < "$manifest"
|
||||||
|
echo "${names[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Gets the bin names from the manifest file
|
||||||
|
_bin_names()
|
||||||
|
{
|
||||||
|
_get_names_from_array "bin"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Gets the test names from the manifest file
|
||||||
|
_test_names()
|
||||||
|
{
|
||||||
|
_get_names_from_array "test"
|
||||||
|
}
|
||||||
|
|
||||||
|
#Gets the bench names from the manifest file
|
||||||
|
_benchmark_names()
|
||||||
|
{
|
||||||
|
_get_names_from_array "bench"
|
||||||
|
}
|
||||||
|
|
||||||
|
_get_examples(){
|
||||||
|
local manifest=$(_locate_manifest)
|
||||||
|
[ -z "$manifest" ] && return 0
|
||||||
|
|
||||||
|
local files=("${manifest%/*}"/examples/*.rs)
|
||||||
|
local names=("${files[@]##*/}")
|
||||||
|
local names=("${names[@]%.*}")
|
||||||
|
# "*" means no examples found
|
||||||
|
if [[ "${names[@]}" != "*" ]]; then
|
||||||
|
echo "${names[@]}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_get_targets(){
|
||||||
|
if command -v rustup >/dev/null 2>/dev/null; then
|
||||||
|
rustup target list --installed
|
||||||
|
else
|
||||||
|
rustc --print target-list
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_toolchains(){
|
||||||
|
local result=()
|
||||||
|
local toolchains=$(rustup toolchain list)
|
||||||
|
local channels="nightly|beta|stable|[0-9]\.[0-9]{1,2}\.[0-9]"
|
||||||
|
local date="[0-9]{4}-[0-9]{2}-[0-9]{2}"
|
||||||
|
while read line
|
||||||
|
do
|
||||||
|
# Strip " (default)"
|
||||||
|
line=${line%% *}
|
||||||
|
if [[ "$line" =~ ^($channels)(-($date))?(-.*) ]]; then
|
||||||
|
if [[ -z ${BASH_REMATCH[3]} ]]; then
|
||||||
|
result+=("+${BASH_REMATCH[1]}")
|
||||||
|
else
|
||||||
|
# channel-date
|
||||||
|
result+=("+${BASH_REMATCH[1]}-${BASH_REMATCH[3]}")
|
||||||
|
fi
|
||||||
|
result+=("+$line")
|
||||||
|
else
|
||||||
|
result+=("+$line")
|
||||||
|
fi
|
||||||
|
done <<< "$toolchains"
|
||||||
|
echo "${result[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# vim:ft=sh
|
||||||
@@ -0,0 +1,346 @@
|
|||||||
|
/* JIT declarations for GDB, the GNU Debugger.
|
||||||
|
|
||||||
|
Copyright (C) 2011-2024 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GDB.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef GDB_JIT_READER_H
|
||||||
|
#define GDB_JIT_READER_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Versioning information. See gdb_reader_funcs. */
|
||||||
|
|
||||||
|
#define GDB_READER_INTERFACE_VERSION 1
|
||||||
|
|
||||||
|
/* Readers must be released under a GPL compatible license. To
|
||||||
|
declare that the reader is indeed released under a GPL compatible
|
||||||
|
license, invoke the macro GDB_DECLARE_GPL_COMPATIBLE in a source
|
||||||
|
file. */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#define GDB_DECLARE_GPL_COMPATIBLE_READER \
|
||||||
|
extern "C" { \
|
||||||
|
extern int plugin_is_GPL_compatible (void); \
|
||||||
|
extern int plugin_is_GPL_compatible (void) \
|
||||||
|
{ \
|
||||||
|
return 0; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define GDB_DECLARE_GPL_COMPATIBLE_READER \
|
||||||
|
extern int plugin_is_GPL_compatible (void); \
|
||||||
|
extern int plugin_is_GPL_compatible (void) \
|
||||||
|
{ \
|
||||||
|
return 0; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Represents an address on the target system. */
|
||||||
|
|
||||||
|
typedef unsigned long GDB_CORE_ADDR;
|
||||||
|
|
||||||
|
/* Return status codes. */
|
||||||
|
|
||||||
|
enum gdb_status {
|
||||||
|
GDB_FAIL = 0,
|
||||||
|
GDB_SUCCESS = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
struct gdb_object;
|
||||||
|
struct gdb_symtab;
|
||||||
|
struct gdb_block;
|
||||||
|
struct gdb_symbol_callbacks;
|
||||||
|
|
||||||
|
/* An array of these are used to represent a map from code addresses to line
|
||||||
|
numbers in the source file. */
|
||||||
|
|
||||||
|
struct gdb_line_mapping
|
||||||
|
{
|
||||||
|
int line;
|
||||||
|
GDB_CORE_ADDR pc;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Create a new GDB code object. Each code object can have one or
|
||||||
|
more symbol tables, each representing a compiled source file. */
|
||||||
|
|
||||||
|
typedef struct gdb_object *(gdb_object_open) (struct gdb_symbol_callbacks *cb);
|
||||||
|
|
||||||
|
/* The callback used to create new symbol table. CB is the
|
||||||
|
gdb_symbol_callbacks which the structure is part of. FILE_NAME is
|
||||||
|
an (optionally NULL) file name to associate with this new symbol
|
||||||
|
table.
|
||||||
|
|
||||||
|
Returns a new instance to gdb_symtab that can later be passed to
|
||||||
|
gdb_block_new, gdb_symtab_add_line_mapping and gdb_symtab_close. */
|
||||||
|
|
||||||
|
typedef struct gdb_symtab *(gdb_symtab_open) (struct gdb_symbol_callbacks *cb,
|
||||||
|
struct gdb_object *obj,
|
||||||
|
const char *file_name);
|
||||||
|
|
||||||
|
/* Creates a new block in a given symbol table. A symbol table is a
|
||||||
|
forest of blocks, each block representing an code address range and
|
||||||
|
a corresponding (optionally NULL) NAME. In case the block
|
||||||
|
corresponds to a function, the NAME passed should be the name of
|
||||||
|
the function.
|
||||||
|
|
||||||
|
If the new block to be created is a child of (i.e. is nested in)
|
||||||
|
another block, the parent block can be passed in PARENT. SYMTAB is
|
||||||
|
the symbol table the new block is to belong in. BEGIN, END is the
|
||||||
|
code address range the block corresponds to.
|
||||||
|
|
||||||
|
Returns a new instance of gdb_block, which, as of now, has no use.
|
||||||
|
Note that the gdb_block returned must not be freed by the
|
||||||
|
caller. */
|
||||||
|
|
||||||
|
typedef struct gdb_block *(gdb_block_open) (struct gdb_symbol_callbacks *cb,
|
||||||
|
struct gdb_symtab *symtab,
|
||||||
|
struct gdb_block *parent,
|
||||||
|
GDB_CORE_ADDR begin,
|
||||||
|
GDB_CORE_ADDR end,
|
||||||
|
const char *name);
|
||||||
|
|
||||||
|
/* Adds a PC to line number mapping for the symbol table SYMTAB.
|
||||||
|
NLINES is the number of elements in LINES, each element
|
||||||
|
corresponding to one (PC, line) pair. */
|
||||||
|
|
||||||
|
typedef void (gdb_symtab_add_line_mapping) (struct gdb_symbol_callbacks *cb,
|
||||||
|
struct gdb_symtab *symtab,
|
||||||
|
int nlines,
|
||||||
|
struct gdb_line_mapping *lines);
|
||||||
|
|
||||||
|
/* Close the symtab SYMTAB. This signals to GDB that no more blocks
|
||||||
|
will be opened on this symtab. */
|
||||||
|
|
||||||
|
typedef void (gdb_symtab_close) (struct gdb_symbol_callbacks *cb,
|
||||||
|
struct gdb_symtab *symtab);
|
||||||
|
|
||||||
|
|
||||||
|
/* Closes the gdb_object OBJ and adds the emitted information into
|
||||||
|
GDB's internal structures. Once this is done, the debug
|
||||||
|
information will be picked up and used; this will usually be the
|
||||||
|
last operation in gdb_read_debug_info. */
|
||||||
|
|
||||||
|
typedef void (gdb_object_close) (struct gdb_symbol_callbacks *cb,
|
||||||
|
struct gdb_object *obj);
|
||||||
|
|
||||||
|
/* Reads LEN bytes from TARGET_MEM in the target's virtual address
|
||||||
|
space into GDB_BUF.
|
||||||
|
|
||||||
|
Returns GDB_FAIL on failure, and GDB_SUCCESS on success. */
|
||||||
|
|
||||||
|
typedef enum gdb_status (gdb_target_read) (GDB_CORE_ADDR target_mem,
|
||||||
|
void *gdb_buf, int len);
|
||||||
|
|
||||||
|
/* The list of callbacks that are passed to read. These callbacks are
|
||||||
|
to be used to construct the symbol table. The functions have been
|
||||||
|
described above. */
|
||||||
|
|
||||||
|
struct gdb_symbol_callbacks
|
||||||
|
{
|
||||||
|
gdb_object_open *object_open;
|
||||||
|
gdb_symtab_open *symtab_open;
|
||||||
|
gdb_block_open *block_open;
|
||||||
|
gdb_symtab_close *symtab_close;
|
||||||
|
gdb_object_close *object_close;
|
||||||
|
|
||||||
|
gdb_symtab_add_line_mapping *line_mapping_add;
|
||||||
|
gdb_target_read *target_read;
|
||||||
|
|
||||||
|
/* For internal use by GDB. */
|
||||||
|
void *priv_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Forward declaration. */
|
||||||
|
|
||||||
|
struct gdb_reg_value;
|
||||||
|
|
||||||
|
/* A function of this type is used to free a gdb_reg_value. See the
|
||||||
|
comment on `free' in struct gdb_reg_value. */
|
||||||
|
|
||||||
|
typedef void (gdb_reg_value_free) (struct gdb_reg_value *);
|
||||||
|
|
||||||
|
/* Denotes the value of a register. */
|
||||||
|
|
||||||
|
struct gdb_reg_value
|
||||||
|
{
|
||||||
|
/* The size of the register in bytes. The reader need not set this
|
||||||
|
field. This will be set for (defined) register values being read
|
||||||
|
from GDB using reg_get. */
|
||||||
|
int size;
|
||||||
|
|
||||||
|
/* Set to non-zero if the value for the register is known. The
|
||||||
|
registers for which the reader does not call reg_set are also
|
||||||
|
assumed to be undefined */
|
||||||
|
int defined;
|
||||||
|
|
||||||
|
/* Since gdb_reg_value is a variable sized structure, it will
|
||||||
|
usually be allocated on the heap. This function is expected to
|
||||||
|
contain the corresponding "free" function.
|
||||||
|
|
||||||
|
When a pointer to gdb_reg_value is being sent from GDB to the
|
||||||
|
reader (via gdb_unwind_reg_get), the reader is expected to call
|
||||||
|
this function (with the same gdb_reg_value as argument) once it
|
||||||
|
is done with the value.
|
||||||
|
|
||||||
|
When the function sends the a gdb_reg_value to GDB (via
|
||||||
|
gdb_unwind_reg_set), it is expected to set this field to point to
|
||||||
|
an appropriate cleanup routine (or to NULL if no cleanup is
|
||||||
|
required). */
|
||||||
|
gdb_reg_value_free *free;
|
||||||
|
|
||||||
|
/* The value of the register. */
|
||||||
|
unsigned char value[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* get_frame_id in gdb_reader_funcs is to return a gdb_frame_id
|
||||||
|
corresponding to the current frame. The registers corresponding to
|
||||||
|
the current frame can be read using reg_get. Calling get_frame_id
|
||||||
|
on a particular frame should return the same gdb_frame_id
|
||||||
|
throughout its lifetime (i.e. till before it gets unwound). One
|
||||||
|
way to do this is by having the CODE_ADDRESS point to the
|
||||||
|
function's first instruction and STACK_ADDRESS point to the value
|
||||||
|
of the stack pointer when entering the function. */
|
||||||
|
|
||||||
|
struct gdb_frame_id
|
||||||
|
{
|
||||||
|
GDB_CORE_ADDR code_address;
|
||||||
|
GDB_CORE_ADDR stack_address;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Forward declaration. */
|
||||||
|
|
||||||
|
struct gdb_unwind_callbacks;
|
||||||
|
|
||||||
|
/* Returns the value of a particular register in the current frame.
|
||||||
|
The current frame is the frame that needs to be unwound into the
|
||||||
|
outer (earlier) frame.
|
||||||
|
|
||||||
|
CB is the struct gdb_unwind_callbacks * the callback belongs to.
|
||||||
|
REGNUM is the DWARF register number of the register that needs to
|
||||||
|
be unwound.
|
||||||
|
|
||||||
|
Returns the gdb_reg_value corresponding to the register requested.
|
||||||
|
In case the value of the register has been optimized away or
|
||||||
|
otherwise unavailable, the defined flag in the returned
|
||||||
|
gdb_reg_value will be zero. */
|
||||||
|
|
||||||
|
typedef struct gdb_reg_value *(gdb_unwind_reg_get)
|
||||||
|
(struct gdb_unwind_callbacks *cb, int regnum);
|
||||||
|
|
||||||
|
/* Sets the previous value of a particular register. REGNUM is the
|
||||||
|
(DWARF) register number whose value is to be set. VAL is the value
|
||||||
|
the register is to be set to.
|
||||||
|
|
||||||
|
VAL is *not* copied, so the memory allocated to it cannot be
|
||||||
|
reused. Once GDB no longer needs the value, it is deallocated
|
||||||
|
using the FREE function (see gdb_reg_value).
|
||||||
|
|
||||||
|
A register can also be "set" to an undefined value by setting the
|
||||||
|
defined in VAL to zero. */
|
||||||
|
|
||||||
|
typedef void (gdb_unwind_reg_set) (struct gdb_unwind_callbacks *cb, int regnum,
|
||||||
|
struct gdb_reg_value *val);
|
||||||
|
|
||||||
|
/* This struct is passed to unwind in gdb_reader_funcs, and is to be
|
||||||
|
used to unwind the current frame (current being the frame whose
|
||||||
|
registers can be read using reg_get) into the earlier frame. The
|
||||||
|
functions have been described above. */
|
||||||
|
|
||||||
|
struct gdb_unwind_callbacks
|
||||||
|
{
|
||||||
|
gdb_unwind_reg_get *reg_get;
|
||||||
|
gdb_unwind_reg_set *reg_set;
|
||||||
|
gdb_target_read *target_read;
|
||||||
|
|
||||||
|
/* For internal use by GDB. */
|
||||||
|
void *priv_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Forward declaration. */
|
||||||
|
|
||||||
|
struct gdb_reader_funcs;
|
||||||
|
|
||||||
|
/* Parse the debug info off a block of memory, pointed to by MEMORY
|
||||||
|
(already copied to GDB's address space) and MEMORY_SZ bytes long.
|
||||||
|
The implementation has to use the functions in CB to actually emit
|
||||||
|
the parsed data into GDB. SELF is the same structure returned by
|
||||||
|
gdb_init_reader.
|
||||||
|
|
||||||
|
Return GDB_FAIL on failure and GDB_SUCCESS on success. */
|
||||||
|
|
||||||
|
typedef enum gdb_status (gdb_read_debug_info) (struct gdb_reader_funcs *self,
|
||||||
|
struct gdb_symbol_callbacks *cb,
|
||||||
|
void *memory, long memory_sz);
|
||||||
|
|
||||||
|
/* Unwind the current frame, CB is the set of unwind callbacks that
|
||||||
|
are to be used to do this.
|
||||||
|
|
||||||
|
Return GDB_FAIL on failure and GDB_SUCCESS on success. */
|
||||||
|
|
||||||
|
typedef enum gdb_status (gdb_unwind_frame) (struct gdb_reader_funcs *self,
|
||||||
|
struct gdb_unwind_callbacks *cb);
|
||||||
|
|
||||||
|
/* Return the frame ID corresponding to the current frame, using C to
|
||||||
|
read the current register values. See the comment on struct
|
||||||
|
gdb_frame_id. */
|
||||||
|
|
||||||
|
typedef struct gdb_frame_id (gdb_get_frame_id) (struct gdb_reader_funcs *self,
|
||||||
|
struct gdb_unwind_callbacks *c);
|
||||||
|
|
||||||
|
/* Called when a reader is being unloaded. This function should also
|
||||||
|
free SELF, if required. */
|
||||||
|
|
||||||
|
typedef void (gdb_destroy_reader) (struct gdb_reader_funcs *self);
|
||||||
|
|
||||||
|
/* Called when the reader is loaded. Must either return a properly
|
||||||
|
populated gdb_reader_funcs or NULL. The memory allocated for the
|
||||||
|
gdb_reader_funcs is to be managed by the reader itself (i.e. if it
|
||||||
|
is allocated from the heap, it must also be freed in
|
||||||
|
gdb_destroy_reader). */
|
||||||
|
|
||||||
|
extern struct gdb_reader_funcs *gdb_init_reader (void);
|
||||||
|
|
||||||
|
/* Pointer to the functions which implement the reader's
|
||||||
|
functionality. The individual functions have been documented
|
||||||
|
above.
|
||||||
|
|
||||||
|
None of the fields are optional. */
|
||||||
|
|
||||||
|
struct gdb_reader_funcs
|
||||||
|
{
|
||||||
|
/* Must be set to GDB_READER_INTERFACE_VERSION. */
|
||||||
|
int reader_version;
|
||||||
|
|
||||||
|
/* For use by the reader. */
|
||||||
|
void *priv_data;
|
||||||
|
|
||||||
|
gdb_read_debug_info *read;
|
||||||
|
gdb_unwind_frame *unwind;
|
||||||
|
gdb_get_frame_id *get_frame_id;
|
||||||
|
gdb_destroy_reader *destroy;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
+14
@@ -0,0 +1,14 @@
|
|||||||
|
This README file is copied into the directory for GCC-only header files
|
||||||
|
when fixincludes is run by the makefile for GCC.
|
||||||
|
|
||||||
|
Many of the files in this directory were automatically edited from the
|
||||||
|
standard system header files by the fixincludes process. They are
|
||||||
|
system-specific, and will not work on any other kind of system. They
|
||||||
|
are also not part of GCC. The reason we have to do this is because
|
||||||
|
GCC requires ANSI C headers and many vendors supply ANSI-incompatible
|
||||||
|
headers.
|
||||||
|
|
||||||
|
Because this is an automated process, sometimes headers get "fixed"
|
||||||
|
that do not, strictly speaking, need a fix. As long as nothing is broken
|
||||||
|
by the process, it is just an unfortunate collateral inconvenience.
|
||||||
|
We would like to rectify it, if it is not "too inconvenient".
|
||||||
+81
@@ -0,0 +1,81 @@
|
|||||||
|
/* Copyright (C) 2012-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _X86GPRINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <adxintrin.h> directly; include <x86gprintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _ADXINTRIN_H_INCLUDED
|
||||||
|
#define _ADXINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
extern __inline unsigned char
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_subborrow_u32 (unsigned char __CF, unsigned int __X,
|
||||||
|
unsigned int __Y, unsigned int *__P)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_sbb_u32 (__CF, __X, __Y, __P);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned char
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_addcarry_u32 (unsigned char __CF, unsigned int __X,
|
||||||
|
unsigned int __Y, unsigned int *__P)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_addcarryx_u32 (__CF, __X, __Y, __P);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned char
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_addcarryx_u32 (unsigned char __CF, unsigned int __X,
|
||||||
|
unsigned int __Y, unsigned int *__P)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_addcarryx_u32 (__CF, __X, __Y, __P);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
extern __inline unsigned char
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_subborrow_u64 (unsigned char __CF, unsigned long long __X,
|
||||||
|
unsigned long long __Y, unsigned long long *__P)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_sbb_u64 (__CF, __X, __Y, __P);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned char
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_addcarry_u64 (unsigned char __CF, unsigned long long __X,
|
||||||
|
unsigned long long __Y, unsigned long long *__P)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_addcarryx_u64 (__CF, __X, __Y, __P);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned char
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_addcarryx_u64 (unsigned char __CF, unsigned long long __X,
|
||||||
|
unsigned long long __Y, unsigned long long *__P)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_addcarryx_u64 (__CF, __X, __Y, __P);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _ADXINTRIN_H_INCLUDED */
|
||||||
+93
@@ -0,0 +1,93 @@
|
|||||||
|
/* Copyright (C) 2007-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* Implemented from the specification included in the AMD Programmers
|
||||||
|
Manual Update, version 2.x */
|
||||||
|
|
||||||
|
#ifndef _AMMINTRIN_H_INCLUDED
|
||||||
|
#define _AMMINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
/* We need definitions from the SSE3, SSE2 and SSE header files*/
|
||||||
|
#include <pmmintrin.h>
|
||||||
|
|
||||||
|
#ifndef __SSE4A__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("sse4a")
|
||||||
|
#define __DISABLE_SSE4A__
|
||||||
|
#endif /* __SSE4A__ */
|
||||||
|
|
||||||
|
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_stream_sd (double * __P, __m128d __Y)
|
||||||
|
{
|
||||||
|
__builtin_ia32_movntsd (__P, (__v2df) __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_stream_ss (float * __P, __m128 __Y)
|
||||||
|
{
|
||||||
|
__builtin_ia32_movntss (__P, (__v4sf) __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_extract_si64 (__m128i __X, __m128i __Y)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_extrq ((__v2di) __X, (__v16qi) __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __OPTIMIZE__
|
||||||
|
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_extracti_si64 (__m128i __X, unsigned const int __I, unsigned const int __L)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_extrqi ((__v2di) __X, __I, __L);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define _mm_extracti_si64(X, I, L) \
|
||||||
|
((__m128i) __builtin_ia32_extrqi ((__v2di)(__m128i)(X), \
|
||||||
|
(unsigned int)(I), (unsigned int)(L)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_insert_si64 (__m128i __X,__m128i __Y)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_insertq ((__v2di)__X, (__v2di)__Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __OPTIMIZE__
|
||||||
|
extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_inserti_si64(__m128i __X, __m128i __Y, unsigned const int __I, unsigned const int __L)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_insertqi ((__v2di)__X, (__v2di)__Y, __I, __L);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define _mm_inserti_si64(X, Y, I, L) \
|
||||||
|
((__m128i) __builtin_ia32_insertqi ((__v2di)(__m128i)(X), \
|
||||||
|
(__v2di)(__m128i)(Y), \
|
||||||
|
(unsigned int)(I), (unsigned int)(L)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __DISABLE_SSE4A__
|
||||||
|
#undef __DISABLE_SSE4A__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_SSE4A__ */
|
||||||
|
|
||||||
|
#endif /* _AMMINTRIN_H_INCLUDED */
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
/* Copyright (C) 2020-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <amxbf16intrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AMXBF16INTRIN_H_INCLUDED
|
||||||
|
#define _AMXBF16INTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AMX_BF16__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("amx-bf16")
|
||||||
|
#define __DISABLE_AMX_BF16__
|
||||||
|
#endif /* __AMX_BF16__ */
|
||||||
|
|
||||||
|
#if defined(__x86_64__)
|
||||||
|
#define _tile_dpbf16ps_internal(dst,src1,src2) \
|
||||||
|
__asm__ volatile\
|
||||||
|
("{tdpbf16ps\t%%tmm"#src2", %%tmm"#src1", %%tmm"#dst"|tdpbf16ps\t%%tmm"#dst", %%tmm"#src1", %%tmm"#src2"}" ::)
|
||||||
|
|
||||||
|
#define _tile_dpbf16ps(dst,src1,src2) \
|
||||||
|
_tile_dpbf16ps_internal (dst, src1, src2)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AMX_BF16__
|
||||||
|
#undef __DISABLE_AMX_BF16__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AMX_BF16__ */
|
||||||
|
|
||||||
|
#endif /* _AMXBF16INTRIN_H_INCLUDED */
|
||||||
+59
@@ -0,0 +1,59 @@
|
|||||||
|
/* Copyright (C) 2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <amxcomplexintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AMXCOMPLEXINTRIN_H_INCLUDED
|
||||||
|
#define _AMXCOMPLEXINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AMX_COMPLEX__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("amx-complex")
|
||||||
|
#define __DISABLE_AMX_COMPLEX__
|
||||||
|
#endif /* __AMX_COMPLEX__ */
|
||||||
|
|
||||||
|
#if defined(__x86_64__)
|
||||||
|
#define _tile_cmmimfp16ps_internal(src1_dst,src2,src3) \
|
||||||
|
__asm__ volatile\
|
||||||
|
("{tcmmimfp16ps\t%%tmm"#src3", %%tmm"#src2", %%tmm"#src1_dst"|tcmmimfp16ps\t%%tmm"#src1_dst", %%tmm"#src2", %%tmm"#src3"}" ::)
|
||||||
|
|
||||||
|
#define _tile_cmmrlfp16ps_internal(src1_dst,src2,src3) \
|
||||||
|
__asm__ volatile\
|
||||||
|
("{tcmmrlfp16ps\t%%tmm"#src3", %%tmm"#src2", %%tmm"#src1_dst"|tcmmrlfp16ps\t%%tmm"#src1_dst", %%tmm"#src2", %%tmm"#src3"}" ::)
|
||||||
|
|
||||||
|
#define _tile_cmmimfp16ps(src1_dst,src2,src3) \
|
||||||
|
_tile_cmmimfp16ps_internal (src1_dst, src2, src3)
|
||||||
|
|
||||||
|
#define _tile_cmmrlfp16ps(src1_dst,src2,src3) \
|
||||||
|
_tile_cmmrlfp16ps_internal (src1_dst, src2, src3)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AMX_COMPLEX__
|
||||||
|
#undef __DISABLE_AMX_COMPLEX__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AMX_COMPLEX__ */
|
||||||
|
|
||||||
|
#endif /* _AMXCOMPLEXINTRIN_H_INCLUDED */
|
||||||
+46
@@ -0,0 +1,46 @@
|
|||||||
|
/* Copyright (C) 2020-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <amxfp16intrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AMXFP16INTRIN_H_INCLUDED
|
||||||
|
#define _AMXFP16INTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if defined(__x86_64__)
|
||||||
|
#define _tile_dpfp16ps_internal(dst,src1,src2) \
|
||||||
|
__asm__ volatile \
|
||||||
|
("{tdpfp16ps\t%%tmm"#src2", %%tmm"#src1", %%tmm"#dst"|tdpfp16ps\t%%tmm"#dst", %%tmm"#src1", %%tmm"#src2"}" ::)
|
||||||
|
|
||||||
|
#define _tile_dpfp16ps(dst,src1,src2) \
|
||||||
|
_tile_dpfp16ps_internal (dst,src1,src2)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AMX_FP16__
|
||||||
|
#undef __DISABLE_AMX_FP16__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AMX_FP16__ */
|
||||||
|
|
||||||
|
#endif /* _AMXFP16INTRIN_H_INCLUDED */
|
||||||
+61
@@ -0,0 +1,61 @@
|
|||||||
|
/* Copyright (C) 2020-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <amxint8intrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AMXINT8INTRIN_H_INCLUDED
|
||||||
|
#define _AMXINT8INTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AMX_INT8__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("amx-int8")
|
||||||
|
#define __DISABLE_AMX_INT8__
|
||||||
|
#endif /* __AMX_INT8__ */
|
||||||
|
|
||||||
|
#if defined(__x86_64__)
|
||||||
|
#define _tile_int8_dp_internal(name,dst,src1,src2) \
|
||||||
|
__asm__ volatile \
|
||||||
|
("{"#name"\t%%tmm"#src2", %%tmm"#src1", %%tmm"#dst"|"#name"\t%%tmm"#dst", %%tmm"#src1", %%tmm"#src2"}" ::)
|
||||||
|
|
||||||
|
#define _tile_dpbssd(dst,src1,src2) \
|
||||||
|
_tile_int8_dp_internal (tdpbssd, dst, src1, src2)
|
||||||
|
|
||||||
|
#define _tile_dpbsud(dst,src1,src2) \
|
||||||
|
_tile_int8_dp_internal (tdpbsud, dst, src1, src2)
|
||||||
|
|
||||||
|
#define _tile_dpbusd(dst,src1,src2) \
|
||||||
|
_tile_int8_dp_internal (tdpbusd, dst, src1, src2)
|
||||||
|
|
||||||
|
#define _tile_dpbuud(dst,src1,src2) \
|
||||||
|
_tile_int8_dp_internal (tdpbuud, dst, src1, src2)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AMX_INT8__
|
||||||
|
#undef __DISABLE_AMX_INT8__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AMX_INT8__ */
|
||||||
|
|
||||||
|
#endif /* _AMXINT8INTRIN_H_INCLUDED */
|
||||||
+98
@@ -0,0 +1,98 @@
|
|||||||
|
/* Copyright (C) 2020-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <amxtileintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AMXTILEINTRIN_H_INCLUDED
|
||||||
|
#define _AMXTILEINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AMX_TILE__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("amx-tile")
|
||||||
|
#define __DISABLE_AMX_TILE__
|
||||||
|
#endif /* __AMX_TILE__ */
|
||||||
|
|
||||||
|
#if defined(__x86_64__)
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_tile_loadconfig (const void *__config)
|
||||||
|
{
|
||||||
|
__asm__ volatile ("ldtilecfg\t%X0" :: "m" (*((const void **)__config)));
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_tile_storeconfig (void *__config)
|
||||||
|
{
|
||||||
|
__asm__ volatile ("sttilecfg\t%X0" : "=m" (*((void **)__config)));
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_tile_release (void)
|
||||||
|
{
|
||||||
|
__asm__ volatile ("tilerelease" ::);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _tile_loadd(dst,base,stride) \
|
||||||
|
_tile_loadd_internal (dst, base, stride)
|
||||||
|
|
||||||
|
#define _tile_loadd_internal(dst,base,stride) \
|
||||||
|
__asm__ volatile \
|
||||||
|
("{tileloadd\t(%0,%1,1), %%tmm"#dst"|tileloadd\t%%tmm"#dst", [%0+%1*1]}" \
|
||||||
|
:: "r" ((const void*) (base)), "r" ((__PTRDIFF_TYPE__) (stride)))
|
||||||
|
|
||||||
|
#define _tile_stream_loadd(dst,base,stride) \
|
||||||
|
_tile_stream_loadd_internal (dst, base, stride)
|
||||||
|
|
||||||
|
#define _tile_stream_loadd_internal(dst,base,stride) \
|
||||||
|
__asm__ volatile \
|
||||||
|
("{tileloaddt1\t(%0,%1,1), %%tmm"#dst"|tileloaddt1\t%%tmm"#dst", [%0+%1*1]}" \
|
||||||
|
:: "r" ((const void*) (base)), "r" ((__PTRDIFF_TYPE__) (stride)))
|
||||||
|
|
||||||
|
#define _tile_stored(dst,base,stride) \
|
||||||
|
_tile_stored_internal (dst, base, stride)
|
||||||
|
|
||||||
|
#define _tile_stored_internal(src,base,stride) \
|
||||||
|
__asm__ volatile \
|
||||||
|
("{tilestored\t%%tmm"#src", (%0,%1,1)|tilestored\t[%0+%1*1], %%tmm"#src"}" \
|
||||||
|
:: "r" ((void*) (base)), "r" ((__PTRDIFF_TYPE__) (stride)) \
|
||||||
|
: "memory")
|
||||||
|
|
||||||
|
#define _tile_zero(dst) \
|
||||||
|
_tile_zero_internal (dst)
|
||||||
|
|
||||||
|
#define _tile_zero_internal(dst) \
|
||||||
|
__asm__ volatile \
|
||||||
|
("tilezero\t%%tmm"#dst ::)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AMX_TILE__
|
||||||
|
#undef __DISABLE_AMX_TILE__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AMX_TILE__ */
|
||||||
|
|
||||||
|
#endif /* _AMXTILEINTRIN_H_INCLUDED */
|
||||||
+1923
File diff suppressed because it is too large
Load Diff
+216
@@ -0,0 +1,216 @@
|
|||||||
|
/* Copyright (C) 2015-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <avx5124fmapsintrin.h> directly; include <x86intrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX5124FMAPSINTRIN_H_INCLUDED
|
||||||
|
#define _AVX5124FMAPSINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVX5124FMAPS__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx5124fmaps")
|
||||||
|
#define __DISABLE_AVX5124FMAPS__
|
||||||
|
#endif /* __AVX5124FMAPS__ */
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_4fmadd_ps (__m512 __A, __m512 __B, __m512 __C,
|
||||||
|
__m512 __D, __m512 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_4fmaddps ((__v16sf) __B,
|
||||||
|
(__v16sf) __C,
|
||||||
|
(__v16sf) __D,
|
||||||
|
(__v16sf) __E,
|
||||||
|
(__v16sf) __A,
|
||||||
|
(const __v4sf *) __F);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_4fmadd_ps (__m512 __A, __mmask16 __U, __m512 __B,
|
||||||
|
__m512 __C, __m512 __D, __m512 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_4fmaddps_mask ((__v16sf) __B,
|
||||||
|
(__v16sf) __C,
|
||||||
|
(__v16sf) __D,
|
||||||
|
(__v16sf) __E,
|
||||||
|
(__v16sf) __A,
|
||||||
|
(const __v4sf *) __F,
|
||||||
|
(__v16sf) __A,
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_4fmadd_ps (__mmask16 __U,
|
||||||
|
__m512 __A, __m512 __B, __m512 __C,
|
||||||
|
__m512 __D, __m512 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_4fmaddps_mask ((__v16sf) __B,
|
||||||
|
(__v16sf) __C,
|
||||||
|
(__v16sf) __D,
|
||||||
|
(__v16sf) __E,
|
||||||
|
(__v16sf) __A,
|
||||||
|
(const __v4sf *) __F,
|
||||||
|
(__v16sf) _mm512_setzero_ps (),
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_4fmadd_ss (__m128 __A, __m128 __B, __m128 __C,
|
||||||
|
__m128 __D, __m128 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_4fmaddss ((__v4sf) __B,
|
||||||
|
(__v4sf) __C,
|
||||||
|
(__v4sf) __D,
|
||||||
|
(__v4sf) __E,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(const __v4sf *) __F);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_4fmadd_ss (__m128 __A, __mmask8 __U, __m128 __B, __m128 __C,
|
||||||
|
__m128 __D, __m128 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_4fmaddss_mask ((__v4sf) __B,
|
||||||
|
(__v4sf) __C,
|
||||||
|
(__v4sf) __D,
|
||||||
|
(__v4sf) __E,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(const __v4sf *) __F,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_4fmadd_ss (__mmask8 __U, __m128 __A, __m128 __B, __m128 __C,
|
||||||
|
__m128 __D, __m128 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_4fmaddss_mask ((__v4sf) __B,
|
||||||
|
(__v4sf) __C,
|
||||||
|
(__v4sf) __D,
|
||||||
|
(__v4sf) __E,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(const __v4sf *) __F,
|
||||||
|
(__v4sf) _mm_setzero_ps (),
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_4fnmadd_ps (__m512 __A, __m512 __B, __m512 __C,
|
||||||
|
__m512 __D, __m512 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_4fnmaddps ((__v16sf) __B,
|
||||||
|
(__v16sf) __C,
|
||||||
|
(__v16sf) __D,
|
||||||
|
(__v16sf) __E,
|
||||||
|
(__v16sf) __A,
|
||||||
|
(const __v4sf *) __F);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_4fnmadd_ps (__m512 __A, __mmask16 __U, __m512 __B,
|
||||||
|
__m512 __C, __m512 __D, __m512 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_4fnmaddps_mask ((__v16sf) __B,
|
||||||
|
(__v16sf) __C,
|
||||||
|
(__v16sf) __D,
|
||||||
|
(__v16sf) __E,
|
||||||
|
(__v16sf) __A,
|
||||||
|
(const __v4sf *) __F,
|
||||||
|
(__v16sf) __A,
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_4fnmadd_ps (__mmask16 __U,
|
||||||
|
__m512 __A, __m512 __B, __m512 __C,
|
||||||
|
__m512 __D, __m512 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_4fnmaddps_mask ((__v16sf) __B,
|
||||||
|
(__v16sf) __C,
|
||||||
|
(__v16sf) __D,
|
||||||
|
(__v16sf) __E,
|
||||||
|
(__v16sf) __A,
|
||||||
|
(const __v4sf *) __F,
|
||||||
|
(__v16sf) _mm512_setzero_ps (),
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_4fnmadd_ss (__m128 __A, __m128 __B, __m128 __C,
|
||||||
|
__m128 __D, __m128 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_4fnmaddss ((__v4sf) __B,
|
||||||
|
(__v4sf) __C,
|
||||||
|
(__v4sf) __D,
|
||||||
|
(__v4sf) __E,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(const __v4sf *) __F);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_4fnmadd_ss (__m128 __A, __mmask8 __U, __m128 __B, __m128 __C,
|
||||||
|
__m128 __D, __m128 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_4fnmaddss_mask ((__v4sf) __B,
|
||||||
|
(__v4sf) __C,
|
||||||
|
(__v4sf) __D,
|
||||||
|
(__v4sf) __E,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(const __v4sf *) __F,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_4fnmadd_ss (__mmask8 __U, __m128 __A, __m128 __B, __m128 __C,
|
||||||
|
__m128 __D, __m128 __E, __m128 *__F)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_4fnmaddss_mask ((__v4sf) __B,
|
||||||
|
(__v4sf) __C,
|
||||||
|
(__v4sf) __D,
|
||||||
|
(__v4sf) __E,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(const __v4sf *) __F,
|
||||||
|
(__v4sf) _mm_setzero_ps (),
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX5124FMAPS__
|
||||||
|
#undef __DISABLE_AVX5124FMAPS__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX5124FMAPS__ */
|
||||||
|
|
||||||
|
#endif /* _AVX5124FMAPSINTRIN_H_INCLUDED */
|
||||||
+132
@@ -0,0 +1,132 @@
|
|||||||
|
/* Copyright (C) 2015-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <avx5124vnniwintrin.h> directly; include <x86intrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX5124VNNIWINTRIN_H_INCLUDED
|
||||||
|
#define _AVX5124VNNIWINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVX5124VNNIW__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx5124vnniw")
|
||||||
|
#define __DISABLE_AVX5124VNNIW__
|
||||||
|
#endif /* __AVX5124VNNIW__ */
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_4dpwssd_epi32 (__m512i __A, __m512i __B, __m512i __C,
|
||||||
|
__m512i __D, __m512i __E, __m128i *__F)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vp4dpwssd ((__v16si) __B,
|
||||||
|
(__v16si) __C,
|
||||||
|
(__v16si) __D,
|
||||||
|
(__v16si) __E,
|
||||||
|
(__v16si) __A,
|
||||||
|
(const __v4si *) __F);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_4dpwssd_epi32 (__m512i __A, __mmask16 __U, __m512i __B,
|
||||||
|
__m512i __C, __m512i __D, __m512i __E,
|
||||||
|
__m128i *__F)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vp4dpwssd_mask ((__v16si) __B,
|
||||||
|
(__v16si) __C,
|
||||||
|
(__v16si) __D,
|
||||||
|
(__v16si) __E,
|
||||||
|
(__v16si) __A,
|
||||||
|
(const __v4si *) __F,
|
||||||
|
(__v16si) __A,
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_4dpwssd_epi32 (__mmask16 __U, __m512i __A, __m512i __B,
|
||||||
|
__m512i __C, __m512i __D, __m512i __E,
|
||||||
|
__m128i *__F)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vp4dpwssd_mask ((__v16si) __B,
|
||||||
|
(__v16si) __C,
|
||||||
|
(__v16si) __D,
|
||||||
|
(__v16si) __E,
|
||||||
|
(__v16si) __A,
|
||||||
|
(const __v4si *) __F,
|
||||||
|
(__v16si) _mm512_setzero_ps (),
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_4dpwssds_epi32 (__m512i __A, __m512i __B, __m512i __C,
|
||||||
|
__m512i __D, __m512i __E, __m128i *__F)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vp4dpwssds ((__v16si) __B,
|
||||||
|
(__v16si) __C,
|
||||||
|
(__v16si) __D,
|
||||||
|
(__v16si) __E,
|
||||||
|
(__v16si) __A,
|
||||||
|
(const __v4si *) __F);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_4dpwssds_epi32 (__m512i __A, __mmask16 __U, __m512i __B,
|
||||||
|
__m512i __C, __m512i __D, __m512i __E,
|
||||||
|
__m128i *__F)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vp4dpwssds_mask ((__v16si) __B,
|
||||||
|
(__v16si) __C,
|
||||||
|
(__v16si) __D,
|
||||||
|
(__v16si) __E,
|
||||||
|
(__v16si) __A,
|
||||||
|
(const __v4si *) __F,
|
||||||
|
(__v16si) __A,
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_4dpwssds_epi32 (__mmask16 __U, __m512i __A, __m512i __B,
|
||||||
|
__m512i __C, __m512i __D, __m512i __E,
|
||||||
|
__m128i *__F)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vp4dpwssds_mask ((__v16si) __B,
|
||||||
|
(__v16si) __C,
|
||||||
|
(__v16si) __D,
|
||||||
|
(__v16si) __E,
|
||||||
|
(__v16si) __A,
|
||||||
|
(const __v4si *) __F,
|
||||||
|
(__v16si) _mm512_setzero_ps (),
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX5124VNNIW__
|
||||||
|
#undef __DISABLE_AVX5124VNNIW__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX5124VNNIW__ */
|
||||||
|
|
||||||
|
#endif /* _AVX5124VNNIWINTRIN_H_INCLUDED */
|
||||||
+152
@@ -0,0 +1,152 @@
|
|||||||
|
/* Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512bf16intrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512BF16INTRIN_H_INCLUDED
|
||||||
|
#define _AVX512BF16INTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVX512BF16__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512bf16")
|
||||||
|
#define __DISABLE_AVX512BF16__
|
||||||
|
#endif /* __AVX512BF16__ */
|
||||||
|
|
||||||
|
/* Internal data types for implementing the intrinsics. */
|
||||||
|
typedef __bf16 __v32bf __attribute__ ((__vector_size__ (64)));
|
||||||
|
|
||||||
|
/* The Intel API is flexible enough that we must allow aliasing with other
|
||||||
|
vector types, and their scalar components. */
|
||||||
|
typedef __bf16 __m512bh __attribute__ ((__vector_size__ (64), __may_alias__));
|
||||||
|
|
||||||
|
/* Convert One BF16 Data to One Single Float Data. */
|
||||||
|
extern __inline float
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_cvtsbh_ss (__bf16 __A)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_cvtbf2sf (__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vcvtne2ps2bf16 */
|
||||||
|
|
||||||
|
extern __inline __m512bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_cvtne2ps_pbh (__m512 __A, __m512 __B)
|
||||||
|
{
|
||||||
|
return (__m512bh)__builtin_ia32_cvtne2ps2bf16_v32bf(__A, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_cvtne2ps_pbh (__m512bh __A, __mmask32 __B, __m512 __C, __m512 __D)
|
||||||
|
{
|
||||||
|
return (__m512bh)__builtin_ia32_cvtne2ps2bf16_v32bf_mask(__C, __D, __A, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_cvtne2ps_pbh (__mmask32 __A, __m512 __B, __m512 __C)
|
||||||
|
{
|
||||||
|
return (__m512bh)__builtin_ia32_cvtne2ps2bf16_v32bf_maskz(__B, __C, __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vcvtneps2bf16 */
|
||||||
|
|
||||||
|
extern __inline __m256bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_cvtneps_pbh (__m512 __A)
|
||||||
|
{
|
||||||
|
return (__m256bh)__builtin_ia32_cvtneps2bf16_v16sf(__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_cvtneps_pbh (__m256bh __A, __mmask16 __B, __m512 __C)
|
||||||
|
{
|
||||||
|
return (__m256bh)__builtin_ia32_cvtneps2bf16_v16sf_mask(__C, __A, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_cvtneps_pbh (__mmask16 __A, __m512 __B)
|
||||||
|
{
|
||||||
|
return (__m256bh)__builtin_ia32_cvtneps2bf16_v16sf_maskz(__B, __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vdpbf16ps */
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_dpbf16_ps (__m512 __A, __m512bh __B, __m512bh __C)
|
||||||
|
{
|
||||||
|
return (__m512)__builtin_ia32_dpbf16ps_v16sf(__A, __B, __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_dpbf16_ps (__m512 __A, __mmask16 __B, __m512bh __C, __m512bh __D)
|
||||||
|
{
|
||||||
|
return (__m512)__builtin_ia32_dpbf16ps_v16sf_mask(__A, __C, __D, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_dpbf16_ps (__mmask16 __A, __m512 __B, __m512bh __C, __m512bh __D)
|
||||||
|
{
|
||||||
|
return (__m512)__builtin_ia32_dpbf16ps_v16sf_maskz(__B, __C, __D, __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_cvtpbh_ps (__m256bh __A)
|
||||||
|
{
|
||||||
|
return (__m512)_mm512_castsi512_ps ((__m512i)_mm512_slli_epi32 (
|
||||||
|
(__m512i)_mm512_cvtepi16_epi32 ((__m256i)__A), 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_cvtpbh_ps (__mmask16 __U, __m256bh __A)
|
||||||
|
{
|
||||||
|
return (__m512)_mm512_castsi512_ps ((__m512i) _mm512_slli_epi32 (
|
||||||
|
(__m512i)_mm512_maskz_cvtepi16_epi32 (
|
||||||
|
(__mmask16)__U, (__m256i)__A), 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_cvtpbh_ps (__m512 __S, __mmask16 __U, __m256bh __A)
|
||||||
|
{
|
||||||
|
return (__m512)_mm512_castsi512_ps ((__m512i)(_mm512_mask_slli_epi32 (
|
||||||
|
(__m512i)__S, (__mmask16)__U,
|
||||||
|
(__m512i)_mm512_cvtepi16_epi32 ((__m256i)__A), 16)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512BF16__
|
||||||
|
#undef __DISABLE_AVX512BF16__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512BF16__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512BF16INTRIN_H_INCLUDED */
|
||||||
+238
@@ -0,0 +1,238 @@
|
|||||||
|
/* Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512bf16vlintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512BF16VLINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512BF16VLINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AVX512VL__) || !defined(__AVX512BF16__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512bf16,avx512vl")
|
||||||
|
#define __DISABLE_AVX512BF16VL__
|
||||||
|
#endif /* __AVX512BF16__ */
|
||||||
|
|
||||||
|
/* Internal data types for implementing the intrinsics. */
|
||||||
|
typedef __bf16 __v16bf __attribute__ ((__vector_size__ (32)));
|
||||||
|
typedef __bf16 __v8bf __attribute__ ((__vector_size__ (16)));
|
||||||
|
|
||||||
|
/* The Intel API is flexible enough that we must allow aliasing with other
|
||||||
|
vector types, and their scalar components. */
|
||||||
|
typedef __bf16 __m256bh __attribute__ ((__vector_size__ (32), __may_alias__));
|
||||||
|
typedef __bf16 __m128bh __attribute__ ((__vector_size__ (16), __may_alias__));
|
||||||
|
|
||||||
|
typedef __bf16 __bfloat16;
|
||||||
|
|
||||||
|
#define _mm256_cvtneps_pbh(A) \
|
||||||
|
(__m128bh) __builtin_ia32_cvtneps2bf16_v8sf (A)
|
||||||
|
#define _mm_cvtneps_pbh(A) \
|
||||||
|
(__m128bh) __builtin_ia32_cvtneps2bf16_v4sf (A)
|
||||||
|
|
||||||
|
/* vcvtne2ps2bf16 */
|
||||||
|
|
||||||
|
extern __inline __m256bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_cvtne2ps_pbh (__m256 __A, __m256 __B)
|
||||||
|
{
|
||||||
|
return (__m256bh)__builtin_ia32_cvtne2ps2bf16_v16bf(__A, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_cvtne2ps_pbh (__m256bh __A, __mmask16 __B, __m256 __C, __m256 __D)
|
||||||
|
{
|
||||||
|
return (__m256bh)__builtin_ia32_cvtne2ps2bf16_v16bf_mask(__C, __D, __A, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_cvtne2ps_pbh (__mmask16 __A, __m256 __B, __m256 __C)
|
||||||
|
{
|
||||||
|
return (__m256bh)__builtin_ia32_cvtne2ps2bf16_v16bf_maskz(__B, __C, __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_cvtne2ps_pbh (__m128 __A, __m128 __B)
|
||||||
|
{
|
||||||
|
return (__m128bh)__builtin_ia32_cvtne2ps2bf16_v8bf(__A, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_cvtne2ps_pbh (__m128bh __A, __mmask8 __B, __m128 __C, __m128 __D)
|
||||||
|
{
|
||||||
|
return (__m128bh)__builtin_ia32_cvtne2ps2bf16_v8bf_mask(__C, __D, __A, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_cvtne2ps_pbh (__mmask8 __A, __m128 __B, __m128 __C)
|
||||||
|
{
|
||||||
|
return (__m128bh)__builtin_ia32_cvtne2ps2bf16_v8bf_maskz(__B, __C, __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vcvtneps2bf16 */
|
||||||
|
|
||||||
|
extern __inline __m128bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_cvtneps_pbh (__m128bh __A, __mmask8 __B, __m256 __C)
|
||||||
|
{
|
||||||
|
return (__m128bh)__builtin_ia32_cvtneps2bf16_v8sf_mask(__C, __A, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_cvtneps_pbh (__mmask8 __A, __m256 __B)
|
||||||
|
{
|
||||||
|
return (__m128bh)__builtin_ia32_cvtneps2bf16_v8sf_maskz(__B, __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_cvtneps_pbh (__m128bh __A, __mmask8 __B, __m128 __C)
|
||||||
|
{
|
||||||
|
return (__m128bh)__builtin_ia32_cvtneps2bf16_v4sf_mask(__C, __A, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128bh
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_cvtneps_pbh (__mmask8 __A, __m128 __B)
|
||||||
|
{
|
||||||
|
return (__m128bh)__builtin_ia32_cvtneps2bf16_v4sf_maskz(__B, __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vdpbf16ps */
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_dpbf16_ps (__m256 __A, __m256bh __B, __m256bh __C)
|
||||||
|
{
|
||||||
|
return (__m256)__builtin_ia32_dpbf16ps_v8sf(__A, __B, __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_dpbf16_ps (__m256 __A, __mmask8 __B, __m256bh __C, __m256bh __D)
|
||||||
|
{
|
||||||
|
return (__m256)__builtin_ia32_dpbf16ps_v8sf_mask(__A, __C, __D, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_dpbf16_ps (__mmask8 __A, __m256 __B, __m256bh __C, __m256bh __D)
|
||||||
|
{
|
||||||
|
return (__m256)__builtin_ia32_dpbf16ps_v8sf_maskz(__B, __C, __D, __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_dpbf16_ps (__m128 __A, __m128bh __B, __m128bh __C)
|
||||||
|
{
|
||||||
|
return (__m128)__builtin_ia32_dpbf16ps_v4sf(__A, __B, __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_dpbf16_ps (__m128 __A, __mmask8 __B, __m128bh __C, __m128bh __D)
|
||||||
|
{
|
||||||
|
return (__m128)__builtin_ia32_dpbf16ps_v4sf_mask(__A, __C, __D, __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_dpbf16_ps (__mmask8 __A, __m128 __B, __m128bh __C, __m128bh __D)
|
||||||
|
{
|
||||||
|
return (__m128)__builtin_ia32_dpbf16ps_v4sf_maskz(__B, __C, __D, __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __bf16
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_cvtness_sbh (float __A)
|
||||||
|
{
|
||||||
|
__v4sf __V = {__A, 0, 0, 0};
|
||||||
|
__v8bf __R = __builtin_ia32_cvtneps2bf16_v4sf_mask ((__v4sf)__V,
|
||||||
|
(__v8bf)_mm_undefined_si128 (), (__mmask8)-1);
|
||||||
|
return __R[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_cvtpbh_ps (__m128bh __A)
|
||||||
|
{
|
||||||
|
return (__m128)_mm_castsi128_ps ((__m128i)_mm_slli_epi32 (
|
||||||
|
(__m128i)_mm_cvtepi16_epi32 ((__m128i)__A), 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_cvtpbh_ps (__m128bh __A)
|
||||||
|
{
|
||||||
|
return (__m256)_mm256_castsi256_ps ((__m256i)_mm256_slli_epi32 (
|
||||||
|
(__m256i)_mm256_cvtepi16_epi32 ((__m128i)__A), 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_cvtpbh_ps (__mmask8 __U, __m128bh __A)
|
||||||
|
{
|
||||||
|
return (__m128)_mm_castsi128_ps ((__m128i)_mm_slli_epi32 (
|
||||||
|
(__m128i)_mm_maskz_cvtepi16_epi32 (
|
||||||
|
(__mmask8)__U, (__m128i)__A), 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_cvtpbh_ps (__mmask8 __U, __m128bh __A)
|
||||||
|
{
|
||||||
|
return (__m256)_mm256_castsi256_ps ((__m256i)_mm256_slli_epi32 (
|
||||||
|
(__m256i)_mm256_maskz_cvtepi16_epi32 (
|
||||||
|
(__mmask8)__U, (__m128i)__A), 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_cvtpbh_ps (__m128 __S, __mmask8 __U, __m128bh __A)
|
||||||
|
{
|
||||||
|
return (__m128)_mm_castsi128_ps ((__m128i)_mm_mask_slli_epi32 (
|
||||||
|
(__m128i)__S, (__mmask8)__U, (__m128i)_mm_cvtepi16_epi32 (
|
||||||
|
(__m128i)__A), 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_cvtpbh_ps (__m256 __S, __mmask8 __U, __m128bh __A)
|
||||||
|
{
|
||||||
|
return (__m256)_mm256_castsi256_ps ((__m256i)_mm256_mask_slli_epi32 (
|
||||||
|
(__m256i)__S, (__mmask8)__U, (__m256i)_mm256_cvtepi16_epi32 (
|
||||||
|
(__m128i)__A), 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512BF16VL__
|
||||||
|
#undef __DISABLE_AVX512BF16VL__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512BF16VL__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512BF16VLINTRIN_H_INCLUDED */
|
||||||
+283
@@ -0,0 +1,283 @@
|
|||||||
|
/* Copyright (C) 2017-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <avx512bitalgintrin.h> directly; include <x86intrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512BITALGINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512BITALGINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVX512BITALG__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512bitalg")
|
||||||
|
#define __DISABLE_AVX512BITALG__
|
||||||
|
#endif /* __AVX512BITALG__ */
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_popcnt_epi8 (__m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountb_v64qi ((__v64qi) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_popcnt_epi16 (__m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountw_v32hi ((__v32hi) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512BITALG__
|
||||||
|
#undef __DISABLE_AVX512BITALG__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512BITALG__ */
|
||||||
|
|
||||||
|
#if !defined(__AVX512BITALG__) || !defined(__AVX512BW__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512bitalg,avx512bw")
|
||||||
|
#define __DISABLE_AVX512BITALGBW__
|
||||||
|
#endif /* __AVX512VLBW__ */
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_popcnt_epi8 (__m512i __W, __mmask64 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountb_v64qi_mask ((__v64qi) __A,
|
||||||
|
(__v64qi) __W,
|
||||||
|
(__mmask64) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_popcnt_epi8 (__mmask64 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountb_v64qi_mask ((__v64qi) __A,
|
||||||
|
(__v64qi)
|
||||||
|
_mm512_setzero_si512 (),
|
||||||
|
(__mmask64) __U);
|
||||||
|
}
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_popcnt_epi16 (__m512i __W, __mmask32 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountw_v32hi_mask ((__v32hi) __A,
|
||||||
|
(__v32hi) __W,
|
||||||
|
(__mmask32) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_popcnt_epi16 (__mmask32 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountw_v32hi_mask ((__v32hi) __A,
|
||||||
|
(__v32hi)
|
||||||
|
_mm512_setzero_si512 (),
|
||||||
|
(__mmask32) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __mmask64
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_bitshuffle_epi64_mask (__m512i __A, __m512i __B)
|
||||||
|
{
|
||||||
|
return (__mmask64) __builtin_ia32_vpshufbitqmb512_mask ((__v64qi) __A,
|
||||||
|
(__v64qi) __B,
|
||||||
|
(__mmask64) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __mmask64
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_bitshuffle_epi64_mask (__mmask64 __M, __m512i __A, __m512i __B)
|
||||||
|
{
|
||||||
|
return (__mmask64) __builtin_ia32_vpshufbitqmb512_mask ((__v64qi) __A,
|
||||||
|
(__v64qi) __B,
|
||||||
|
(__mmask64) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512BITALGBW__
|
||||||
|
#undef __DISABLE_AVX512BITALGBW__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512BITALGBW__ */
|
||||||
|
|
||||||
|
#if !defined(__AVX512BITALG__) || !defined(__AVX512VL__) || !defined(__AVX512BW__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512bitalg,avx512vl,avx512bw")
|
||||||
|
#define __DISABLE_AVX512BITALGVLBW__
|
||||||
|
#endif /* __AVX512VLBW__ */
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_popcnt_epi8 (__m256i __W, __mmask32 __U, __m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountb_v32qi_mask ((__v32qi) __A,
|
||||||
|
(__v32qi) __W,
|
||||||
|
(__mmask32) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_popcnt_epi8 (__mmask32 __U, __m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountb_v32qi_mask ((__v32qi) __A,
|
||||||
|
(__v32qi)
|
||||||
|
_mm256_setzero_si256 (),
|
||||||
|
(__mmask32) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __mmask32
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_bitshuffle_epi64_mask (__m256i __A, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__mmask32) __builtin_ia32_vpshufbitqmb256_mask ((__v32qi) __A,
|
||||||
|
(__v32qi) __B,
|
||||||
|
(__mmask32) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __mmask32
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_bitshuffle_epi64_mask (__mmask32 __M, __m256i __A, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__mmask32) __builtin_ia32_vpshufbitqmb256_mask ((__v32qi) __A,
|
||||||
|
(__v32qi) __B,
|
||||||
|
(__mmask32) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512BITALGVLBW__
|
||||||
|
#undef __DISABLE_AVX512BITALGVLBW__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512BITALGVLBW__ */
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(__AVX512BITALG__) || !defined(__AVX512VL__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512bitalg,avx512vl")
|
||||||
|
#define __DISABLE_AVX512BITALGVL__
|
||||||
|
#endif /* __AVX512VLBW__ */
|
||||||
|
|
||||||
|
extern __inline __mmask16
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_bitshuffle_epi64_mask (__m128i __A, __m128i __B)
|
||||||
|
{
|
||||||
|
return (__mmask16) __builtin_ia32_vpshufbitqmb128_mask ((__v16qi) __A,
|
||||||
|
(__v16qi) __B,
|
||||||
|
(__mmask16) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __mmask16
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_bitshuffle_epi64_mask (__mmask16 __M, __m128i __A, __m128i __B)
|
||||||
|
{
|
||||||
|
return (__mmask16) __builtin_ia32_vpshufbitqmb128_mask ((__v16qi) __A,
|
||||||
|
(__v16qi) __B,
|
||||||
|
(__mmask16) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_popcnt_epi8 (__m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountb_v32qi ((__v32qi) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_popcnt_epi16 (__m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountw_v16hi ((__v16hi) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_popcnt_epi8 (__m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountb_v16qi ((__v16qi) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_popcnt_epi16 (__m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountw_v8hi ((__v8hi) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_popcnt_epi16 (__m256i __W, __mmask16 __U, __m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountw_v16hi_mask ((__v16hi) __A,
|
||||||
|
(__v16hi) __W,
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_popcnt_epi16 (__mmask16 __U, __m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountw_v16hi_mask ((__v16hi) __A,
|
||||||
|
(__v16hi)
|
||||||
|
_mm256_setzero_si256 (),
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_popcnt_epi8 (__m128i __W, __mmask16 __U, __m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountb_v16qi_mask ((__v16qi) __A,
|
||||||
|
(__v16qi) __W,
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_popcnt_epi8 (__mmask16 __U, __m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountb_v16qi_mask ((__v16qi) __A,
|
||||||
|
(__v16qi)
|
||||||
|
_mm_setzero_si128 (),
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_popcnt_epi16 (__m128i __W, __mmask8 __U, __m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountw_v8hi_mask ((__v8hi) __A,
|
||||||
|
(__v8hi) __W,
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_popcnt_epi16 (__mmask8 __U, __m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountw_v8hi_mask ((__v8hi) __A,
|
||||||
|
(__v8hi)
|
||||||
|
_mm_setzero_si128 (),
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
#ifdef __DISABLE_AVX512BITALGVL__
|
||||||
|
#undef __DISABLE_AVX512BITALGVL__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512BITALGBW__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512BITALGINTRIN_H_INCLUDED */
|
||||||
+3333
File diff suppressed because it is too large
Load Diff
+184
@@ -0,0 +1,184 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512cdintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512CDINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512CDINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVX512CD__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512cd")
|
||||||
|
#define __DISABLE_AVX512CD__
|
||||||
|
#endif /* __AVX512CD__ */
|
||||||
|
|
||||||
|
/* Internal data types for implementing the intrinsics. */
|
||||||
|
typedef long long __v8di __attribute__ ((__vector_size__ (64)));
|
||||||
|
typedef int __v16si __attribute__ ((__vector_size__ (64)));
|
||||||
|
|
||||||
|
/* The Intel API is flexible enough that we must allow aliasing with other
|
||||||
|
vector types, and their scalar components. */
|
||||||
|
typedef long long __m512i __attribute__ ((__vector_size__ (64), __may_alias__));
|
||||||
|
typedef double __m512d __attribute__ ((__vector_size__ (64), __may_alias__));
|
||||||
|
|
||||||
|
typedef unsigned char __mmask8;
|
||||||
|
typedef unsigned short __mmask16;
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_conflict_epi32 (__m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i)
|
||||||
|
__builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
|
||||||
|
(__v16si) _mm512_setzero_si512 (),
|
||||||
|
(__mmask16) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_conflict_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
|
||||||
|
(__v16si) __W,
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_conflict_epi32 (__mmask16 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i)
|
||||||
|
__builtin_ia32_vpconflictsi_512_mask ((__v16si) __A,
|
||||||
|
(__v16si) _mm512_setzero_si512 (),
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_conflict_epi64 (__m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i)
|
||||||
|
__builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
|
||||||
|
(__v8di) _mm512_setzero_si512 (),
|
||||||
|
(__mmask8) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_conflict_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
|
||||||
|
(__v8di) __W,
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_conflict_epi64 (__mmask8 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i)
|
||||||
|
__builtin_ia32_vpconflictdi_512_mask ((__v8di) __A,
|
||||||
|
(__v8di) _mm512_setzero_si512 (),
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_lzcnt_epi64 (__m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i)
|
||||||
|
__builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
|
||||||
|
(__v8di) _mm512_setzero_si512 (),
|
||||||
|
(__mmask8) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_lzcnt_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
|
||||||
|
(__v8di) __W,
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_lzcnt_epi64 (__mmask8 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i)
|
||||||
|
__builtin_ia32_vplzcntq_512_mask ((__v8di) __A,
|
||||||
|
(__v8di) _mm512_setzero_si512 (),
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_lzcnt_epi32 (__m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i)
|
||||||
|
__builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
|
||||||
|
(__v16si) _mm512_setzero_si512 (),
|
||||||
|
(__mmask16) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_lzcnt_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
|
||||||
|
(__v16si) __W,
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_lzcnt_epi32 (__mmask16 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i)
|
||||||
|
__builtin_ia32_vplzcntd_512_mask ((__v16si) __A,
|
||||||
|
(__v16si) _mm512_setzero_si512 (),
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_broadcastmb_epi64 (__mmask8 __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_broadcastmb512 (__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_broadcastmw_epi32 (__mmask16 __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_broadcastmw512 (__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512CD__
|
||||||
|
#undef __DISABLE_AVX512CD__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512CD__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512CDINTRIN_H_INCLUDED */
|
||||||
+2891
File diff suppressed because it is too large
Load Diff
+536
@@ -0,0 +1,536 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512erintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512ERINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512ERINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVX512ER__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512er")
|
||||||
|
#define __DISABLE_AVX512ER__
|
||||||
|
#endif /* __AVX512ER__ */
|
||||||
|
|
||||||
|
/* Internal data types for implementing the intrinsics. */
|
||||||
|
typedef double __v8df __attribute__ ((__vector_size__ (64)));
|
||||||
|
typedef float __v16sf __attribute__ ((__vector_size__ (64)));
|
||||||
|
|
||||||
|
/* The Intel API is flexible enough that we must allow aliasing with other
|
||||||
|
vector types, and their scalar components. */
|
||||||
|
typedef float __m512 __attribute__ ((__vector_size__ (64), __may_alias__));
|
||||||
|
typedef double __m512d __attribute__ ((__vector_size__ (64), __may_alias__));
|
||||||
|
|
||||||
|
typedef unsigned char __mmask8;
|
||||||
|
typedef unsigned short __mmask16;
|
||||||
|
|
||||||
|
#ifdef __OPTIMIZE__
|
||||||
|
extern __inline __m512d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_exp2a23_round_pd (__m512d __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512d) __builtin_ia32_exp2pd_mask ((__v8df) __A,
|
||||||
|
(__v8df) _mm512_undefined_pd (),
|
||||||
|
(__mmask8) -1, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_exp2a23_round_pd (__m512d __W, __mmask8 __U, __m512d __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512d) __builtin_ia32_exp2pd_mask ((__v8df) __A,
|
||||||
|
(__v8df) __W,
|
||||||
|
(__mmask8) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_exp2a23_round_pd (__mmask8 __U, __m512d __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512d) __builtin_ia32_exp2pd_mask ((__v8df) __A,
|
||||||
|
(__v8df) _mm512_setzero_pd (),
|
||||||
|
(__mmask8) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_exp2a23_round_ps (__m512 __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_exp2ps_mask ((__v16sf) __A,
|
||||||
|
(__v16sf) _mm512_undefined_ps (),
|
||||||
|
(__mmask16) -1, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_exp2a23_round_ps (__m512 __W, __mmask16 __U, __m512 __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_exp2ps_mask ((__v16sf) __A,
|
||||||
|
(__v16sf) __W,
|
||||||
|
(__mmask16) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_exp2a23_round_ps (__mmask16 __U, __m512 __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_exp2ps_mask ((__v16sf) __A,
|
||||||
|
(__v16sf) _mm512_setzero_ps (),
|
||||||
|
(__mmask16) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_rcp28_round_pd (__m512d __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512d) __builtin_ia32_rcp28pd_mask ((__v8df) __A,
|
||||||
|
(__v8df) _mm512_undefined_pd (),
|
||||||
|
(__mmask8) -1, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_rcp28_round_pd (__m512d __W, __mmask8 __U, __m512d __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512d) __builtin_ia32_rcp28pd_mask ((__v8df) __A,
|
||||||
|
(__v8df) __W,
|
||||||
|
(__mmask8) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_rcp28_round_pd (__mmask8 __U, __m512d __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512d) __builtin_ia32_rcp28pd_mask ((__v8df) __A,
|
||||||
|
(__v8df) _mm512_setzero_pd (),
|
||||||
|
(__mmask8) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_rcp28_round_ps (__m512 __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_rcp28ps_mask ((__v16sf) __A,
|
||||||
|
(__v16sf) _mm512_undefined_ps (),
|
||||||
|
(__mmask16) -1, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_rcp28_round_ps (__m512 __W, __mmask16 __U, __m512 __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_rcp28ps_mask ((__v16sf) __A,
|
||||||
|
(__v16sf) __W,
|
||||||
|
(__mmask16) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_rcp28_round_ps (__mmask16 __U, __m512 __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_rcp28ps_mask ((__v16sf) __A,
|
||||||
|
(__v16sf) _mm512_setzero_ps (),
|
||||||
|
(__mmask16) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_rcp28_round_sd (__m128d __A, __m128d __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128d) __builtin_ia32_rcp28sd_round ((__v2df) __B,
|
||||||
|
(__v2df) __A,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_rcp28_round_sd (__m128d __W, __mmask8 __U, __m128d __A,
|
||||||
|
__m128d __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128d) __builtin_ia32_rcp28sd_mask_round ((__v2df) __B,
|
||||||
|
(__v2df) __A,
|
||||||
|
(__v2df) __W,
|
||||||
|
__U,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_rcp28_round_sd (__mmask8 __U, __m128d __A, __m128d __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128d) __builtin_ia32_rcp28sd_mask_round ((__v2df) __B,
|
||||||
|
(__v2df) __A,
|
||||||
|
(__v2df)
|
||||||
|
_mm_setzero_pd (),
|
||||||
|
__U,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_rcp28_round_ss (__m128 __A, __m128 __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_rcp28ss_round ((__v4sf) __B,
|
||||||
|
(__v4sf) __A,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_rcp28_round_ss (__m128 __W, __mmask8 __U, __m128 __A,
|
||||||
|
__m128 __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_rcp28ss_mask_round ((__v4sf) __B,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(__v4sf) __W,
|
||||||
|
__U,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_rcp28_round_ss (__mmask8 __U, __m128 __A, __m128 __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_rcp28ss_mask_round ((__v4sf) __B,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(__v4sf)
|
||||||
|
_mm_setzero_ps (),
|
||||||
|
__U,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_rsqrt28_round_pd (__m512d __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512d) __builtin_ia32_rsqrt28pd_mask ((__v8df) __A,
|
||||||
|
(__v8df) _mm512_undefined_pd (),
|
||||||
|
(__mmask8) -1, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_rsqrt28_round_pd (__m512d __W, __mmask8 __U, __m512d __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512d) __builtin_ia32_rsqrt28pd_mask ((__v8df) __A,
|
||||||
|
(__v8df) __W,
|
||||||
|
(__mmask8) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_rsqrt28_round_pd (__mmask8 __U, __m512d __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512d) __builtin_ia32_rsqrt28pd_mask ((__v8df) __A,
|
||||||
|
(__v8df) _mm512_setzero_pd (),
|
||||||
|
(__mmask8) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_rsqrt28_round_ps (__m512 __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_rsqrt28ps_mask ((__v16sf) __A,
|
||||||
|
(__v16sf) _mm512_undefined_ps (),
|
||||||
|
(__mmask16) -1, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_rsqrt28_round_ps (__m512 __W, __mmask16 __U, __m512 __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_rsqrt28ps_mask ((__v16sf) __A,
|
||||||
|
(__v16sf) __W,
|
||||||
|
(__mmask16) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_rsqrt28_round_ps (__mmask16 __U, __m512 __A, int __R)
|
||||||
|
{
|
||||||
|
return (__m512) __builtin_ia32_rsqrt28ps_mask ((__v16sf) __A,
|
||||||
|
(__v16sf) _mm512_setzero_ps (),
|
||||||
|
(__mmask16) __U, __R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_rsqrt28_round_sd (__m128d __A, __m128d __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128d) __builtin_ia32_rsqrt28sd_round ((__v2df) __B,
|
||||||
|
(__v2df) __A,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_rsqrt28_round_sd (__m128d __W, __mmask8 __U, __m128d __A,
|
||||||
|
__m128d __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128d) __builtin_ia32_rsqrt28sd_mask_round ((__v2df) __B,
|
||||||
|
(__v2df) __A,
|
||||||
|
(__v2df) __W,
|
||||||
|
__U,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128d
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_rsqrt28_round_sd (__mmask8 __U, __m128d __A, __m128d __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128d) __builtin_ia32_rsqrt28sd_mask_round ((__v2df) __B,
|
||||||
|
(__v2df) __A,
|
||||||
|
(__v2df)
|
||||||
|
_mm_setzero_pd (),
|
||||||
|
__U,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_rsqrt28_round_ss (__m128 __A, __m128 __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_rsqrt28ss_round ((__v4sf) __B,
|
||||||
|
(__v4sf) __A,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_rsqrt28_round_ss (__m128 __W, __mmask8 __U, __m128 __A,
|
||||||
|
__m128 __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_rsqrt28ss_mask_round ((__v4sf) __B,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(__v4sf) __W,
|
||||||
|
__U,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_rsqrt28_round_ss (__mmask8 __U, __m128 __A, __m128 __B, int __R)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_rsqrt28ss_mask_round ((__v4sf) __B,
|
||||||
|
(__v4sf) __A,
|
||||||
|
(__v4sf)
|
||||||
|
_mm_setzero_ps (),
|
||||||
|
__U,
|
||||||
|
__R);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define _mm512_exp2a23_round_pd(A, C) \
|
||||||
|
__builtin_ia32_exp2pd_mask(A, (__v8df)_mm512_setzero_pd(), -1, C)
|
||||||
|
|
||||||
|
#define _mm512_mask_exp2a23_round_pd(W, U, A, C) \
|
||||||
|
__builtin_ia32_exp2pd_mask(A, W, U, C)
|
||||||
|
|
||||||
|
#define _mm512_maskz_exp2a23_round_pd(U, A, C) \
|
||||||
|
__builtin_ia32_exp2pd_mask(A, (__v8df)_mm512_setzero_pd(), U, C)
|
||||||
|
|
||||||
|
#define _mm512_exp2a23_round_ps(A, C) \
|
||||||
|
__builtin_ia32_exp2ps_mask(A, (__v16sf)_mm512_setzero_ps(), -1, C)
|
||||||
|
|
||||||
|
#define _mm512_mask_exp2a23_round_ps(W, U, A, C) \
|
||||||
|
__builtin_ia32_exp2ps_mask(A, W, U, C)
|
||||||
|
|
||||||
|
#define _mm512_maskz_exp2a23_round_ps(U, A, C) \
|
||||||
|
__builtin_ia32_exp2ps_mask(A, (__v16sf)_mm512_setzero_ps(), U, C)
|
||||||
|
|
||||||
|
#define _mm512_rcp28_round_pd(A, C) \
|
||||||
|
__builtin_ia32_rcp28pd_mask(A, (__v8df)_mm512_setzero_pd(), -1, C)
|
||||||
|
|
||||||
|
#define _mm512_mask_rcp28_round_pd(W, U, A, C) \
|
||||||
|
__builtin_ia32_rcp28pd_mask(A, W, U, C)
|
||||||
|
|
||||||
|
#define _mm512_maskz_rcp28_round_pd(U, A, C) \
|
||||||
|
__builtin_ia32_rcp28pd_mask(A, (__v8df)_mm512_setzero_pd(), U, C)
|
||||||
|
|
||||||
|
#define _mm512_rcp28_round_ps(A, C) \
|
||||||
|
__builtin_ia32_rcp28ps_mask(A, (__v16sf)_mm512_setzero_ps(), -1, C)
|
||||||
|
|
||||||
|
#define _mm512_mask_rcp28_round_ps(W, U, A, C) \
|
||||||
|
__builtin_ia32_rcp28ps_mask(A, W, U, C)
|
||||||
|
|
||||||
|
#define _mm512_maskz_rcp28_round_ps(U, A, C) \
|
||||||
|
__builtin_ia32_rcp28ps_mask(A, (__v16sf)_mm512_setzero_ps(), U, C)
|
||||||
|
|
||||||
|
#define _mm512_rsqrt28_round_pd(A, C) \
|
||||||
|
__builtin_ia32_rsqrt28pd_mask(A, (__v8df)_mm512_setzero_pd(), -1, C)
|
||||||
|
|
||||||
|
#define _mm512_mask_rsqrt28_round_pd(W, U, A, C) \
|
||||||
|
__builtin_ia32_rsqrt28pd_mask(A, W, U, C)
|
||||||
|
|
||||||
|
#define _mm512_maskz_rsqrt28_round_pd(U, A, C) \
|
||||||
|
__builtin_ia32_rsqrt28pd_mask(A, (__v8df)_mm512_setzero_pd(), U, C)
|
||||||
|
|
||||||
|
#define _mm512_rsqrt28_round_ps(A, C) \
|
||||||
|
__builtin_ia32_rsqrt28ps_mask(A, (__v16sf)_mm512_setzero_ps(), -1, C)
|
||||||
|
|
||||||
|
#define _mm512_mask_rsqrt28_round_ps(W, U, A, C) \
|
||||||
|
__builtin_ia32_rsqrt28ps_mask(A, W, U, C)
|
||||||
|
|
||||||
|
#define _mm512_maskz_rsqrt28_round_ps(U, A, C) \
|
||||||
|
__builtin_ia32_rsqrt28ps_mask(A, (__v16sf)_mm512_setzero_ps(), U, C)
|
||||||
|
|
||||||
|
#define _mm_rcp28_round_sd(A, B, R) \
|
||||||
|
__builtin_ia32_rcp28sd_round(A, B, R)
|
||||||
|
|
||||||
|
#define _mm_mask_rcp28_round_sd(W, U, A, B, R) \
|
||||||
|
__builtin_ia32_rcp28sd_mask_round ((A), (B), (W), (U), (R))
|
||||||
|
|
||||||
|
#define _mm_maskz_rcp28_round_sd(U, A, B, R) \
|
||||||
|
__builtin_ia32_rcp28sd_mask_round ((A), (B), (__v2df) _mm_setzero_pd (), \
|
||||||
|
(U), (R))
|
||||||
|
|
||||||
|
#define _mm_rcp28_round_ss(A, B, R) \
|
||||||
|
__builtin_ia32_rcp28ss_round(A, B, R)
|
||||||
|
|
||||||
|
#define _mm_mask_rcp28_round_ss(W, U, A, B, R) \
|
||||||
|
__builtin_ia32_rcp28ss_mask_round ((A), (B), (W), (U), (R))
|
||||||
|
|
||||||
|
#define _mm_maskz_rcp28_round_ss(U, A, B, R) \
|
||||||
|
__builtin_ia32_rcp28ss_mask_round ((A), (B), (__v4sf) _mm_setzero_ps (), \
|
||||||
|
(U), (R))
|
||||||
|
|
||||||
|
#define _mm_rsqrt28_round_sd(A, B, R) \
|
||||||
|
__builtin_ia32_rsqrt28sd_round(A, B, R)
|
||||||
|
|
||||||
|
#define _mm_mask_rsqrt28_round_sd(W, U, A, B, R) \
|
||||||
|
__builtin_ia32_rsqrt28sd_mask_round ((A), (B), (W), (U), (R))
|
||||||
|
|
||||||
|
#define _mm_maskz_rsqrt28_round_sd(U, A, B, R) \
|
||||||
|
__builtin_ia32_rsqrt28sd_mask_round ((A), (B), (__v2df) _mm_setzero_pd (),\
|
||||||
|
(U), (R))
|
||||||
|
|
||||||
|
#define _mm_rsqrt28_round_ss(A, B, R) \
|
||||||
|
__builtin_ia32_rsqrt28ss_round(A, B, R)
|
||||||
|
|
||||||
|
#define _mm_mask_rsqrt28_round_ss(W, U, A, B, R) \
|
||||||
|
__builtin_ia32_rsqrt28ss_mask_round ((A), (B), (W), (U), (R))
|
||||||
|
|
||||||
|
#define _mm_maskz_rsqrt28_round_ss(U, A, B, R) \
|
||||||
|
__builtin_ia32_rsqrt28ss_mask_round ((A), (B), (__v4sf) _mm_setzero_ps (),\
|
||||||
|
(U), (R))
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _mm_mask_rcp28_sd(W, U, A, B)\
|
||||||
|
_mm_mask_rcp28_round_sd ((W), (U), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm_maskz_rcp28_sd(U, A, B)\
|
||||||
|
_mm_maskz_rcp28_round_sd ((U), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm_mask_rcp28_ss(W, U, A, B)\
|
||||||
|
_mm_mask_rcp28_round_ss ((W), (U), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm_maskz_rcp28_ss(U, A, B)\
|
||||||
|
_mm_maskz_rcp28_round_ss ((U), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm_mask_rsqrt28_sd(W, U, A, B)\
|
||||||
|
_mm_mask_rsqrt28_round_sd ((W), (U), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm_maskz_rsqrt28_sd(U, A, B)\
|
||||||
|
_mm_maskz_rsqrt28_round_sd ((U), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm_mask_rsqrt28_ss(W, U, A, B)\
|
||||||
|
_mm_mask_rsqrt28_round_ss ((W), (U), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm_maskz_rsqrt28_ss(U, A, B)\
|
||||||
|
_mm_maskz_rsqrt28_round_ss ((U), (A), (B), _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_exp2a23_pd(A) \
|
||||||
|
_mm512_exp2a23_round_pd(A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_mask_exp2a23_pd(W, U, A) \
|
||||||
|
_mm512_mask_exp2a23_round_pd(W, U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_maskz_exp2a23_pd(U, A) \
|
||||||
|
_mm512_maskz_exp2a23_round_pd(U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_exp2a23_ps(A) \
|
||||||
|
_mm512_exp2a23_round_ps(A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_mask_exp2a23_ps(W, U, A) \
|
||||||
|
_mm512_mask_exp2a23_round_ps(W, U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_maskz_exp2a23_ps(U, A) \
|
||||||
|
_mm512_maskz_exp2a23_round_ps(U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_rcp28_pd(A) \
|
||||||
|
_mm512_rcp28_round_pd(A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_mask_rcp28_pd(W, U, A) \
|
||||||
|
_mm512_mask_rcp28_round_pd(W, U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_maskz_rcp28_pd(U, A) \
|
||||||
|
_mm512_maskz_rcp28_round_pd(U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_rcp28_ps(A) \
|
||||||
|
_mm512_rcp28_round_ps(A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_mask_rcp28_ps(W, U, A) \
|
||||||
|
_mm512_mask_rcp28_round_ps(W, U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_maskz_rcp28_ps(U, A) \
|
||||||
|
_mm512_maskz_rcp28_round_ps(U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_rsqrt28_pd(A) \
|
||||||
|
_mm512_rsqrt28_round_pd(A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_mask_rsqrt28_pd(W, U, A) \
|
||||||
|
_mm512_mask_rsqrt28_round_pd(W, U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_maskz_rsqrt28_pd(U, A) \
|
||||||
|
_mm512_maskz_rsqrt28_round_pd(U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_rsqrt28_ps(A) \
|
||||||
|
_mm512_rsqrt28_round_ps(A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_mask_rsqrt28_ps(W, U, A) \
|
||||||
|
_mm512_mask_rsqrt28_round_ps(W, U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm512_maskz_rsqrt28_ps(U, A) \
|
||||||
|
_mm512_maskz_rsqrt28_round_ps(U, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm_rcp28_sd(A, B) \
|
||||||
|
__builtin_ia32_rcp28sd_round(B, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm_rcp28_ss(A, B) \
|
||||||
|
__builtin_ia32_rcp28ss_round(B, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm_rsqrt28_sd(A, B) \
|
||||||
|
__builtin_ia32_rsqrt28sd_round(B, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#define _mm_rsqrt28_ss(A, B) \
|
||||||
|
__builtin_ia32_rsqrt28ss_round(B, A, _MM_FROUND_CUR_DIRECTION)
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512ER__
|
||||||
|
#undef __DISABLE_AVX512ER__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512ER__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512ERINTRIN_H_INCLUDED */
|
||||||
+16483
File diff suppressed because it is too large
Load Diff
+7219
File diff suppressed because it is too large
Load Diff
+3362
File diff suppressed because it is too large
Load Diff
+104
@@ -0,0 +1,104 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512ifmaintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512IFMAINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512IFMAINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVX512IFMA__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512ifma")
|
||||||
|
#define __DISABLE_AVX512IFMA__
|
||||||
|
#endif /* __AVX512IFMA__ */
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_madd52lo_epu64 (__m512i __X, __m512i __Y, __m512i __Z)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpmadd52luq512_mask ((__v8di) __X,
|
||||||
|
(__v8di) __Y,
|
||||||
|
(__v8di) __Z,
|
||||||
|
(__mmask8) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_madd52hi_epu64 (__m512i __X, __m512i __Y, __m512i __Z)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpmadd52huq512_mask ((__v8di) __X,
|
||||||
|
(__v8di) __Y,
|
||||||
|
(__v8di) __Z,
|
||||||
|
(__mmask8) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_madd52lo_epu64 (__m512i __W, __mmask8 __M, __m512i __X,
|
||||||
|
__m512i __Y)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpmadd52luq512_mask ((__v8di) __W,
|
||||||
|
(__v8di) __X,
|
||||||
|
(__v8di) __Y,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_madd52hi_epu64 (__m512i __W, __mmask8 __M, __m512i __X,
|
||||||
|
__m512i __Y)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpmadd52huq512_mask ((__v8di) __W,
|
||||||
|
(__v8di) __X,
|
||||||
|
(__v8di) __Y,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_madd52lo_epu64 (__mmask8 __M, __m512i __X, __m512i __Y, __m512i __Z)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpmadd52luq512_maskz ((__v8di) __X,
|
||||||
|
(__v8di) __Y,
|
||||||
|
(__v8di) __Z,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_madd52hi_epu64 (__mmask8 __M, __m512i __X, __m512i __Y, __m512i __Z)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpmadd52huq512_maskz ((__v8di) __X,
|
||||||
|
(__v8di) __Y,
|
||||||
|
(__v8di) __Z,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512IFMA__
|
||||||
|
#undef __DISABLE_AVX512IFMA__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512IFMA__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512IFMAINTRIN_H_INCLUDED */
|
||||||
+145
@@ -0,0 +1,145 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512ifmavlintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512IFMAVLINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512IFMAVLINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AVX512VL__) || !defined(__AVX512IFMA__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512ifma,avx512vl")
|
||||||
|
#define __DISABLE_AVX512IFMAVL__
|
||||||
|
#endif /* __AVX512IFMAVL__ */
|
||||||
|
|
||||||
|
#define _mm_madd52lo_epu64(A, B, C) \
|
||||||
|
((__m128i) __builtin_ia32_vpmadd52luq128 ((__v2di) (A), \
|
||||||
|
(__v2di) (B), \
|
||||||
|
(__v2di) (C)))
|
||||||
|
|
||||||
|
#define _mm_madd52hi_epu64(A, B, C) \
|
||||||
|
((__m128i) __builtin_ia32_vpmadd52huq128 ((__v2di) (A), \
|
||||||
|
(__v2di) (B), \
|
||||||
|
(__v2di) (C)))
|
||||||
|
|
||||||
|
#define _mm256_madd52lo_epu64(A, B, C) \
|
||||||
|
((__m256i) __builtin_ia32_vpmadd52luq256 ((__v4di) (A), \
|
||||||
|
(__v4di) (B), \
|
||||||
|
(__v4di) (C)))
|
||||||
|
|
||||||
|
|
||||||
|
#define _mm256_madd52hi_epu64(A, B, C) \
|
||||||
|
((__m256i) __builtin_ia32_vpmadd52huq256 ((__v4di) (A), \
|
||||||
|
(__v4di) (B), \
|
||||||
|
(__v4di) (C)))
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_madd52lo_epu64 (__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpmadd52luq128_mask ((__v2di) __W,
|
||||||
|
(__v2di) __X,
|
||||||
|
(__v2di) __Y,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_madd52hi_epu64 (__m128i __W, __mmask8 __M, __m128i __X, __m128i __Y)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpmadd52huq128_mask ((__v2di) __W,
|
||||||
|
(__v2di) __X,
|
||||||
|
(__v2di) __Y,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_madd52lo_epu64 (__m256i __W, __mmask8 __M, __m256i __X,
|
||||||
|
__m256i __Y)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpmadd52luq256_mask ((__v4di) __W,
|
||||||
|
(__v4di) __X,
|
||||||
|
(__v4di) __Y,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_madd52hi_epu64 (__m256i __W, __mmask8 __M, __m256i __X,
|
||||||
|
__m256i __Y)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpmadd52huq256_mask ((__v4di) __W,
|
||||||
|
(__v4di) __X,
|
||||||
|
(__v4di) __Y,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_madd52lo_epu64 (__mmask8 __M, __m128i __X, __m128i __Y, __m128i __Z)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpmadd52luq128_maskz ((__v2di) __X,
|
||||||
|
(__v2di) __Y,
|
||||||
|
(__v2di) __Z,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_madd52hi_epu64 (__mmask8 __M, __m128i __X, __m128i __Y, __m128i __Z)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpmadd52huq128_maskz ((__v2di) __X,
|
||||||
|
(__v2di) __Y,
|
||||||
|
(__v2di) __Z,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_madd52lo_epu64 (__mmask8 __M, __m256i __X, __m256i __Y, __m256i __Z)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpmadd52luq256_maskz ((__v4di) __X,
|
||||||
|
(__v4di) __Y,
|
||||||
|
(__v4di) __Z,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_madd52hi_epu64 (__mmask8 __M, __m256i __X, __m256i __Y, __m256i __Z)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpmadd52huq256_maskz ((__v4di) __X,
|
||||||
|
(__v4di) __Y,
|
||||||
|
(__v4di) __Z,
|
||||||
|
(__mmask8) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512IFMAVL__
|
||||||
|
#undef __DISABLE_AVX512IFMAVL__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512IFMAVL__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512IFMAVLINTRIN_H_INCLUDED */
|
||||||
+269
@@ -0,0 +1,269 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512pfintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512PFINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512PFINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVX512PF__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512pf")
|
||||||
|
#define __DISABLE_AVX512PF__
|
||||||
|
#endif /* __AVX512PF__ */
|
||||||
|
|
||||||
|
/* Internal data types for implementing the intrinsics. */
|
||||||
|
typedef long long __v8di __attribute__ ((__vector_size__ (64)));
|
||||||
|
typedef int __v16si __attribute__ ((__vector_size__ (64)));
|
||||||
|
|
||||||
|
/* The Intel API is flexible enough that we must allow aliasing with other
|
||||||
|
vector types, and their scalar components. */
|
||||||
|
typedef long long __m512i __attribute__ ((__vector_size__ (64), __may_alias__));
|
||||||
|
|
||||||
|
typedef unsigned char __mmask8;
|
||||||
|
typedef unsigned short __mmask16;
|
||||||
|
|
||||||
|
#ifdef __OPTIMIZE__
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_prefetch_i32gather_pd (__m256i __index, void const *__addr,
|
||||||
|
int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_gatherpfdpd ((__mmask8) 0xFF, (__v8si) __index, __addr,
|
||||||
|
__scale, __hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_prefetch_i32gather_ps (__m512i __index, void const *__addr,
|
||||||
|
int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_gatherpfdps ((__mmask16) 0xFFFF, (__v16si) __index, __addr,
|
||||||
|
__scale, __hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_prefetch_i32gather_pd (__m256i __index, __mmask8 __mask,
|
||||||
|
void const *__addr, int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_gatherpfdpd (__mask, (__v8si) __index, __addr, __scale,
|
||||||
|
__hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_prefetch_i32gather_ps (__m512i __index, __mmask16 __mask,
|
||||||
|
void const *__addr, int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_gatherpfdps (__mask, (__v16si) __index, __addr, __scale,
|
||||||
|
__hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_prefetch_i64gather_pd (__m512i __index, void const *__addr,
|
||||||
|
int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_gatherpfqpd ((__mmask8) 0xFF, (__v8di) __index, __addr,
|
||||||
|
__scale, __hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_prefetch_i64gather_ps (__m512i __index, void const *__addr,
|
||||||
|
int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_gatherpfqps ((__mmask8) 0xFF, (__v8di) __index, __addr,
|
||||||
|
__scale, __hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_prefetch_i64gather_pd (__m512i __index, __mmask8 __mask,
|
||||||
|
void const *__addr, int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_gatherpfqpd (__mask, (__v8di) __index, __addr, __scale,
|
||||||
|
__hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_prefetch_i64gather_ps (__m512i __index, __mmask8 __mask,
|
||||||
|
void const *__addr, int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_gatherpfqps (__mask, (__v8di) __index, __addr, __scale,
|
||||||
|
__hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_prefetch_i32scatter_pd (void *__addr, __m256i __index, int __scale,
|
||||||
|
int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_scatterpfdpd ((__mmask8) 0xFF, (__v8si) __index, __addr,
|
||||||
|
__scale, __hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_prefetch_i32scatter_ps (void *__addr, __m512i __index, int __scale,
|
||||||
|
int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_scatterpfdps ((__mmask16) 0xFFFF, (__v16si) __index, __addr,
|
||||||
|
__scale, __hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_prefetch_i32scatter_pd (void *__addr, __mmask8 __mask,
|
||||||
|
__m256i __index, int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_scatterpfdpd (__mask, (__v8si) __index, __addr, __scale,
|
||||||
|
__hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_prefetch_i32scatter_ps (void *__addr, __mmask16 __mask,
|
||||||
|
__m512i __index, int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_scatterpfdps (__mask, (__v16si) __index, __addr, __scale,
|
||||||
|
__hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_prefetch_i64scatter_pd (void *__addr, __m512i __index, int __scale,
|
||||||
|
int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_scatterpfqpd ((__mmask8) 0xFF, (__v8di) __index,__addr,
|
||||||
|
__scale, __hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_prefetch_i64scatter_ps (void *__addr, __m512i __index, int __scale,
|
||||||
|
int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_scatterpfqps ((__mmask8) 0xFF, (__v8di) __index, __addr,
|
||||||
|
__scale, __hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_prefetch_i64scatter_pd (void *__addr, __mmask8 __mask,
|
||||||
|
__m512i __index, int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_scatterpfqpd (__mask, (__v8di) __index, __addr, __scale,
|
||||||
|
__hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_prefetch_i64scatter_ps (void *__addr, __mmask8 __mask,
|
||||||
|
__m512i __index, int __scale, int __hint)
|
||||||
|
{
|
||||||
|
__builtin_ia32_scatterpfqps (__mask, (__v8di) __index, __addr, __scale,
|
||||||
|
__hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define _mm512_prefetch_i32gather_pd(INDEX, ADDR, SCALE, HINT) \
|
||||||
|
__builtin_ia32_gatherpfdpd ((__mmask8)0xFF, (__v8si)(__m256i) (INDEX), \
|
||||||
|
(void const *) (ADDR), (int) (SCALE), \
|
||||||
|
(int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_prefetch_i32gather_ps(INDEX, ADDR, SCALE, HINT) \
|
||||||
|
__builtin_ia32_gatherpfdps ((__mmask16)0xFFFF, (__v16si)(__m512i) (INDEX), \
|
||||||
|
(void const *) (ADDR), (int) (SCALE), \
|
||||||
|
(int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_mask_prefetch_i32gather_pd(INDEX, MASK, ADDR, SCALE, HINT) \
|
||||||
|
__builtin_ia32_gatherpfdpd ((__mmask8) (MASK), (__v8si)(__m256i) (INDEX), \
|
||||||
|
(void const *) (ADDR), (int) (SCALE), \
|
||||||
|
(int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_mask_prefetch_i32gather_ps(INDEX, MASK, ADDR, SCALE, HINT) \
|
||||||
|
__builtin_ia32_gatherpfdps ((__mmask16) (MASK), (__v16si)(__m512i) (INDEX),\
|
||||||
|
(void const *) (ADDR), (int) (SCALE), \
|
||||||
|
(int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_prefetch_i64gather_pd(INDEX, ADDR, SCALE, HINT) \
|
||||||
|
__builtin_ia32_gatherpfqpd ((__mmask8)0xFF, (__v8di)(__m512i) (INDEX), \
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_prefetch_i64gather_ps(INDEX, ADDR, SCALE, HINT) \
|
||||||
|
__builtin_ia32_gatherpfqps ((__mmask8)0xFF, (__v8di)(__m512i) (INDEX), \
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_mask_prefetch_i64gather_pd(INDEX, MASK, ADDR, SCALE, HINT) \
|
||||||
|
__builtin_ia32_gatherpfqpd ((__mmask8) (MASK), (__v8di)(__m512i) (INDEX), \
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_mask_prefetch_i64gather_ps(INDEX, MASK, ADDR, SCALE, HINT) \
|
||||||
|
__builtin_ia32_gatherpfqps ((__mmask8) (MASK), (__v8di)(__m512i) (INDEX), \
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_prefetch_i32scatter_pd(ADDR, INDEX, SCALE, HINT) \
|
||||||
|
__builtin_ia32_scatterpfdpd ((__mmask8)0xFF, (__v8si)(__m256i) (INDEX), \
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_prefetch_i32scatter_ps(ADDR, INDEX, SCALE, HINT) \
|
||||||
|
__builtin_ia32_scatterpfdps ((__mmask16)0xFFFF, (__v16si)(__m512i) (INDEX),\
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_mask_prefetch_i32scatter_pd(ADDR, MASK, INDEX, SCALE, HINT) \
|
||||||
|
__builtin_ia32_scatterpfdpd ((__mmask8) (MASK), (__v8si)(__m256i) (INDEX), \
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_mask_prefetch_i32scatter_ps(ADDR, MASK, INDEX, SCALE, HINT) \
|
||||||
|
__builtin_ia32_scatterpfdps ((__mmask16) (MASK), \
|
||||||
|
(__v16si)(__m512i) (INDEX), \
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_prefetch_i64scatter_pd(ADDR, INDEX, SCALE, HINT) \
|
||||||
|
__builtin_ia32_scatterpfqpd ((__mmask8)0xFF, (__v8di)(__m512i) (INDEX), \
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_prefetch_i64scatter_ps(ADDR, INDEX, SCALE, HINT) \
|
||||||
|
__builtin_ia32_scatterpfqps ((__mmask8)0xFF, (__v8di)(__m512i) (INDEX), \
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_mask_prefetch_i64scatter_pd(ADDR, MASK, INDEX, SCALE, HINT) \
|
||||||
|
__builtin_ia32_scatterpfqpd ((__mmask8) (MASK), (__v8di)(__m512i) (INDEX), \
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
|
||||||
|
#define _mm512_mask_prefetch_i64scatter_ps(ADDR, MASK, INDEX, SCALE, HINT) \
|
||||||
|
__builtin_ia32_scatterpfqps ((__mmask8) (MASK), (__v8di)(__m512i) (INDEX), \
|
||||||
|
(void *) (ADDR), (int) (SCALE), (int) (HINT))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512PF__
|
||||||
|
#undef __DISABLE_AVX512PF__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512PF__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512PFINTRIN_H_INCLUDED */
|
||||||
+557
@@ -0,0 +1,557 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512vbmi2intrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __AVX512VBMI2INTRIN_H_INCLUDED
|
||||||
|
#define __AVX512VBMI2INTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AVX512VBMI2__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512vbmi2")
|
||||||
|
#define __DISABLE_AVX512VBMI2__
|
||||||
|
#endif /* __AVX512VBMI2__ */
|
||||||
|
|
||||||
|
#ifdef __OPTIMIZE__
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shrdi_epi16 (__m512i __A, __m512i __B, int __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshrd_v32hi ((__v32hi)__A, (__v32hi) __B,
|
||||||
|
__C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shrdi_epi32 (__m512i __A, __m512i __B, int __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshrd_v16si ((__v16si)__A, (__v16si) __B,
|
||||||
|
__C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shrdi_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D,
|
||||||
|
int __E)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrd_v16si_mask ((__v16si)__C,
|
||||||
|
(__v16si) __D, __E, (__v16si) __A, (__mmask16)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shrdi_epi32 (__mmask16 __A, __m512i __B, __m512i __C, int __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrd_v16si_mask ((__v16si)__B,
|
||||||
|
(__v16si) __C, __D, (__v16si) _mm512_setzero_si512 (), (__mmask16)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shrdi_epi64 (__m512i __A, __m512i __B, int __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshrd_v8di ((__v8di)__A, (__v8di) __B, __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shrdi_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D,
|
||||||
|
int __E)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrd_v8di_mask ((__v8di)__C, (__v8di) __D,
|
||||||
|
__E, (__v8di) __A, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shrdi_epi64 (__mmask8 __A, __m512i __B, __m512i __C, int __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrd_v8di_mask ((__v8di)__B, (__v8di) __C,
|
||||||
|
__D, (__v8di) _mm512_setzero_si512 (), (__mmask8)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shldi_epi16 (__m512i __A, __m512i __B, int __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshld_v32hi ((__v32hi)__A, (__v32hi) __B,
|
||||||
|
__C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shldi_epi32 (__m512i __A, __m512i __B, int __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshld_v16si ((__v16si)__A, (__v16si) __B,
|
||||||
|
__C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shldi_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D,
|
||||||
|
int __E)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshld_v16si_mask ((__v16si)__C,
|
||||||
|
(__v16si) __D, __E, (__v16si) __A, (__mmask16)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shldi_epi32 (__mmask16 __A, __m512i __B, __m512i __C, int __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshld_v16si_mask ((__v16si)__B,
|
||||||
|
(__v16si) __C, __D, (__v16si) _mm512_setzero_si512 (), (__mmask16)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shldi_epi64 (__m512i __A, __m512i __B, int __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshld_v8di ((__v8di)__A, (__v8di) __B, __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shldi_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D,
|
||||||
|
int __E)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshld_v8di_mask ((__v8di)__C, (__v8di) __D,
|
||||||
|
__E, (__v8di) __A, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shldi_epi64 (__mmask8 __A, __m512i __B, __m512i __C, int __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshld_v8di_mask ((__v8di)__B, (__v8di) __C,
|
||||||
|
__D, (__v8di) _mm512_setzero_si512 (), (__mmask8)__A);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define _mm512_shrdi_epi16(A, B, C) \
|
||||||
|
((__m512i) __builtin_ia32_vpshrd_v32hi ((__v32hi)(__m512i)(A), \
|
||||||
|
(__v32hi)(__m512i)(B),(int)(C)))
|
||||||
|
#define _mm512_shrdi_epi32(A, B, C) \
|
||||||
|
((__m512i) __builtin_ia32_vpshrd_v16si ((__v16si)(__m512i)(A), \
|
||||||
|
(__v16si)(__m512i)(B),(int)(C)))
|
||||||
|
#define _mm512_mask_shrdi_epi32(A, B, C, D, E) \
|
||||||
|
((__m512i) __builtin_ia32_vpshrd_v16si_mask ((__v16si)(__m512i)(C), \
|
||||||
|
(__v16si)(__m512i)(D), \
|
||||||
|
(int)(E), \
|
||||||
|
(__v16si)(__m512i)(A), \
|
||||||
|
(__mmask16)(B)))
|
||||||
|
#define _mm512_maskz_shrdi_epi32(A, B, C, D) \
|
||||||
|
((__m512i) \
|
||||||
|
__builtin_ia32_vpshrd_v16si_mask ((__v16si)(__m512i)(B), \
|
||||||
|
(__v16si)(__m512i)(C),(int)(D), \
|
||||||
|
(__v16si)(__m512i)_mm512_setzero_si512 (), \
|
||||||
|
(__mmask16)(A)))
|
||||||
|
#define _mm512_shrdi_epi64(A, B, C) \
|
||||||
|
((__m512i) __builtin_ia32_vpshrd_v8di ((__v8di)(__m512i)(A), \
|
||||||
|
(__v8di)(__m512i)(B),(int)(C)))
|
||||||
|
#define _mm512_mask_shrdi_epi64(A, B, C, D, E) \
|
||||||
|
((__m512i) __builtin_ia32_vpshrd_v8di_mask ((__v8di)(__m512i)(C), \
|
||||||
|
(__v8di)(__m512i)(D), (int)(E), \
|
||||||
|
(__v8di)(__m512i)(A), \
|
||||||
|
(__mmask8)(B)))
|
||||||
|
#define _mm512_maskz_shrdi_epi64(A, B, C, D) \
|
||||||
|
((__m512i) \
|
||||||
|
__builtin_ia32_vpshrd_v8di_mask ((__v8di)(__m512i)(B), \
|
||||||
|
(__v8di)(__m512i)(C),(int)(D), \
|
||||||
|
(__v8di)(__m512i)_mm512_setzero_si512 (), \
|
||||||
|
(__mmask8)(A)))
|
||||||
|
#define _mm512_shldi_epi16(A, B, C) \
|
||||||
|
((__m512i) __builtin_ia32_vpshld_v32hi ((__v32hi)(__m512i)(A), \
|
||||||
|
(__v32hi)(__m512i)(B),(int)(C)))
|
||||||
|
#define _mm512_shldi_epi32(A, B, C) \
|
||||||
|
((__m512i) __builtin_ia32_vpshld_v16si ((__v16si)(__m512i)(A), \
|
||||||
|
(__v16si)(__m512i)(B),(int)(C)))
|
||||||
|
#define _mm512_mask_shldi_epi32(A, B, C, D, E) \
|
||||||
|
((__m512i) __builtin_ia32_vpshld_v16si_mask ((__v16si)(__m512i)(C), \
|
||||||
|
(__v16si)(__m512i)(D), \
|
||||||
|
(int)(E), \
|
||||||
|
(__v16si)(__m512i)(A), \
|
||||||
|
(__mmask16)(B)))
|
||||||
|
#define _mm512_maskz_shldi_epi32(A, B, C, D) \
|
||||||
|
((__m512i) \
|
||||||
|
__builtin_ia32_vpshld_v16si_mask ((__v16si)(__m512i)(B), \
|
||||||
|
(__v16si)(__m512i)(C),(int)(D), \
|
||||||
|
(__v16si)(__m512i)_mm512_setzero_si512 (), \
|
||||||
|
(__mmask16)(A)))
|
||||||
|
#define _mm512_shldi_epi64(A, B, C) \
|
||||||
|
((__m512i) __builtin_ia32_vpshld_v8di ((__v8di)(__m512i)(A), \
|
||||||
|
(__v8di)(__m512i)(B), (int)(C)))
|
||||||
|
#define _mm512_mask_shldi_epi64(A, B, C, D, E) \
|
||||||
|
((__m512i) __builtin_ia32_vpshld_v8di_mask ((__v8di)(__m512i)(C), \
|
||||||
|
(__v8di)(__m512i)(D), (int)(E), \
|
||||||
|
(__v8di)(__m512i)(A), \
|
||||||
|
(__mmask8)(B)))
|
||||||
|
#define _mm512_maskz_shldi_epi64(A, B, C, D) \
|
||||||
|
((__m512i) \
|
||||||
|
__builtin_ia32_vpshld_v8di_mask ((__v8di)(__m512i)(B), \
|
||||||
|
(__v8di)(__m512i)(C),(int)(D), \
|
||||||
|
(__v8di)(__m512i)_mm512_setzero_si512 (), \
|
||||||
|
(__mmask8)(A)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shrdv_epi16 (__m512i __A, __m512i __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshrdv_v32hi ((__v32hi)__A, (__v32hi) __B,
|
||||||
|
(__v32hi) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shrdv_epi32 (__m512i __A, __m512i __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshrdv_v16si ((__v16si)__A, (__v16si) __B,
|
||||||
|
(__v16si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shrdv_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrdv_v16si_mask ((__v16si)__A,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shrdv_epi32 (__mmask16 __A, __m512i __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrdv_v16si_maskz ((__v16si)__B,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shrdv_epi64 (__m512i __A, __m512i __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshrdv_v8di ((__v8di)__A, (__v8di) __B,
|
||||||
|
(__v8di) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shrdv_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrdv_v8di_mask ((__v8di)__A, (__v8di) __C,
|
||||||
|
(__v8di) __D, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shrdv_epi64 (__mmask8 __A, __m512i __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrdv_v8di_maskz ((__v8di)__B, (__v8di) __C,
|
||||||
|
(__v8di) __D, (__mmask8)__A);
|
||||||
|
}
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shldv_epi16 (__m512i __A, __m512i __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshldv_v32hi ((__v32hi)__A, (__v32hi) __B,
|
||||||
|
(__v32hi) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shldv_epi32 (__m512i __A, __m512i __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshldv_v16si ((__v16si)__A, (__v16si) __B,
|
||||||
|
(__v16si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shldv_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshldv_v16si_mask ((__v16si)__A,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shldv_epi32 (__mmask16 __A, __m512i __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshldv_v16si_maskz ((__v16si)__B,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_shldv_epi64 (__m512i __A, __m512i __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpshldv_v8di ((__v8di)__A, (__v8di) __B,
|
||||||
|
(__v8di) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shldv_epi64 (__m512i __A, __mmask8 __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshldv_v8di_mask ((__v8di)__A, (__v8di) __C,
|
||||||
|
(__v8di) __D, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shldv_epi64 (__mmask8 __A, __m512i __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshldv_v8di_maskz ((__v8di)__B, (__v8di) __C,
|
||||||
|
(__v8di) __D, (__mmask8)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512VBMI2__
|
||||||
|
#undef __DISABLE_AVX512VBMI2__
|
||||||
|
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512VBMI2__ */
|
||||||
|
|
||||||
|
#if !defined(__AVX512VBMI2__) || !defined(__AVX512BW__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512vbmi2,avx512bw")
|
||||||
|
#define __DISABLE_AVX512VBMI2BW__
|
||||||
|
#endif /* __AVX512VBMI2BW__ */
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_compress_epi8 (__m512i __A, __mmask64 __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_compressqi512_mask ((__v64qi)__C,
|
||||||
|
(__v64qi)__A, (__mmask64)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_compress_epi8 (__mmask64 __A, __m512i __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_compressqi512_mask ((__v64qi)__B,
|
||||||
|
(__v64qi)_mm512_setzero_si512 (), (__mmask64)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_compressstoreu_epi8 (void * __A, __mmask64 __B, __m512i __C)
|
||||||
|
{
|
||||||
|
__builtin_ia32_compressstoreuqi512_mask ((__v64qi *) __A, (__v64qi) __C,
|
||||||
|
(__mmask64) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_compress_epi16 (__m512i __A, __mmask32 __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_compresshi512_mask ((__v32hi)__C,
|
||||||
|
(__v32hi)__A, (__mmask32)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_compress_epi16 (__mmask32 __A, __m512i __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_compresshi512_mask ((__v32hi)__B,
|
||||||
|
(__v32hi)_mm512_setzero_si512 (), (__mmask32)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_compressstoreu_epi16 (void * __A, __mmask32 __B, __m512i __C)
|
||||||
|
{
|
||||||
|
__builtin_ia32_compressstoreuhi512_mask ((__v32hi *) __A, (__v32hi) __C,
|
||||||
|
(__mmask32) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_expand_epi8 (__m512i __A, __mmask64 __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_expandqi512_mask ((__v64qi) __C,
|
||||||
|
(__v64qi) __A,
|
||||||
|
(__mmask64) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_expand_epi8 (__mmask64 __A, __m512i __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_expandqi512_maskz ((__v64qi) __B,
|
||||||
|
(__v64qi) _mm512_setzero_si512 (), (__mmask64) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_expandloadu_epi8 (__m512i __A, __mmask64 __B, const void * __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_expandloadqi512_mask ((const __v64qi *) __C,
|
||||||
|
(__v64qi) __A, (__mmask64) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_expandloadu_epi8 (__mmask64 __A, const void * __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_expandloadqi512_maskz ((const __v64qi *) __B,
|
||||||
|
(__v64qi) _mm512_setzero_si512 (), (__mmask64) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_expand_epi16 (__m512i __A, __mmask32 __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_expandhi512_mask ((__v32hi) __C,
|
||||||
|
(__v32hi) __A,
|
||||||
|
(__mmask32) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_expand_epi16 (__mmask32 __A, __m512i __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_expandhi512_maskz ((__v32hi) __B,
|
||||||
|
(__v32hi) _mm512_setzero_si512 (), (__mmask32) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_expandloadu_epi16 (__m512i __A, __mmask32 __B, const void * __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_expandloadhi512_mask ((const __v32hi *) __C,
|
||||||
|
(__v32hi) __A, (__mmask32) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_expandloadu_epi16 (__mmask32 __A, const void * __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_expandloadhi512_maskz ((const __v32hi *) __B,
|
||||||
|
(__v32hi) _mm512_setzero_si512 (), (__mmask32) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __OPTIMIZE__
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shrdi_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D,
|
||||||
|
int __E)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrd_v32hi_mask ((__v32hi)__C,
|
||||||
|
(__v32hi) __D, __E, (__v32hi) __A, (__mmask32)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shrdi_epi16 (__mmask32 __A, __m512i __B, __m512i __C, int __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrd_v32hi_mask ((__v32hi)__B,
|
||||||
|
(__v32hi) __C, __D, (__v32hi) _mm512_setzero_si512 (), (__mmask32)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shldi_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D,
|
||||||
|
int __E)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshld_v32hi_mask ((__v32hi)__C,
|
||||||
|
(__v32hi) __D, __E, (__v32hi) __A, (__mmask32)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shldi_epi16 (__mmask32 __A, __m512i __B, __m512i __C, int __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshld_v32hi_mask ((__v32hi)__B,
|
||||||
|
(__v32hi) __C, __D, (__v32hi) _mm512_setzero_si512 (), (__mmask32)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define _mm512_mask_shrdi_epi16(A, B, C, D, E) \
|
||||||
|
((__m512i) __builtin_ia32_vpshrd_v32hi_mask ((__v32hi)(__m512i)(C), \
|
||||||
|
(__v32hi)(__m512i)(D), \
|
||||||
|
(int)(E), \
|
||||||
|
(__v32hi)(__m512i)(A), \
|
||||||
|
(__mmask32)(B)))
|
||||||
|
#define _mm512_maskz_shrdi_epi16(A, B, C, D) \
|
||||||
|
((__m512i) \
|
||||||
|
__builtin_ia32_vpshrd_v32hi_mask ((__v32hi)(__m512i)(B), \
|
||||||
|
(__v32hi)(__m512i)(C),(int)(D), \
|
||||||
|
(__v32hi)(__m512i)_mm512_setzero_si512 (), \
|
||||||
|
(__mmask32)(A)))
|
||||||
|
#define _mm512_mask_shldi_epi16(A, B, C, D, E) \
|
||||||
|
((__m512i) __builtin_ia32_vpshld_v32hi_mask ((__v32hi)(__m512i)(C), \
|
||||||
|
(__v32hi)(__m512i)(D), \
|
||||||
|
(int)(E), \
|
||||||
|
(__v32hi)(__m512i)(A), \
|
||||||
|
(__mmask32)(B)))
|
||||||
|
#define _mm512_maskz_shldi_epi16(A, B, C, D) \
|
||||||
|
((__m512i) \
|
||||||
|
__builtin_ia32_vpshld_v32hi_mask ((__v32hi)(__m512i)(B), \
|
||||||
|
(__v32hi)(__m512i)(C),(int)(D), \
|
||||||
|
(__v32hi)(__m512i)_mm512_setzero_si512 (), \
|
||||||
|
(__mmask32)(A)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shrdv_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrdv_v32hi_mask ((__v32hi)__A,
|
||||||
|
(__v32hi) __C, (__v32hi) __D, (__mmask32)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shrdv_epi16 (__mmask32 __A, __m512i __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshrdv_v32hi_maskz ((__v32hi)__B,
|
||||||
|
(__v32hi) __C, (__v32hi) __D, (__mmask32)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_shldv_epi16 (__m512i __A, __mmask32 __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshldv_v32hi_mask ((__v32hi)__A,
|
||||||
|
(__v32hi) __C, (__v32hi) __D, (__mmask32)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_shldv_epi16 (__mmask32 __A, __m512i __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpshldv_v32hi_maskz ((__v32hi)__B,
|
||||||
|
(__v32hi) __C, (__v32hi) __D, (__mmask32)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512VBMI2BW__
|
||||||
|
#undef __DISABLE_AVX512VBMI2BW__
|
||||||
|
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512VBMI2BW__ */
|
||||||
|
|
||||||
|
#endif /* __AVX512VBMI2INTRIN_H_INCLUDED */
|
||||||
+1037
File diff suppressed because it is too large
Load Diff
+158
@@ -0,0 +1,158 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512vbmiintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512VBMIINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512VBMIINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVX512VBMI__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512vbmi")
|
||||||
|
#define __DISABLE_AVX512VBMI__
|
||||||
|
#endif /* __AVX512VBMI__ */
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_multishift_epi64_epi8 (__m512i __W, __mmask64 __M, __m512i __X, __m512i __Y)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X,
|
||||||
|
(__v64qi) __Y,
|
||||||
|
(__v64qi) __W,
|
||||||
|
(__mmask64) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_multishift_epi64_epi8 (__mmask64 __M, __m512i __X, __m512i __Y)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X,
|
||||||
|
(__v64qi) __Y,
|
||||||
|
(__v64qi)
|
||||||
|
_mm512_setzero_si512 (),
|
||||||
|
(__mmask64) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_multishift_epi64_epi8 (__m512i __X, __m512i __Y)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpmultishiftqb512_mask ((__v64qi) __X,
|
||||||
|
(__v64qi) __Y,
|
||||||
|
(__v64qi)
|
||||||
|
_mm512_undefined_epi32 (),
|
||||||
|
(__mmask64) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_permutexvar_epi8 (__m512i __A, __m512i __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_permvarqi512_mask ((__v64qi) __B,
|
||||||
|
(__v64qi) __A,
|
||||||
|
(__v64qi)
|
||||||
|
_mm512_undefined_epi32 (),
|
||||||
|
(__mmask64) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_permutexvar_epi8 (__mmask64 __M, __m512i __A,
|
||||||
|
__m512i __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_permvarqi512_mask ((__v64qi) __B,
|
||||||
|
(__v64qi) __A,
|
||||||
|
(__v64qi)
|
||||||
|
_mm512_setzero_si512(),
|
||||||
|
(__mmask64) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_permutexvar_epi8 (__m512i __W, __mmask64 __M, __m512i __A,
|
||||||
|
__m512i __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_permvarqi512_mask ((__v64qi) __B,
|
||||||
|
(__v64qi) __A,
|
||||||
|
(__v64qi) __W,
|
||||||
|
(__mmask64) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_permutex2var_epi8 (__m512i __A, __m512i __I, __m512i __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpermt2varqi512_mask ((__v64qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v64qi) __A,
|
||||||
|
(__v64qi) __B,
|
||||||
|
(__mmask64) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_permutex2var_epi8 (__m512i __A, __mmask64 __U,
|
||||||
|
__m512i __I, __m512i __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpermt2varqi512_mask ((__v64qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v64qi) __A,
|
||||||
|
(__v64qi) __B,
|
||||||
|
(__mmask64)
|
||||||
|
__U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask2_permutex2var_epi8 (__m512i __A, __m512i __I,
|
||||||
|
__mmask64 __U, __m512i __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpermi2varqi512_mask ((__v64qi) __A,
|
||||||
|
(__v64qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v64qi) __B,
|
||||||
|
(__mmask64)
|
||||||
|
__U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_permutex2var_epi8 (__mmask64 __U, __m512i __A,
|
||||||
|
__m512i __I, __m512i __B)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpermt2varqi512_maskz ((__v64qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v64qi) __A,
|
||||||
|
(__v64qi) __B,
|
||||||
|
(__mmask64)
|
||||||
|
__U);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512VBMI__
|
||||||
|
#undef __DISABLE_AVX512VBMI__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512VBMI__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512VBMIINTRIN_H_INCLUDED */
|
||||||
+273
@@ -0,0 +1,273 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512vbmivlintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512VBMIVLINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512VBMIVLINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AVX512VL__) || !defined(__AVX512VBMI__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512vbmi,avx512vl")
|
||||||
|
#define __DISABLE_AVX512VBMIVL__
|
||||||
|
#endif /* __AVX512VBMIVL__ */
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_multishift_epi64_epi8 (__m256i __W, __mmask32 __M, __m256i __X, __m256i __Y)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpmultishiftqb256_mask ((__v32qi) __X,
|
||||||
|
(__v32qi) __Y,
|
||||||
|
(__v32qi) __W,
|
||||||
|
(__mmask32) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_multishift_epi64_epi8 (__mmask32 __M, __m256i __X, __m256i __Y)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpmultishiftqb256_mask ((__v32qi) __X,
|
||||||
|
(__v32qi) __Y,
|
||||||
|
(__v32qi)
|
||||||
|
_mm256_setzero_si256 (),
|
||||||
|
(__mmask32) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_multishift_epi64_epi8 (__m256i __X, __m256i __Y)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpmultishiftqb256_mask ((__v32qi) __X,
|
||||||
|
(__v32qi) __Y,
|
||||||
|
(__v32qi)
|
||||||
|
_mm256_undefined_si256 (),
|
||||||
|
(__mmask32) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_multishift_epi64_epi8 (__m128i __W, __mmask16 __M, __m128i __X, __m128i __Y)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpmultishiftqb128_mask ((__v16qi) __X,
|
||||||
|
(__v16qi) __Y,
|
||||||
|
(__v16qi) __W,
|
||||||
|
(__mmask16) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_multishift_epi64_epi8 (__mmask16 __M, __m128i __X, __m128i __Y)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpmultishiftqb128_mask ((__v16qi) __X,
|
||||||
|
(__v16qi) __Y,
|
||||||
|
(__v16qi)
|
||||||
|
_mm_setzero_si128 (),
|
||||||
|
(__mmask16) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_multishift_epi64_epi8 (__m128i __X, __m128i __Y)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpmultishiftqb128_mask ((__v16qi) __X,
|
||||||
|
(__v16qi) __Y,
|
||||||
|
(__v16qi)
|
||||||
|
_mm_undefined_si128 (),
|
||||||
|
(__mmask16) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_permutexvar_epi8 (__m256i __A, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_permvarqi256_mask ((__v32qi) __B,
|
||||||
|
(__v32qi) __A,
|
||||||
|
(__v32qi)
|
||||||
|
_mm256_undefined_si256 (),
|
||||||
|
(__mmask32) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_permutexvar_epi8 (__mmask32 __M, __m256i __A,
|
||||||
|
__m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_permvarqi256_mask ((__v32qi) __B,
|
||||||
|
(__v32qi) __A,
|
||||||
|
(__v32qi)
|
||||||
|
_mm256_setzero_si256 (),
|
||||||
|
(__mmask32) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_permutexvar_epi8 (__m256i __W, __mmask32 __M, __m256i __A,
|
||||||
|
__m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_permvarqi256_mask ((__v32qi) __B,
|
||||||
|
(__v32qi) __A,
|
||||||
|
(__v32qi) __W,
|
||||||
|
(__mmask32) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_permutexvar_epi8 (__m128i __A, __m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_permvarqi128_mask ((__v16qi) __B,
|
||||||
|
(__v16qi) __A,
|
||||||
|
(__v16qi)
|
||||||
|
_mm_undefined_si128 (),
|
||||||
|
(__mmask16) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_permutexvar_epi8 (__mmask16 __M, __m128i __A, __m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_permvarqi128_mask ((__v16qi) __B,
|
||||||
|
(__v16qi) __A,
|
||||||
|
(__v16qi)
|
||||||
|
_mm_setzero_si128 (),
|
||||||
|
(__mmask16) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_permutexvar_epi8 (__m128i __W, __mmask16 __M, __m128i __A,
|
||||||
|
__m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_permvarqi128_mask ((__v16qi) __B,
|
||||||
|
(__v16qi) __A,
|
||||||
|
(__v16qi) __W,
|
||||||
|
(__mmask16) __M);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_permutex2var_epi8 (__m256i __A, __m256i __I, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpermt2varqi256_mask ((__v32qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v32qi) __A,
|
||||||
|
(__v32qi) __B,
|
||||||
|
(__mmask32) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_permutex2var_epi8 (__m256i __A, __mmask32 __U,
|
||||||
|
__m256i __I, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpermt2varqi256_mask ((__v32qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v32qi) __A,
|
||||||
|
(__v32qi) __B,
|
||||||
|
(__mmask32)
|
||||||
|
__U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask2_permutex2var_epi8 (__m256i __A, __m256i __I,
|
||||||
|
__mmask32 __U, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpermi2varqi256_mask ((__v32qi) __A,
|
||||||
|
(__v32qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v32qi) __B,
|
||||||
|
(__mmask32)
|
||||||
|
__U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_permutex2var_epi8 (__mmask32 __U, __m256i __A,
|
||||||
|
__m256i __I, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpermt2varqi256_maskz ((__v32qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v32qi) __A,
|
||||||
|
(__v32qi) __B,
|
||||||
|
(__mmask32)
|
||||||
|
__U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_permutex2var_epi8 (__m128i __A, __m128i __I, __m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpermt2varqi128_mask ((__v16qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v16qi) __A,
|
||||||
|
(__v16qi) __B,
|
||||||
|
(__mmask16) -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_permutex2var_epi8 (__m128i __A, __mmask16 __U, __m128i __I,
|
||||||
|
__m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpermt2varqi128_mask ((__v16qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v16qi) __A,
|
||||||
|
(__v16qi) __B,
|
||||||
|
(__mmask16)
|
||||||
|
__U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask2_permutex2var_epi8 (__m128i __A, __m128i __I, __mmask16 __U,
|
||||||
|
__m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpermi2varqi128_mask ((__v16qi) __A,
|
||||||
|
(__v16qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v16qi) __B,
|
||||||
|
(__mmask16)
|
||||||
|
__U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_permutex2var_epi8 (__mmask16 __U, __m128i __A, __m128i __I,
|
||||||
|
__m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpermt2varqi128_maskz ((__v16qi) __I
|
||||||
|
/* idx */ ,
|
||||||
|
(__v16qi) __A,
|
||||||
|
(__v16qi) __B,
|
||||||
|
(__mmask16)
|
||||||
|
__U);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512VBMIVL__
|
||||||
|
#undef __DISABLE_AVX512VBMIVL__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512VBMIVL__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512VBMIVLINTRIN_H_INCLUDED */
|
||||||
+4758
File diff suppressed because it is too large
Load Diff
+2016
File diff suppressed because it is too large
Load Diff
+13896
File diff suppressed because it is too large
Load Diff
+144
@@ -0,0 +1,144 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512vnniintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __AVX512VNNIINTRIN_H_INCLUDED
|
||||||
|
#define __AVX512VNNIINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AVX512VNNI__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512vnni")
|
||||||
|
#define __DISABLE_AVX512VNNI__
|
||||||
|
#endif /* __AVX512VNNI__ */
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_dpbusd_epi32 (__m512i __A, __m512i __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpdpbusd_v16si ((__v16si)__A, (__v16si) __B,
|
||||||
|
(__v16si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_dpbusd_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpdpbusd_v16si_mask ((__v16si)__A,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_dpbusd_epi32 (__mmask16 __A, __m512i __B, __m512i __C,
|
||||||
|
__m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpdpbusd_v16si_maskz ((__v16si)__B,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_dpbusds_epi32 (__m512i __A, __m512i __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpdpbusds_v16si ((__v16si)__A, (__v16si) __B,
|
||||||
|
(__v16si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_dpbusds_epi32 (__m512i __A, __mmask16 __B, __m512i __C,
|
||||||
|
__m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpdpbusds_v16si_mask ((__v16si)__A,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_dpbusds_epi32 (__mmask16 __A, __m512i __B, __m512i __C,
|
||||||
|
__m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpdpbusds_v16si_maskz ((__v16si)__B,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_dpwssd_epi32 (__m512i __A, __m512i __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpdpwssd_v16si ((__v16si)__A, (__v16si) __B,
|
||||||
|
(__v16si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_dpwssd_epi32 (__m512i __A, __mmask16 __B, __m512i __C, __m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpdpwssd_v16si_mask ((__v16si)__A,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_dpwssd_epi32 (__mmask16 __A, __m512i __B, __m512i __C,
|
||||||
|
__m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpdpwssd_v16si_maskz ((__v16si)__B,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_dpwssds_epi32 (__m512i __A, __m512i __B, __m512i __C)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpdpwssds_v16si ((__v16si)__A, (__v16si) __B,
|
||||||
|
(__v16si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_dpwssds_epi32 (__m512i __A, __mmask16 __B, __m512i __C,
|
||||||
|
__m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpdpwssds_v16si_mask ((__v16si)__A,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_dpwssds_epi32 (__mmask16 __A, __m512i __B, __m512i __C,
|
||||||
|
__m512i __D)
|
||||||
|
{
|
||||||
|
return (__m512i)__builtin_ia32_vpdpwssds_v16si_maskz ((__v16si)__B,
|
||||||
|
(__v16si) __C, (__v16si) __D, (__mmask16)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512VNNI__
|
||||||
|
#undef __DISABLE_AVX512VNNI__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512VNNI__ */
|
||||||
|
|
||||||
|
#endif /* __AVX512VNNIINTRIN_H_INCLUDED */
|
||||||
+210
@@ -0,0 +1,210 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512vnnivlintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512VNNIVLINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512VNNIVLINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AVX512VL__) || !defined(__AVX512VNNI__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512vnni,avx512vl")
|
||||||
|
#define __DISABLE_AVX512VNNIVL__
|
||||||
|
#endif /* __AVX512VNNIVL__ */
|
||||||
|
|
||||||
|
#define _mm256_dpbusd_epi32(A, B, C) \
|
||||||
|
((__m256i) __builtin_ia32_vpdpbusd_v8si ((__v8si) (A), \
|
||||||
|
(__v8si) (B), \
|
||||||
|
(__v8si) (C)))
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_dpbusd_epi32 (__m256i __A, __mmask8 __B, __m256i __C, __m256i __D)
|
||||||
|
{
|
||||||
|
return (__m256i)__builtin_ia32_vpdpbusd_v8si_mask ((__v8si)__A, (__v8si) __C,
|
||||||
|
(__v8si) __D, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_dpbusd_epi32 (__mmask8 __A, __m256i __B, __m256i __C, __m256i __D)
|
||||||
|
{
|
||||||
|
return (__m256i)__builtin_ia32_vpdpbusd_v8si_maskz ((__v8si)__B,
|
||||||
|
(__v8si) __C, (__v8si) __D, (__mmask8)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _mm_dpbusd_epi32(A, B, C) \
|
||||||
|
((__m128i) __builtin_ia32_vpdpbusd_v4si ((__v4si) (A), \
|
||||||
|
(__v4si) (B), \
|
||||||
|
(__v4si) (C)))
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_dpbusd_epi32 (__m128i __A, __mmask8 __B, __m128i __C, __m128i __D)
|
||||||
|
{
|
||||||
|
return (__m128i)__builtin_ia32_vpdpbusd_v4si_mask ((__v4si)__A, (__v4si) __C,
|
||||||
|
(__v4si) __D, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_dpbusd_epi32 (__mmask8 __A, __m128i __B, __m128i __C, __m128i __D)
|
||||||
|
{
|
||||||
|
return (__m128i)__builtin_ia32_vpdpbusd_v4si_maskz ((__v4si)__B,
|
||||||
|
(__v4si) __C, (__v4si) __D, (__mmask8)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _mm256_dpbusds_epi32(A, B, C) \
|
||||||
|
((__m256i) __builtin_ia32_vpdpbusds_v8si ((__v8si) (A), \
|
||||||
|
(__v8si) (B), \
|
||||||
|
(__v8si) (C)))
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_dpbusds_epi32 (__m256i __A, __mmask8 __B, __m256i __C, __m256i __D)
|
||||||
|
{
|
||||||
|
return (__m256i)__builtin_ia32_vpdpbusds_v8si_mask ((__v8si)__A,
|
||||||
|
(__v8si) __C, (__v8si) __D, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_dpbusds_epi32 (__mmask8 __A, __m256i __B, __m256i __C,
|
||||||
|
__m256i __D)
|
||||||
|
{
|
||||||
|
return (__m256i)__builtin_ia32_vpdpbusds_v8si_maskz ((__v8si)__B,
|
||||||
|
(__v8si) __C, (__v8si) __D, (__mmask8)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _mm_dpbusds_epi32(A, B, C) \
|
||||||
|
((__m128i) __builtin_ia32_vpdpbusds_v4si ((__v4si) (A), \
|
||||||
|
(__v4si) (B), \
|
||||||
|
(__v4si) (C)))
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_dpbusds_epi32 (__m128i __A, __mmask8 __B, __m128i __C, __m128i __D)
|
||||||
|
{
|
||||||
|
return (__m128i)__builtin_ia32_vpdpbusds_v4si_mask ((__v4si)__A,
|
||||||
|
(__v4si) __C, (__v4si) __D, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_dpbusds_epi32 (__mmask8 __A, __m128i __B, __m128i __C, __m128i __D)
|
||||||
|
{
|
||||||
|
return (__m128i)__builtin_ia32_vpdpbusds_v4si_maskz ((__v4si)__B,
|
||||||
|
(__v4si) __C, (__v4si) __D, (__mmask8)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _mm256_dpwssd_epi32(A, B, C) \
|
||||||
|
((__m256i) __builtin_ia32_vpdpwssd_v8si ((__v8si) (A), \
|
||||||
|
(__v8si) (B), \
|
||||||
|
(__v8si) (C)))
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_dpwssd_epi32 (__m256i __A, __mmask8 __B, __m256i __C, __m256i __D)
|
||||||
|
{
|
||||||
|
return (__m256i)__builtin_ia32_vpdpwssd_v8si_mask ((__v8si)__A, (__v8si) __C,
|
||||||
|
(__v8si) __D, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_dpwssd_epi32 (__mmask8 __A, __m256i __B, __m256i __C, __m256i __D)
|
||||||
|
{
|
||||||
|
return (__m256i)__builtin_ia32_vpdpwssd_v8si_maskz ((__v8si)__B,
|
||||||
|
(__v8si) __C, (__v8si) __D, (__mmask8)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _mm_dpwssd_epi32(A, B, C) \
|
||||||
|
((__m128i) __builtin_ia32_vpdpwssd_v4si ((__v4si) (A), \
|
||||||
|
(__v4si) (B), \
|
||||||
|
(__v4si) (C)))
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_dpwssd_epi32 (__m128i __A, __mmask8 __B, __m128i __C, __m128i __D)
|
||||||
|
{
|
||||||
|
return (__m128i)__builtin_ia32_vpdpwssd_v4si_mask ((__v4si)__A, (__v4si) __C,
|
||||||
|
(__v4si) __D, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_dpwssd_epi32 (__mmask8 __A, __m128i __B, __m128i __C, __m128i __D)
|
||||||
|
{
|
||||||
|
return (__m128i)__builtin_ia32_vpdpwssd_v4si_maskz ((__v4si)__B,
|
||||||
|
(__v4si) __C, (__v4si) __D, (__mmask8)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _mm256_dpwssds_epi32(A, B, C) \
|
||||||
|
((__m256i) __builtin_ia32_vpdpwssds_v8si ((__v8si) (A), \
|
||||||
|
(__v8si) (B), \
|
||||||
|
(__v8si) (C)))
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_dpwssds_epi32 (__m256i __A, __mmask8 __B, __m256i __C, __m256i __D)
|
||||||
|
{
|
||||||
|
return (__m256i)__builtin_ia32_vpdpwssds_v8si_mask ((__v8si)__A,
|
||||||
|
(__v8si) __C, (__v8si) __D, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_dpwssds_epi32 (__mmask8 __A, __m256i __B, __m256i __C,
|
||||||
|
__m256i __D)
|
||||||
|
{
|
||||||
|
return (__m256i)__builtin_ia32_vpdpwssds_v8si_maskz ((__v8si)__B,
|
||||||
|
(__v8si) __C, (__v8si) __D, (__mmask8)__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _mm_dpwssds_epi32(A, B, C) \
|
||||||
|
((__m128i) __builtin_ia32_vpdpwssds_v4si ((__v4si) (A), \
|
||||||
|
(__v4si) (B), \
|
||||||
|
(__v4si) (C)))
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_dpwssds_epi32 (__m128i __A, __mmask8 __B, __m128i __C, __m128i __D)
|
||||||
|
{
|
||||||
|
return (__m128i)__builtin_ia32_vpdpwssds_v4si_mask ((__v4si)__A,
|
||||||
|
(__v4si) __C, (__v4si) __D, (__mmask8)__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_dpwssds_epi32 (__mmask8 __A, __m128i __B, __m128i __C, __m128i __D)
|
||||||
|
{
|
||||||
|
return (__m128i)__builtin_ia32_vpdpwssds_v4si_maskz ((__v4si)__B,
|
||||||
|
(__v4si) __C, (__v4si) __D, (__mmask8)__A);
|
||||||
|
}
|
||||||
|
#ifdef __DISABLE_AVX512VNNIVL__
|
||||||
|
#undef __DISABLE_AVX512VNNIVL__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512VNNIVL__ */
|
||||||
|
#endif /* __DISABLE_AVX512VNNIVL__ */
|
||||||
+58
@@ -0,0 +1,58 @@
|
|||||||
|
/* Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512vp2intersectintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512VP2INTERSECTINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512VP2INTERSECTINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AVX512VP2INTERSECT__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512vp2intersect")
|
||||||
|
#define __DISABLE_AVX512VP2INTERSECT__
|
||||||
|
#endif /* __AVX512VP2INTERSECT__ */
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_2intersect_epi32 (__m512i __A, __m512i __B, __mmask16 *__U,
|
||||||
|
__mmask16 *__M)
|
||||||
|
{
|
||||||
|
__builtin_ia32_2intersectd512 (__U, __M, (__v16si) __A, (__v16si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_2intersect_epi64 (__m512i __A, __m512i __B, __mmask8 *__U,
|
||||||
|
__mmask8 *__M)
|
||||||
|
{
|
||||||
|
__builtin_ia32_2intersectq512 (__U, __M, (__v8di) __A, (__v8di) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512VP2INTERSECT__
|
||||||
|
#undef __DISABLE_AVX512VP2INTERSECT__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512VP2INTERSECT__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512VP2INTERSECTINTRIN_H_INCLUDED */
|
||||||
+72
@@ -0,0 +1,72 @@
|
|||||||
|
/* Copyright (C) 2019-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avx512vp2intersectintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512VP2INTERSECTVLINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512VP2INTERSECTVLINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AVX512VP2INTERSECT__) || !defined(__AVX512VL__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512vp2intersect,avx512vl")
|
||||||
|
#define __DISABLE_AVX512VP2INTERSECTVL__
|
||||||
|
#endif /* __AVX512VP2INTERSECTVL__ */
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_2intersect_epi32 (__m128i __A, __m128i __B, __mmask8 *__U, __mmask8 *__M)
|
||||||
|
{
|
||||||
|
__builtin_ia32_2intersectd128 (__U, __M, (__v4si) __A, (__v4si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_2intersect_epi32 (__m256i __A, __m256i __B, __mmask8 *__U,
|
||||||
|
__mmask8 *__M)
|
||||||
|
{
|
||||||
|
__builtin_ia32_2intersectd256 (__U, __M, (__v8si) __A, (__v8si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_2intersect_epi64 (__m128i __A, __m128i __B, __mmask8 *__U, __mmask8 *__M)
|
||||||
|
{
|
||||||
|
__builtin_ia32_2intersectq128 (__U, __M, (__v2di) __A, (__v2di) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_2intersect_epi64 (__m256i __A, __m256i __B, __mmask8 *__U,
|
||||||
|
__mmask8 *__M)
|
||||||
|
{
|
||||||
|
__builtin_ia32_2intersectq256 (__U, __M, (__v4di) __A, (__v4di) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512VP2INTERSECTVL__
|
||||||
|
#undef __DISABLE_AVX512VP2INTERSECTVL__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512VP2INTERSECTVL__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512VP2INTERSECTVLINTRIN_H_INCLUDED */
|
||||||
+94
@@ -0,0 +1,94 @@
|
|||||||
|
/* Copyright (C) 2017-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <avx512vpopcntdqintrin.h> directly; include <x86intrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512VPOPCNTDQINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512VPOPCNTDQINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVX512VPOPCNTDQ__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512vpopcntdq")
|
||||||
|
#define __DISABLE_AVX512VPOPCNTDQ__
|
||||||
|
#endif /* __AVX512VPOPCNTDQ__ */
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_popcnt_epi32 (__m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountd_v16si ((__v16si) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_popcnt_epi32 (__m512i __W, __mmask16 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountd_v16si_mask ((__v16si) __A,
|
||||||
|
(__v16si) __W,
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_popcnt_epi32 (__mmask16 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountd_v16si_mask ((__v16si) __A,
|
||||||
|
(__v16si)
|
||||||
|
_mm512_setzero_si512 (),
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_popcnt_epi64 (__m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountq_v8di ((__v8di) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_mask_popcnt_epi64 (__m512i __W, __mmask8 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountq_v8di_mask ((__v8di) __A,
|
||||||
|
(__v8di) __W,
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m512i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm512_maskz_popcnt_epi64 (__mmask8 __U, __m512i __A)
|
||||||
|
{
|
||||||
|
return (__m512i) __builtin_ia32_vpopcountq_v8di_mask ((__v8di) __A,
|
||||||
|
(__v8di)
|
||||||
|
_mm512_setzero_si512 (),
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512VPOPCNTDQ__
|
||||||
|
#undef __DISABLE_AVX512VPOPCNTDQ__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512VPOPCNTDQ__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512VPOPCNTDQINTRIN_H_INCLUDED */
|
||||||
+146
@@ -0,0 +1,146 @@
|
|||||||
|
/* Copyright (C) 2017-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <avx512vpopcntdqvlintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVX512VPOPCNTDQVLINTRIN_H_INCLUDED
|
||||||
|
#define _AVX512VPOPCNTDQVLINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AVX512VPOPCNTDQ__) || !defined(__AVX512VL__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avx512vpopcntdq,avx512vl")
|
||||||
|
#define __DISABLE_AVX512VPOPCNTDQVL__
|
||||||
|
#endif /* __AVX512VPOPCNTDQVL__ */
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_popcnt_epi32 (__m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountd_v4si ((__v4si) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_popcnt_epi32 (__m128i __W, __mmask16 __U, __m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountd_v4si_mask ((__v4si) __A,
|
||||||
|
(__v4si) __W,
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_popcnt_epi32 (__mmask16 __U, __m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountd_v4si_mask ((__v4si) __A,
|
||||||
|
(__v4si)
|
||||||
|
_mm_setzero_si128 (),
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_popcnt_epi32 (__m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountd_v8si ((__v8si) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_popcnt_epi32 (__m256i __W, __mmask16 __U, __m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountd_v8si_mask ((__v8si) __A,
|
||||||
|
(__v8si) __W,
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_popcnt_epi32 (__mmask16 __U, __m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountd_v8si_mask ((__v8si) __A,
|
||||||
|
(__v8si)
|
||||||
|
_mm256_setzero_si256 (),
|
||||||
|
(__mmask16) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_popcnt_epi64 (__m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountq_v2di ((__v2di) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_mask_popcnt_epi64 (__m128i __W, __mmask8 __U, __m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountq_v2di_mask ((__v2di) __A,
|
||||||
|
(__v2di) __W,
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_maskz_popcnt_epi64 (__mmask8 __U, __m128i __A)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpopcountq_v2di_mask ((__v2di) __A,
|
||||||
|
(__v2di)
|
||||||
|
_mm_setzero_si128 (),
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_popcnt_epi64 (__m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountq_v4di ((__v4di) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_mask_popcnt_epi64 (__m256i __W, __mmask8 __U, __m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountq_v4di_mask ((__v4di) __A,
|
||||||
|
(__v4di) __W,
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_maskz_popcnt_epi64 (__mmask8 __U, __m256i __A)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpopcountq_v4di_mask ((__v4di) __A,
|
||||||
|
(__v4di)
|
||||||
|
_mm256_setzero_si256 (),
|
||||||
|
(__mmask8) __U);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVX512VPOPCNTDQVL__
|
||||||
|
#undef __DISABLE_AVX512VPOPCNTDQVL__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVX512VPOPCNTDQVL__ */
|
||||||
|
|
||||||
|
#endif /* _AVX512VPOPCNTDQVLINTRIN_H_INCLUDED */
|
||||||
+78
@@ -0,0 +1,78 @@
|
|||||||
|
/* Copyright (C) 2020-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avxifmaintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVXIFMAINTRIN_H_INCLUDED
|
||||||
|
#define _AVXIFMAINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVXIFMA__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avxifma")
|
||||||
|
#define __DISABLE_AVXIFMA__
|
||||||
|
#endif /* __AVXIFMA__ */
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_madd52lo_avx_epu64 (__m128i __X, __m128i __Y, __m128i __Z)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpmadd52luq128 ((__v2di) __X,
|
||||||
|
(__v2di) __Y,
|
||||||
|
(__v2di) __Z);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_madd52hi_avx_epu64 (__m128i __X, __m128i __Y, __m128i __Z)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpmadd52huq128 ((__v2di) __X,
|
||||||
|
(__v2di) __Y,
|
||||||
|
(__v2di) __Z);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_madd52lo_avx_epu64 (__m256i __X, __m256i __Y, __m256i __Z)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpmadd52luq256 ((__v4di) __X,
|
||||||
|
(__v4di) __Y,
|
||||||
|
(__v4di) __Z);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_madd52hi_avx_epu64 (__m256i __X, __m256i __Y, __m256i __Z)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpmadd52huq256 ((__v4di) __X,
|
||||||
|
(__v4di) __Y,
|
||||||
|
(__v4di) __Z);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVXIFMA__
|
||||||
|
#undef __DISABLE_AVXIFMA__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVXIFMA__ */
|
||||||
|
|
||||||
|
#endif /* _AVXIFMAINTRIN_H_INCLUDED */
|
||||||
+1607
File diff suppressed because it is too large
Load Diff
+140
@@ -0,0 +1,140 @@
|
|||||||
|
/* Copyright (C) 2021-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avxneconvertintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVXNECONVERTINTRIN_H_INCLUDED
|
||||||
|
#define _AVXNECONVERTINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __AVXNECONVERT__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target ("avxneconvert")
|
||||||
|
#define __DISABLE_AVXNECONVERT__
|
||||||
|
#endif /* __AVXNECONVERT__ */
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_bcstnebf16_ps (const void *__P)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_vbcstnebf162ps128 ((const __bf16 *) __P);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_bcstnebf16_ps (const void *__P)
|
||||||
|
{
|
||||||
|
return (__m256) __builtin_ia32_vbcstnebf162ps256 ((const __bf16 *) __P);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_bcstnesh_ps (const void *__P)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_vbcstnesh2ps128 ((const _Float16 *) __P);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_bcstnesh_ps (const void *__P)
|
||||||
|
{
|
||||||
|
return (__m256) __builtin_ia32_vbcstnesh2ps256 ((const _Float16 *) __P);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_cvtneebf16_ps (const __m128bh *__A)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_vcvtneebf162ps128 ((const __v8bf *) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_cvtneebf16_ps (const __m256bh *__A)
|
||||||
|
{
|
||||||
|
return (__m256) __builtin_ia32_vcvtneebf162ps256 ((const __v16bf *) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_cvtneeph_ps (const __m128h *__A)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_vcvtneeph2ps128 ((const __v8hf *) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_cvtneeph_ps (const __m256h *__A)
|
||||||
|
{
|
||||||
|
return (__m256) __builtin_ia32_vcvtneeph2ps256 ((const __v16hf *) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_cvtneobf16_ps (const __m128bh *__A)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_vcvtneobf162ps128 ((const __v8bf *) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_cvtneobf16_ps (const __m256bh *__A)
|
||||||
|
{
|
||||||
|
return (__m256) __builtin_ia32_vcvtneobf162ps256 ((const __v16bf *) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_cvtneoph_ps (const __m128h *__A)
|
||||||
|
{
|
||||||
|
return (__m128) __builtin_ia32_vcvtneoph2ps128 ((const __v8hf *) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_cvtneoph_ps (const __m256h *__A)
|
||||||
|
{
|
||||||
|
return (__m256) __builtin_ia32_vcvtneoph2ps256 ((const __v16hf *) __A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128bh
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_cvtneps_avx_pbh (__m128 __A)
|
||||||
|
{
|
||||||
|
return (__m128bh) __builtin_ia32_cvtneps2bf16_v4sf (__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128bh
|
||||||
|
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_cvtneps_avx_pbh (__m256 __A)
|
||||||
|
{
|
||||||
|
return (__m128bh) __builtin_ia32_cvtneps2bf16_v8sf (__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVXNECONVERT__
|
||||||
|
#undef __DISABLE_AVXNECONVERT__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVXNECONVERT__ */
|
||||||
|
|
||||||
|
#endif /* _AVXNECONVERTINTRIN_H_INCLUDED */
|
||||||
+138
@@ -0,0 +1,138 @@
|
|||||||
|
/* Copyright (C) 2020-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#if !defined _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avxvnniint8vlintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVXVNNIINT8INTRIN_H_INCLUDED
|
||||||
|
#define _AVXVNNIINT8INTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AVXVNNIINT8__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avxvnniint8")
|
||||||
|
#define __DISABLE_AVXVNNIINT8__
|
||||||
|
#endif /* __AVXVNNIINT8__ */
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_dpbssd_epi32 (__m128i __W, __m128i __A, __m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i)
|
||||||
|
__builtin_ia32_vpdpbssd128 ((__v4si) __W, (__v4si) __A, (__v4si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_dpbssds_epi32 (__m128i __W, __m128i __A, __m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i)
|
||||||
|
__builtin_ia32_vpdpbssds128 ((__v4si) __W, (__v4si) __A, (__v4si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_dpbsud_epi32 (__m128i __W, __m128i __A, __m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i)
|
||||||
|
__builtin_ia32_vpdpbsud128 ((__v4si) __W, (__v4si) __A, (__v4si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_dpbsuds_epi32 (__m128i __W, __m128i __A, __m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i)
|
||||||
|
__builtin_ia32_vpdpbsuds128 ((__v4si) __W, (__v4si) __A, (__v4si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_dpbuud_epi32 (__m128i __W, __m128i __A, __m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i)
|
||||||
|
__builtin_ia32_vpdpbuud128 ((__v4si) __W, (__v4si) __A, (__v4si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_dpbuuds_epi32 (__m128i __W, __m128i __A, __m128i __B)
|
||||||
|
{
|
||||||
|
return (__m128i)
|
||||||
|
__builtin_ia32_vpdpbuuds128 ((__v4si) __W, (__v4si) __A, (__v4si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_dpbssd_epi32 (__m256i __W, __m256i __A, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i)
|
||||||
|
__builtin_ia32_vpdpbssd256 ((__v8si) __W, (__v8si) __A, (__v8si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_dpbssds_epi32 (__m256i __W, __m256i __A, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i)
|
||||||
|
__builtin_ia32_vpdpbssds256 ((__v8si) __W, (__v8si) __A, (__v8si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_dpbsud_epi32 (__m256i __W, __m256i __A, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i)
|
||||||
|
__builtin_ia32_vpdpbsud256 ((__v8si) __W, (__v8si) __A, (__v8si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_dpbsuds_epi32 (__m256i __W, __m256i __A, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i)
|
||||||
|
__builtin_ia32_vpdpbsuds256 ((__v8si) __W, (__v8si) __A, (__v8si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_dpbuud_epi32 (__m256i __W, __m256i __A, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i)
|
||||||
|
__builtin_ia32_vpdpbuud256 ((__v8si) __W, (__v8si) __A, (__v8si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_dpbuuds_epi32 (__m256i __W, __m256i __A, __m256i __B)
|
||||||
|
{
|
||||||
|
return (__m256i)
|
||||||
|
__builtin_ia32_vpdpbuuds256 ((__v8si) __W, (__v8si) __A, (__v8si) __B);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVXVNNIINT8__
|
||||||
|
#undef __DISABLE_AVXVNNIINT8__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVXVNNIINT8__ */
|
||||||
|
|
||||||
|
#endif /* __AVXVNNIINT8INTRIN_H_INCLUDED */
|
||||||
+113
@@ -0,0 +1,113 @@
|
|||||||
|
/* Copyright (C) 2020-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _IMMINTRIN_H_INCLUDED
|
||||||
|
#error "Never use <avxvnniintrin.h> directly; include <immintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _AVXVNNIINTRIN_H_INCLUDED
|
||||||
|
#define _AVXVNNIINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#if !defined(__AVXVNNI__)
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("avxvnni")
|
||||||
|
#define __DISABLE_AVXVNNIVL__
|
||||||
|
#endif /* __AVXVNNIVL__ */
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_dpbusd_avx_epi32(__m256i __A, __m256i __B, __m256i __C)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpdpbusd_v8si ((__v8si) __A,
|
||||||
|
(__v8si) __B,
|
||||||
|
(__v8si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_dpbusd_avx_epi32(__m128i __A, __m128i __B, __m128i __C)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpdpbusd_v4si ((__v4si) __A,
|
||||||
|
(__v4si) __B,
|
||||||
|
(__v4si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_dpbusds_avx_epi32(__m256i __A, __m256i __B, __m256i __C)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpdpbusds_v8si ((__v8si) __A,
|
||||||
|
(__v8si) __B,
|
||||||
|
(__v8si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_dpbusds_avx_epi32(__m128i __A,__m128i __B,__m128i __C)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpdpbusds_v4si ((__v4si) __A,
|
||||||
|
(__v4si) __B,
|
||||||
|
(__v4si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_dpwssd_avx_epi32(__m256i __A,__m256i __B,__m256i __C)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpdpwssd_v8si ((__v8si) __A,
|
||||||
|
(__v8si) __B,
|
||||||
|
(__v8si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_dpwssd_avx_epi32(__m128i __A,__m128i __B,__m128i __C)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpdpwssd_v4si ((__v4si) __A,
|
||||||
|
(__v4si) __B,
|
||||||
|
(__v4si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m256i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm256_dpwssds_avx_epi32(__m256i __A,__m256i __B,__m256i __C)
|
||||||
|
{
|
||||||
|
return (__m256i) __builtin_ia32_vpdpwssds_v8si ((__v8si) __A,
|
||||||
|
(__v8si) __B,
|
||||||
|
(__v8si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline __m128i
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_dpwssds_avx_epi32(__m128i __A,__m128i __B,__m128i __C)
|
||||||
|
{
|
||||||
|
return (__m128i) __builtin_ia32_vpdpwssds_v4si ((__v4si) __A,
|
||||||
|
(__v4si) __B,
|
||||||
|
(__v4si) __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_AVXVNNIVL__
|
||||||
|
#undef __DISABLE_AVXVNNIVL__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_AVXVNNIVL__ */
|
||||||
|
#endif /* _AVXVNNIINTRIN_H_INCLUDED */
|
||||||
+109
@@ -0,0 +1,109 @@
|
|||||||
|
/* Copyright (C) 2011-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _X86GPRINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <bmi2intrin.h> directly; include <x86gprintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _BMI2INTRIN_H_INCLUDED
|
||||||
|
#define _BMI2INTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __BMI2__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("bmi2")
|
||||||
|
#define __DISABLE_BMI2__
|
||||||
|
#endif /* __BMI2__ */
|
||||||
|
|
||||||
|
extern __inline unsigned int
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_bzhi_u32 (unsigned int __X, unsigned int __Y)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_bzhi_si (__X, __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_pdep_u32 (unsigned int __X, unsigned int __Y)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_pdep_si (__X, __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_pext_u32 (unsigned int __X, unsigned int __Y)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_pext_si (__X, __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
|
||||||
|
extern __inline unsigned long long
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_bzhi_u64 (unsigned long long __X, unsigned long long __Y)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_bzhi_di (__X, __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_pdep_u64 (unsigned long long __X, unsigned long long __Y)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_pdep_di (__X, __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_pext_u64 (unsigned long long __X, unsigned long long __Y)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_pext_di (__X, __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mulx_u64 (unsigned long long __X, unsigned long long __Y,
|
||||||
|
unsigned long long *__P)
|
||||||
|
{
|
||||||
|
unsigned __int128 __res = (unsigned __int128) __X * __Y;
|
||||||
|
*__P = (unsigned long long) (__res >> 64);
|
||||||
|
return (unsigned long long) __res;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* !__x86_64__ */
|
||||||
|
|
||||||
|
extern __inline unsigned int
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mulx_u32 (unsigned int __X, unsigned int __Y, unsigned int *__P)
|
||||||
|
{
|
||||||
|
unsigned long long __res = (unsigned long long) __X * __Y;
|
||||||
|
*__P = (unsigned int) (__res >> 32);
|
||||||
|
return (unsigned int) __res;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !__x86_64__ */
|
||||||
|
|
||||||
|
#ifdef __DISABLE_BMI2__
|
||||||
|
#undef __DISABLE_BMI2__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_BMI2__ */
|
||||||
|
|
||||||
|
#endif /* _BMI2INTRIN_H_INCLUDED */
|
||||||
+202
@@ -0,0 +1,202 @@
|
|||||||
|
/* Copyright (C) 2010-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _X86GPRINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <bmiintrin.h> directly; include <x86gprintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _BMIINTRIN_H_INCLUDED
|
||||||
|
#define _BMIINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __BMI__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("bmi")
|
||||||
|
#define __DISABLE_BMI__
|
||||||
|
#endif /* __BMI__ */
|
||||||
|
|
||||||
|
extern __inline unsigned short __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__tzcnt_u16 (unsigned short __X)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_tzcnt_u16 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned short __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_tzcnt_u16 (unsigned short __X)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_tzcnt_u16 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__andn_u32 (unsigned int __X, unsigned int __Y)
|
||||||
|
{
|
||||||
|
return ~__X & __Y;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_andn_u32 (unsigned int __X, unsigned int __Y)
|
||||||
|
{
|
||||||
|
return __andn_u32 (__X, __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__bextr_u32 (unsigned int __X, unsigned int __Y)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_bextr_u32 (__X, __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_bextr_u32 (unsigned int __X, unsigned int __Y, unsigned __Z)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_bextr_u32 (__X, ((__Y & 0xff) | ((__Z & 0xff) << 8)));
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__blsi_u32 (unsigned int __X)
|
||||||
|
{
|
||||||
|
return __X & -__X;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_blsi_u32 (unsigned int __X)
|
||||||
|
{
|
||||||
|
return __blsi_u32 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__blsmsk_u32 (unsigned int __X)
|
||||||
|
{
|
||||||
|
return __X ^ (__X - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_blsmsk_u32 (unsigned int __X)
|
||||||
|
{
|
||||||
|
return __blsmsk_u32 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__blsr_u32 (unsigned int __X)
|
||||||
|
{
|
||||||
|
return __X & (__X - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_blsr_u32 (unsigned int __X)
|
||||||
|
{
|
||||||
|
return __blsr_u32 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__tzcnt_u32 (unsigned int __X)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_tzcnt_u32 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_tzcnt_u32 (unsigned int __X)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_tzcnt_u32 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__andn_u64 (unsigned long long __X, unsigned long long __Y)
|
||||||
|
{
|
||||||
|
return ~__X & __Y;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_andn_u64 (unsigned long long __X, unsigned long long __Y)
|
||||||
|
{
|
||||||
|
return __andn_u64 (__X, __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__bextr_u64 (unsigned long long __X, unsigned long long __Y)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_bextr_u64 (__X, __Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_bextr_u64 (unsigned long long __X, unsigned int __Y, unsigned int __Z)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_bextr_u64 (__X, ((__Y & 0xff) | ((__Z & 0xff) << 8)));
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__blsi_u64 (unsigned long long __X)
|
||||||
|
{
|
||||||
|
return __X & -__X;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_blsi_u64 (unsigned long long __X)
|
||||||
|
{
|
||||||
|
return __blsi_u64 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__blsmsk_u64 (unsigned long long __X)
|
||||||
|
{
|
||||||
|
return __X ^ (__X - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_blsmsk_u64 (unsigned long long __X)
|
||||||
|
{
|
||||||
|
return __blsmsk_u64 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__blsr_u64 (unsigned long long __X)
|
||||||
|
{
|
||||||
|
return __X & (__X - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_blsr_u64 (unsigned long long __X)
|
||||||
|
{
|
||||||
|
return __blsr_u64 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
__tzcnt_u64 (unsigned long long __X)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_tzcnt_u64 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_tzcnt_u64 (unsigned long long __X)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_tzcnt_u64 (__X);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __x86_64__ */
|
||||||
|
|
||||||
|
#ifdef __DISABLE_BMI__
|
||||||
|
#undef __DISABLE_BMI__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_BMI__ */
|
||||||
|
|
||||||
|
#endif /* _BMIINTRIN_H_INCLUDED */
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
/* Copyright (C) 2007-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _BMMINTRIN_H_INCLUDED
|
||||||
|
#define _BMMINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
# error "SSE5 instruction set removed from compiler"
|
||||||
|
|
||||||
|
#endif /* _BMMINTRIN_H_INCLUDED */
|
||||||
+93
@@ -0,0 +1,93 @@
|
|||||||
|
/* ELF program property for Intel CET.
|
||||||
|
Copyright (C) 2017-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by the
|
||||||
|
Free Software Foundation; either version 3, or (at your option) any
|
||||||
|
later version.
|
||||||
|
|
||||||
|
This file is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Add x86 feature with IBT and/or SHSTK bits to ELF program property
|
||||||
|
if they are enabled. Otherwise, contents in this header file are
|
||||||
|
unused. Define _CET_ENDBR for assembly codes. _CET_ENDBR should be
|
||||||
|
placed unconditionally at the entrance of a function whose address
|
||||||
|
may be taken. */
|
||||||
|
|
||||||
|
#ifndef _CET_H_INCLUDED
|
||||||
|
#define _CET_H_INCLUDED
|
||||||
|
|
||||||
|
#ifdef __ASSEMBLER__
|
||||||
|
|
||||||
|
# if defined __CET__ && (__CET__ & 1) != 0
|
||||||
|
# ifdef __x86_64__
|
||||||
|
# define _CET_ENDBR endbr64
|
||||||
|
# else
|
||||||
|
# define _CET_ENDBR endbr32
|
||||||
|
# endif
|
||||||
|
# else
|
||||||
|
# define _CET_ENDBR
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef __ELF__
|
||||||
|
# ifdef __CET__
|
||||||
|
# if (__CET__ & 1) != 0
|
||||||
|
/* GNU_PROPERTY_X86_FEATURE_1_IBT. */
|
||||||
|
# define __PROPERTY_IBT 0x1
|
||||||
|
# else
|
||||||
|
# define __PROPERTY_IBT 0x0
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if (__CET__ & 2) != 0
|
||||||
|
/* GNU_PROPERTY_X86_FEATURE_1_SHSTK. */
|
||||||
|
# define __PROPERTY_SHSTK 0x2
|
||||||
|
# else
|
||||||
|
# define __PROPERTY_SHSTK 0x0
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# define __PROPERTY_BITS (__PROPERTY_IBT | __PROPERTY_SHSTK)
|
||||||
|
|
||||||
|
# ifdef __LP64__
|
||||||
|
# define __PROPERTY_ALIGN 3
|
||||||
|
# else
|
||||||
|
# define __PROPERTY_ALIGN 2
|
||||||
|
# endif
|
||||||
|
|
||||||
|
.pushsection ".note.gnu.property", "a"
|
||||||
|
.p2align __PROPERTY_ALIGN
|
||||||
|
.long 1f - 0f /* name length. */
|
||||||
|
.long 4f - 1f /* data length. */
|
||||||
|
/* NT_GNU_PROPERTY_TYPE_0. */
|
||||||
|
.long 5 /* note type. */
|
||||||
|
0:
|
||||||
|
.asciz "GNU" /* vendor name. */
|
||||||
|
1:
|
||||||
|
.p2align __PROPERTY_ALIGN
|
||||||
|
/* GNU_PROPERTY_X86_FEATURE_1_AND. */
|
||||||
|
.long 0xc0000002 /* pr_type. */
|
||||||
|
.long 3f - 2f /* pr_datasz. */
|
||||||
|
2:
|
||||||
|
/* GNU_PROPERTY_X86_FEATURE_1_XXX. */
|
||||||
|
.long __PROPERTY_BITS
|
||||||
|
3:
|
||||||
|
.p2align __PROPERTY_ALIGN
|
||||||
|
4:
|
||||||
|
.popsection
|
||||||
|
# endif /* __CET__ */
|
||||||
|
# endif /* __ELF__ */
|
||||||
|
#endif /* __ASSEMBLER__ */
|
||||||
|
|
||||||
|
#endif /* _CET_H_INCLUDED */
|
||||||
+129
@@ -0,0 +1,129 @@
|
|||||||
|
/* Copyright (C) 2015-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _X86GPRINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <cetintrin.h> directly; include <x86gprintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _CETINTRIN_H_INCLUDED
|
||||||
|
#define _CETINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __SHSTK__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target ("shstk")
|
||||||
|
#define __DISABLE_SHSTK__
|
||||||
|
#endif /* __SHSTK__ */
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
extern __inline unsigned long long
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_get_ssp (void)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_rdsspq ();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
extern __inline unsigned int
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_get_ssp (void)
|
||||||
|
{
|
||||||
|
return __builtin_ia32_rdsspd ();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_inc_ssp (unsigned int __B)
|
||||||
|
{
|
||||||
|
#ifdef __x86_64__
|
||||||
|
__builtin_ia32_incsspq ((unsigned long long) __B);
|
||||||
|
#else
|
||||||
|
__builtin_ia32_incsspd (__B);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_saveprevssp (void)
|
||||||
|
{
|
||||||
|
__builtin_ia32_saveprevssp ();
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_rstorssp (void *__B)
|
||||||
|
{
|
||||||
|
__builtin_ia32_rstorssp (__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_wrssd (unsigned int __B, void *__C)
|
||||||
|
{
|
||||||
|
__builtin_ia32_wrssd (__B, __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_wrssq (unsigned long long __B, void *__C)
|
||||||
|
{
|
||||||
|
__builtin_ia32_wrssq (__B, __C);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_wrussd (unsigned int __B, void *__C)
|
||||||
|
{
|
||||||
|
__builtin_ia32_wrussd (__B, __C);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_wrussq (unsigned long long __B, void *__C)
|
||||||
|
{
|
||||||
|
__builtin_ia32_wrussq (__B, __C);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_setssbsy (void)
|
||||||
|
{
|
||||||
|
__builtin_ia32_setssbsy ();
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_clrssbsy (void *__B)
|
||||||
|
{
|
||||||
|
__builtin_ia32_clrssbsy (__B);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_SHSTK__
|
||||||
|
#undef __DISABLE_SHSTK__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_SHSTK__ */
|
||||||
|
|
||||||
|
#endif /* _CETINTRIN_H_INCLUDED. */
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
/* Copyright (C) 2018-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _X86GPRINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <cldemoteintrin.h> directly; include <x86gprintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _CLDEMOTE_H_INCLUDED
|
||||||
|
#define _CLDEMOTE_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __CLDEMOTE__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("cldemote")
|
||||||
|
#define __DISABLE_CLDEMOTE__
|
||||||
|
#endif /* __CLDEMOTE__ */
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_cldemote (void *__A)
|
||||||
|
{
|
||||||
|
__builtin_ia32_cldemote (__A);
|
||||||
|
}
|
||||||
|
#ifdef __DISABLE_CLDEMOTE__
|
||||||
|
#undef __DISABLE_CLDEMOTE__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_CLDEMOTE__ */
|
||||||
|
|
||||||
|
#endif /* _CLDEMOTE_H_INCLUDED */
|
||||||
+49
@@ -0,0 +1,49 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _X86GPRINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <clflushoptintrin.h> directly; include <x86gprintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _CLFLUSHOPTINTRIN_H_INCLUDED
|
||||||
|
#define _CLFLUSHOPTINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __CLFLUSHOPT__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("clflushopt")
|
||||||
|
#define __DISABLE_CLFLUSHOPT__
|
||||||
|
#endif /* __CLFLUSHOPT__ */
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_clflushopt (void *__A)
|
||||||
|
{
|
||||||
|
__builtin_ia32_clflushopt (__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_CLFLUSHOPT__
|
||||||
|
#undef __DISABLE_CLFLUSHOPT__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_CLFLUSHOPT__ */
|
||||||
|
|
||||||
|
#endif /* _CLFLUSHOPTINTRIN_H_INCLUDED */
|
||||||
+49
@@ -0,0 +1,49 @@
|
|||||||
|
/* Copyright (C) 2013-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _X86GPRINTRIN_H_INCLUDED
|
||||||
|
# error "Never use <clwbintrin.h> directly; include <x86gprintrin.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _CLWBINTRIN_H_INCLUDED
|
||||||
|
#define _CLWBINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __CLWB__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("clwb")
|
||||||
|
#define __DISABLE_CLWB__
|
||||||
|
#endif /* __CLWB__ */
|
||||||
|
|
||||||
|
extern __inline void
|
||||||
|
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_clwb (void *__A)
|
||||||
|
{
|
||||||
|
__builtin_ia32_clwb (__A);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_CLWB__
|
||||||
|
#undef __DISABLE_CLWB__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_CLWB__ */
|
||||||
|
|
||||||
|
#endif /* _CLWBINTRIN_H_INCLUDED */
|
||||||
+44
@@ -0,0 +1,44 @@
|
|||||||
|
/* Copyright (C) 2012-2023 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
Under Section 7 of GPL version 3, you are granted additional
|
||||||
|
permissions described in the GCC Runtime Library Exception, version
|
||||||
|
3.1, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License and
|
||||||
|
a copy of the GCC Runtime Library Exception along with this program;
|
||||||
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _CLZEROINTRIN_H_INCLUDED
|
||||||
|
#define _CLZEROINTRIN_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef __CLZERO__
|
||||||
|
#pragma GCC push_options
|
||||||
|
#pragma GCC target("clzero")
|
||||||
|
#define __DISABLE_CLZERO__
|
||||||
|
#endif /* __CLZERO__ */
|
||||||
|
|
||||||
|
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||||
|
_mm_clzero (void * __I)
|
||||||
|
{
|
||||||
|
__builtin_ia32_clzero (__I);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __DISABLE_CLZERO__
|
||||||
|
#undef __DISABLE_CLZERO__
|
||||||
|
#pragma GCC pop_options
|
||||||
|
#endif /* __DISABLE_CLZERO__ */
|
||||||
|
|
||||||
|
#endif /* _CLZEROINTRIN_H_INCLUDED */
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user