Add tools
This commit is contained in:
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/cargo
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/cargo
Executable file
Binary file not shown.
28
tools/bin/x86_64-unknown-redox/toolchain/bin/rust-gdb
Executable file
28
tools/bin/x86_64-unknown-redox/toolchain/bin/rust-gdb
Executable file
@@ -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" \
|
||||
"$@"
|
||||
|
||||
67
tools/bin/x86_64-unknown-redox/toolchain/bin/rust-gdbgui
Executable file
67
tools/bin/x86_64-unknown-redox/toolchain/bin/rust-gdbgui
Executable file
@@ -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
tools/bin/x86_64-unknown-redox/toolchain/bin/rust-lldb
Executable file
37
tools/bin/x86_64-unknown-redox/toolchain/bin/rust-lldb
Executable file
@@ -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
tools/bin/x86_64-unknown-redox/toolchain/bin/rustc
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/rustc
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-addr2line
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-addr2line
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-ar
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-ar
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-as
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-as
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-c++
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-c++
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-c++filt
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-c++filt
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-cpp
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-cpp
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-elfedit
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-elfedit
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-g++
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-g++
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc-13.2.0
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc-13.2.0
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc-ar
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc-ar
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc-nm
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc-nm
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc-ranlib
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcc-ranlib
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcov
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcov
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcov-dump
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcov-dump
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcov-tool
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gcov-tool
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gdb
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gdb
Executable file
Binary file not shown.
188
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gdb-add-index
Executable file
188
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gdb-add-index
Executable file
@@ -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
|
||||
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gprof
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-gprof
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-ld
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-ld
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-ld.bfd
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-ld.bfd
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-lto-dump
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-lto-dump
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-nm
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-nm
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-objcopy
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-objcopy
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-objdump
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-objdump
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-ranlib
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-ranlib
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-readelf
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-readelf
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-size
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-size
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-strings
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-strings
Executable file
Binary file not shown.
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-strip
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/bin/x86_64-unknown-redox-strip
Executable file
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
|
||||
BIN
tools/bin/x86_64-unknown-redox/toolchain/lib/bfd-plugins/libdep.so
Executable file
BIN
tools/bin/x86_64-unknown-redox/toolchain/lib/bfd-plugins/libdep.so
Executable file
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,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".
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
@@ -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 */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
@@ -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__ */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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. */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -0,0 +1,89 @@
|
||||
/* 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 <cmpccxaddintrin.h> directly; include <x86gprintrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef _CMPCCXADDINTRIN_H_INCLUDED
|
||||
#define _CMPCCXADDINTRIN_H_INCLUDED
|
||||
|
||||
#ifdef __x86_64__
|
||||
|
||||
#ifndef __CMPCCXADD__
|
||||
#pragma GCC push_options
|
||||
#pragma GCC target("cmpccxadd")
|
||||
#define __DISABLE_CMPCCXADD__
|
||||
#endif /* __CMPCCXADD__ */
|
||||
|
||||
typedef enum {
|
||||
_CMPCCX_O, /* Overflow. */
|
||||
_CMPCCX_NO, /* No overflow. */
|
||||
_CMPCCX_B, /* Below. */
|
||||
_CMPCCX_NB, /* Not below. */
|
||||
_CMPCCX_Z, /* Zero. */
|
||||
_CMPCCX_NZ, /* Not zero. */
|
||||
_CMPCCX_BE, /* Below or equal. */
|
||||
_CMPCCX_NBE, /* Neither below nor equal. */
|
||||
_CMPCCX_S, /* Sign. */
|
||||
_CMPCCX_NS, /* No sign. */
|
||||
_CMPCCX_P, /* Parity. */
|
||||
_CMPCCX_NP, /* No parity. */
|
||||
_CMPCCX_L, /* Less. */
|
||||
_CMPCCX_NL, /* Not less. */
|
||||
_CMPCCX_LE, /* Less or equal. */
|
||||
_CMPCCX_NLE, /* Neither less nor equal. */
|
||||
} _CMPCCX_ENUM;
|
||||
|
||||
#ifdef __OPTIMIZE__
|
||||
extern __inline int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
_cmpccxadd_epi32 (int *__A, int __B, int __C, const _CMPCCX_ENUM __D)
|
||||
{
|
||||
return __builtin_ia32_cmpccxadd (__A, __B, __C, __D);
|
||||
}
|
||||
|
||||
extern __inline long long
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
_cmpccxadd_epi64 (long long *__A, long long __B, long long __C,
|
||||
const _CMPCCX_ENUM __D)
|
||||
{
|
||||
return __builtin_ia32_cmpccxadd64 (__A, __B, __C, __D);
|
||||
}
|
||||
#else
|
||||
#define _cmpccxadd_epi32(A,B,C,D) \
|
||||
__builtin_ia32_cmpccxadd ((int *) (A), (int) (B), (int) (C), \
|
||||
(_CMPCCX_ENUM) (D))
|
||||
#define _cmpccxadd_epi64(A,B,C,D) \
|
||||
__builtin_ia32_cmpccxadd64 ((long long *) (A), (long long) (B), \
|
||||
(long long) (C), (_CMPCCX_ENUM) (D))
|
||||
#endif
|
||||
|
||||
#ifdef __DISABLE_CMPCCXADD__
|
||||
#undef __DISABLE_CMPCCXADD__
|
||||
#pragma GCC pop_options
|
||||
#endif /* __DISABLE_CMPCCXADD__ */
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _CMPCCXADDINTRIN_H_INCLUDED */
|
||||
@@ -0,0 +1,348 @@
|
||||
/*
|
||||
* Copyright (C) 2007-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/>.
|
||||
*/
|
||||
|
||||
#ifndef _CPUID_H_INCLUDED
|
||||
#define _CPUID_H_INCLUDED
|
||||
|
||||
/* %eax */
|
||||
#define bit_RAOINT (1 << 3)
|
||||
#define bit_AVXVNNI (1 << 4)
|
||||
#define bit_AVX512BF16 (1 << 5)
|
||||
#define bit_CMPCCXADD (1 << 7)
|
||||
#define bit_AMX_FP16 (1 << 21)
|
||||
#define bit_HRESET (1 << 22)
|
||||
#define bit_AVXIFMA (1 << 23)
|
||||
|
||||
/* %ecx */
|
||||
#define bit_SSE3 (1 << 0)
|
||||
#define bit_PCLMUL (1 << 1)
|
||||
#define bit_LZCNT (1 << 5)
|
||||
#define bit_SSSE3 (1 << 9)
|
||||
#define bit_FMA (1 << 12)
|
||||
#define bit_CMPXCHG16B (1 << 13)
|
||||
#define bit_SSE4_1 (1 << 19)
|
||||
#define bit_SSE4_2 (1 << 20)
|
||||
#define bit_MOVBE (1 << 22)
|
||||
#define bit_POPCNT (1 << 23)
|
||||
#define bit_AES (1 << 25)
|
||||
#define bit_XSAVE (1 << 26)
|
||||
#define bit_OSXSAVE (1 << 27)
|
||||
#define bit_AVX (1 << 28)
|
||||
#define bit_F16C (1 << 29)
|
||||
#define bit_RDRND (1 << 30)
|
||||
|
||||
/* %edx */
|
||||
#define bit_AVXVNNIINT8 (1 << 4)
|
||||
#define bit_AVXNECONVERT (1 << 5)
|
||||
#define bit_CMPXCHG8B (1 << 8)
|
||||
#define bit_PREFETCHI (1 << 14)
|
||||
#define bit_CMOV (1 << 15)
|
||||
#define bit_MMX (1 << 23)
|
||||
#define bit_FXSAVE (1 << 24)
|
||||
#define bit_SSE (1 << 25)
|
||||
#define bit_SSE2 (1 << 26)
|
||||
|
||||
/* Extended Features (%eax == 0x80000001) */
|
||||
/* %ecx */
|
||||
#define bit_LAHF_LM (1 << 0)
|
||||
#define bit_ABM (1 << 5)
|
||||
#define bit_SSE4a (1 << 6)
|
||||
#define bit_PRFCHW (1 << 8)
|
||||
#define bit_XOP (1 << 11)
|
||||
#define bit_LWP (1 << 15)
|
||||
#define bit_FMA4 (1 << 16)
|
||||
#define bit_TBM (1 << 21)
|
||||
#define bit_MWAITX (1 << 29)
|
||||
|
||||
/* %edx */
|
||||
#define bit_MMXEXT (1 << 22)
|
||||
#define bit_LM (1 << 29)
|
||||
#define bit_3DNOWP (1 << 30)
|
||||
#define bit_3DNOW (1u << 31)
|
||||
|
||||
/* %ebx */
|
||||
#define bit_CLZERO (1 << 0)
|
||||
#define bit_WBNOINVD (1 << 9)
|
||||
|
||||
/* Extended Features (%eax == 7) */
|
||||
/* %ebx */
|
||||
#define bit_FSGSBASE (1 << 0)
|
||||
#define bit_SGX (1 << 2)
|
||||
#define bit_BMI (1 << 3)
|
||||
#define bit_HLE (1 << 4)
|
||||
#define bit_AVX2 (1 << 5)
|
||||
#define bit_BMI2 (1 << 8)
|
||||
#define bit_RTM (1 << 11)
|
||||
#define bit_AVX512F (1 << 16)
|
||||
#define bit_AVX512DQ (1 << 17)
|
||||
#define bit_RDSEED (1 << 18)
|
||||
#define bit_ADX (1 << 19)
|
||||
#define bit_AVX512IFMA (1 << 21)
|
||||
#define bit_CLFLUSHOPT (1 << 23)
|
||||
#define bit_CLWB (1 << 24)
|
||||
#define bit_AVX512PF (1 << 26)
|
||||
#define bit_AVX512ER (1 << 27)
|
||||
#define bit_AVX512CD (1 << 28)
|
||||
#define bit_SHA (1 << 29)
|
||||
#define bit_AVX512BW (1 << 30)
|
||||
#define bit_AVX512VL (1u << 31)
|
||||
|
||||
/* %ecx */
|
||||
#define bit_PREFETCHWT1 (1 << 0)
|
||||
#define bit_AVX512VBMI (1 << 1)
|
||||
#define bit_PKU (1 << 3)
|
||||
#define bit_OSPKE (1 << 4)
|
||||
#define bit_WAITPKG (1 << 5)
|
||||
#define bit_AVX512VBMI2 (1 << 6)
|
||||
#define bit_SHSTK (1 << 7)
|
||||
#define bit_GFNI (1 << 8)
|
||||
#define bit_VAES (1 << 9)
|
||||
#define bit_AVX512VNNI (1 << 11)
|
||||
#define bit_VPCLMULQDQ (1 << 10)
|
||||
#define bit_AVX512BITALG (1 << 12)
|
||||
#define bit_AVX512VPOPCNTDQ (1 << 14)
|
||||
#define bit_RDPID (1 << 22)
|
||||
#define bit_MOVDIRI (1 << 27)
|
||||
#define bit_MOVDIR64B (1 << 28)
|
||||
#define bit_ENQCMD (1 << 29)
|
||||
#define bit_CLDEMOTE (1 << 25)
|
||||
#define bit_KL (1 << 23)
|
||||
|
||||
/* %edx */
|
||||
#define bit_AVX5124VNNIW (1 << 2)
|
||||
#define bit_AVX5124FMAPS (1 << 3)
|
||||
#define bit_AVX512VP2INTERSECT (1 << 8)
|
||||
#define bit_AVX512FP16 (1 << 23)
|
||||
#define bit_IBT (1 << 20)
|
||||
#define bit_UINTR (1 << 5)
|
||||
#define bit_PCONFIG (1 << 18)
|
||||
#define bit_SERIALIZE (1 << 14)
|
||||
#define bit_TSXLDTRK (1 << 16)
|
||||
#define bit_AMX_BF16 (1 << 22)
|
||||
#define bit_AMX_TILE (1 << 24)
|
||||
#define bit_AMX_INT8 (1 << 25)
|
||||
#define bit_AMX_COMPLEX (1 << 8)
|
||||
|
||||
/* Extended State Enumeration Sub-leaf (%eax == 0xd, %ecx == 1) */
|
||||
#define bit_XSAVEOPT (1 << 0)
|
||||
#define bit_XSAVEC (1 << 1)
|
||||
#define bit_XSAVES (1 << 3)
|
||||
|
||||
/* PT sub leaf (%eax == 0x14, %ecx == 0) */
|
||||
/* %ebx */
|
||||
#define bit_PTWRITE (1 << 4)
|
||||
|
||||
/* Keylocker leaf (%eax == 0x19) */
|
||||
/* %ebx */
|
||||
#define bit_AESKLE ( 1<<0 )
|
||||
#define bit_WIDEKL ( 1<<2 )
|
||||
|
||||
|
||||
/* Signatures for different CPU implementations as returned in uses
|
||||
of cpuid with level 0. */
|
||||
#define signature_AMD_ebx 0x68747541
|
||||
#define signature_AMD_ecx 0x444d4163
|
||||
#define signature_AMD_edx 0x69746e65
|
||||
|
||||
#define signature_CENTAUR_ebx 0x746e6543
|
||||
#define signature_CENTAUR_ecx 0x736c7561
|
||||
#define signature_CENTAUR_edx 0x48727561
|
||||
|
||||
#define signature_CYRIX_ebx 0x69727943
|
||||
#define signature_CYRIX_ecx 0x64616574
|
||||
#define signature_CYRIX_edx 0x736e4978
|
||||
|
||||
#define signature_INTEL_ebx 0x756e6547
|
||||
#define signature_INTEL_ecx 0x6c65746e
|
||||
#define signature_INTEL_edx 0x49656e69
|
||||
|
||||
#define signature_TM1_ebx 0x6e617254
|
||||
#define signature_TM1_ecx 0x55504361
|
||||
#define signature_TM1_edx 0x74656d73
|
||||
|
||||
#define signature_TM2_ebx 0x756e6547
|
||||
#define signature_TM2_ecx 0x3638784d
|
||||
#define signature_TM2_edx 0x54656e69
|
||||
|
||||
#define signature_NSC_ebx 0x646f6547
|
||||
#define signature_NSC_ecx 0x43534e20
|
||||
#define signature_NSC_edx 0x79622065
|
||||
|
||||
#define signature_NEXGEN_ebx 0x4778654e
|
||||
#define signature_NEXGEN_ecx 0x6e657669
|
||||
#define signature_NEXGEN_edx 0x72446e65
|
||||
|
||||
#define signature_RISE_ebx 0x65736952
|
||||
#define signature_RISE_ecx 0x65736952
|
||||
#define signature_RISE_edx 0x65736952
|
||||
|
||||
#define signature_SIS_ebx 0x20536953
|
||||
#define signature_SIS_ecx 0x20536953
|
||||
#define signature_SIS_edx 0x20536953
|
||||
|
||||
#define signature_UMC_ebx 0x20434d55
|
||||
#define signature_UMC_ecx 0x20434d55
|
||||
#define signature_UMC_edx 0x20434d55
|
||||
|
||||
#define signature_VIA_ebx 0x20414956
|
||||
#define signature_VIA_ecx 0x20414956
|
||||
#define signature_VIA_edx 0x20414956
|
||||
|
||||
#define signature_VORTEX_ebx 0x74726f56
|
||||
#define signature_VORTEX_ecx 0x436f5320
|
||||
#define signature_VORTEX_edx 0x36387865
|
||||
|
||||
#define signature_SHANGHAI_ebx 0x68532020
|
||||
#define signature_SHANGHAI_ecx 0x20206961
|
||||
#define signature_SHANGHAI_edx 0x68676e61
|
||||
|
||||
#ifndef __x86_64__
|
||||
/* At least one cpu (Winchip 2) does not set %ebx and %ecx
|
||||
for cpuid leaf 1. Forcibly zero the two registers before
|
||||
calling cpuid as a precaution. */
|
||||
#define __cpuid(level, a, b, c, d) \
|
||||
do { \
|
||||
if (__builtin_constant_p (level) && (level) != 1) \
|
||||
__asm__ __volatile__ ("cpuid\n\t" \
|
||||
: "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
|
||||
: "0" (level)); \
|
||||
else \
|
||||
__asm__ __volatile__ ("cpuid\n\t" \
|
||||
: "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
|
||||
: "0" (level), "1" (0), "2" (0)); \
|
||||
} while (0)
|
||||
#else
|
||||
#define __cpuid(level, a, b, c, d) \
|
||||
__asm__ __volatile__ ("cpuid\n\t" \
|
||||
: "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
|
||||
: "0" (level))
|
||||
#endif
|
||||
|
||||
#define __cpuid_count(level, count, a, b, c, d) \
|
||||
__asm__ __volatile__ ("cpuid\n\t" \
|
||||
: "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
|
||||
: "0" (level), "2" (count))
|
||||
|
||||
|
||||
/* Return highest supported input value for cpuid instruction. ext can
|
||||
be either 0x0 or 0x80000000 to return highest supported value for
|
||||
basic or extended cpuid information. Function returns 0 if cpuid
|
||||
is not supported or whatever cpuid returns in eax register. If sig
|
||||
pointer is non-null, then first four bytes of the signature
|
||||
(as found in ebx register) are returned in location pointed by sig. */
|
||||
|
||||
static __inline unsigned int
|
||||
__get_cpuid_max (unsigned int __ext, unsigned int *__sig)
|
||||
{
|
||||
unsigned int __eax, __ebx, __ecx, __edx;
|
||||
|
||||
#ifndef __x86_64__
|
||||
/* See if we can use cpuid. On AMD64 we always can. */
|
||||
#if __GNUC__ >= 3
|
||||
__asm__ ("pushf{l|d}\n\t"
|
||||
"pushf{l|d}\n\t"
|
||||
"pop{l}\t%0\n\t"
|
||||
"mov{l}\t{%0, %1|%1, %0}\n\t"
|
||||
"xor{l}\t{%2, %0|%0, %2}\n\t"
|
||||
"push{l}\t%0\n\t"
|
||||
"popf{l|d}\n\t"
|
||||
"pushf{l|d}\n\t"
|
||||
"pop{l}\t%0\n\t"
|
||||
"popf{l|d}\n\t"
|
||||
: "=&r" (__eax), "=&r" (__ebx)
|
||||
: "i" (0x00200000));
|
||||
#else
|
||||
/* Host GCCs older than 3.0 weren't supporting Intel asm syntax
|
||||
nor alternatives in i386 code. */
|
||||
__asm__ ("pushfl\n\t"
|
||||
"pushfl\n\t"
|
||||
"popl\t%0\n\t"
|
||||
"movl\t%0, %1\n\t"
|
||||
"xorl\t%2, %0\n\t"
|
||||
"pushl\t%0\n\t"
|
||||
"popfl\n\t"
|
||||
"pushfl\n\t"
|
||||
"popl\t%0\n\t"
|
||||
"popfl\n\t"
|
||||
: "=&r" (__eax), "=&r" (__ebx)
|
||||
: "i" (0x00200000));
|
||||
#endif
|
||||
|
||||
if (!((__eax ^ __ebx) & 0x00200000))
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
/* Host supports cpuid. Return highest supported cpuid input value. */
|
||||
__cpuid (__ext, __eax, __ebx, __ecx, __edx);
|
||||
|
||||
if (__sig)
|
||||
*__sig = __ebx;
|
||||
|
||||
return __eax;
|
||||
}
|
||||
|
||||
/* Return cpuid data for requested cpuid leaf, as found in returned
|
||||
eax, ebx, ecx and edx registers. The function checks if cpuid is
|
||||
supported and returns 1 for valid cpuid information or 0 for
|
||||
unsupported cpuid leaf. All pointers are required to be non-null. */
|
||||
|
||||
static __inline int
|
||||
__get_cpuid (unsigned int __leaf,
|
||||
unsigned int *__eax, unsigned int *__ebx,
|
||||
unsigned int *__ecx, unsigned int *__edx)
|
||||
{
|
||||
unsigned int __ext = __leaf & 0x80000000;
|
||||
unsigned int __maxlevel = __get_cpuid_max (__ext, 0);
|
||||
|
||||
if (__maxlevel == 0 || __maxlevel < __leaf)
|
||||
return 0;
|
||||
|
||||
__cpuid (__leaf, *__eax, *__ebx, *__ecx, *__edx);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Same as above, but sub-leaf can be specified. */
|
||||
|
||||
static __inline int
|
||||
__get_cpuid_count (unsigned int __leaf, unsigned int __subleaf,
|
||||
unsigned int *__eax, unsigned int *__ebx,
|
||||
unsigned int *__ecx, unsigned int *__edx)
|
||||
{
|
||||
unsigned int __ext = __leaf & 0x80000000;
|
||||
unsigned int __maxlevel = __get_cpuid_max (__ext, 0);
|
||||
|
||||
if (__maxlevel == 0 || __maxlevel < __leaf)
|
||||
return 0;
|
||||
|
||||
__cpuid_count (__leaf, __subleaf, *__eax, *__ebx, *__ecx, *__edx);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static __inline void
|
||||
__cpuidex (int __cpuid_info[4], int __leaf, int __subleaf)
|
||||
{
|
||||
__cpuid_count (__leaf, __subleaf, __cpuid_info[0], __cpuid_info[1],
|
||||
__cpuid_info[2], __cpuid_info[3]);
|
||||
}
|
||||
|
||||
#endif /* _CPUID_H_INCLUDED */
|
||||
@@ -0,0 +1,72 @@
|
||||
/* Copyright (C) 2002-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 __CROSS_STDARG_H_INCLUDED
|
||||
#define __CROSS_STDARG_H_INCLUDED
|
||||
|
||||
/* Make sure that for non x64 targets cross builtins are defined. */
|
||||
#ifndef __x86_64__
|
||||
/* Call abi ms_abi. */
|
||||
#define __builtin_ms_va_list __builtin_va_list
|
||||
#define __builtin_ms_va_copy __builtin_va_copy
|
||||
#define __builtin_ms_va_start __builtin_va_start
|
||||
#define __builtin_ms_va_end __builtin_va_end
|
||||
|
||||
/* Call abi sysv_abi. */
|
||||
#define __builtin_sysv_va_list __builtin_va_list
|
||||
#define __builtin_sysv_va_copy __builtin_va_copy
|
||||
#define __builtin_sysv_va_start __builtin_va_start
|
||||
#define __builtin_sysv_va_end __builtin_va_end
|
||||
#endif
|
||||
|
||||
#define __ms_va_copy(__d,__s) __builtin_ms_va_copy(__d,__s)
|
||||
#define __ms_va_start(__v,__l) __builtin_ms_va_start(__v,__l)
|
||||
#define __ms_va_arg(__v,__l) __builtin_va_arg(__v,__l)
|
||||
#define __ms_va_end(__v) __builtin_ms_va_end(__v)
|
||||
|
||||
#define __sysv_va_copy(__d,__s) __builtin_sysv_va_copy(__d,__s)
|
||||
#define __sysv_va_start(__v,__l) __builtin_sysv_va_start(__v,__l)
|
||||
#define __sysv_va_arg(__v,__l) __builtin_va_arg(__v,__l)
|
||||
#define __sysv_va_end(__v) __builtin_sysv_va_end(__v)
|
||||
|
||||
#ifndef __GNUC_SYSV_VA_LIST
|
||||
#define __GNUC_SYSV_VA_LIST
|
||||
typedef __builtin_sysv_va_list __gnuc_sysv_va_list;
|
||||
#endif
|
||||
|
||||
#ifndef _SYSV_VA_LIST_DEFINED
|
||||
#define _SYSV_VA_LIST_DEFINED
|
||||
typedef __gnuc_sysv_va_list sysv_va_list;
|
||||
#endif
|
||||
|
||||
#ifndef __GNUC_MS_VA_LIST
|
||||
#define __GNUC_MS_VA_LIST
|
||||
typedef __builtin_ms_va_list __gnuc_ms_va_list;
|
||||
#endif
|
||||
|
||||
#ifndef _MS_VA_LIST_DEFINED
|
||||
#define _MS_VA_LIST_DEFINED
|
||||
typedef __gnuc_ms_va_list ms_va_list;
|
||||
#endif
|
||||
|
||||
#endif /* __CROSS_STDARG_H_INCLUDED */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,55 @@
|
||||
/* 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 _X86GPRINTRIN_H_INCLUDED
|
||||
# error "Never use <enqcmdintrin.h> directly; include <x86gprintrin.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef _ENQCMDINTRIN_H_INCLUDED
|
||||
#define _ENQCMDINTRIN_H_INCLUDED
|
||||
|
||||
#ifndef __ENQCMD__
|
||||
#pragma GCC push_options
|
||||
#pragma GCC target ("enqcmd")
|
||||
#define __DISABLE_ENQCMD__
|
||||
#endif /* __ENQCMD__ */
|
||||
|
||||
extern __inline int
|
||||
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||
_enqcmd (void * __P, const void * __Q)
|
||||
{
|
||||
return __builtin_ia32_enqcmd (__P, __Q);
|
||||
}
|
||||
|
||||
extern __inline int
|
||||
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
|
||||
_enqcmds (void * __P, const void * __Q)
|
||||
{
|
||||
return __builtin_ia32_enqcmds (__P, __Q);
|
||||
}
|
||||
|
||||
#ifdef __DISABLE_ENQCMD__
|
||||
#undef __DISABLE_ENQCMD__
|
||||
#pragma GCC pop_options
|
||||
#endif /* __DISABLE_ENQCMD__ */
|
||||
#endif /* _ENQCMDINTRIN_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