xref: /netbsd-src/external/gpl3/gcc/dist/libstdc++-v3/scripts/check_simd (revision b1e838363e3c6fc78a55519254d99869742dd33c)
1*b1e83836Smrg#!/bin/sh
2*b1e83836Smrg
3*b1e83836Smrg# check_simd <srcdir> <builddir> <CXXFLAGS>
4*b1e83836Smrg# Read config from $CHECK_SIMD_CONFIG file or $target_list
5*b1e83836Smrg
6*b1e83836Smrgscriptdir="$(cd "${0%/*}" && pwd)"
7*b1e83836Smrgsrcdir="$1"
8*b1e83836Smrgbuilddir="$2"
9*b1e83836Smrgshift 2
10*b1e83836Smrgtestdir="$builddir/testsuite"
11*b1e83836Smrg
12*b1e83836SmrgCXX="$("$builddir/scripts/testsuite_flags" --build-cxx)"
13*b1e83836SmrgCXXFLAGS="$("$builddir/scripts/testsuite_flags" --cxxflags) $1 -Wno-psabi"
14*b1e83836Smrgshift
15*b1e83836SmrgINCLUDES="$("$builddir/scripts/testsuite_flags" --build-includes)"
16*b1e83836Smrg
17*b1e83836Smrgtarget_triplet=$($CXX -dumpmachine)
18*b1e83836Smrg
19*b1e83836Smrgdefine_target() {
20*b1e83836Smrg  name="$1"
21*b1e83836Smrg  flags="$2"
22*b1e83836Smrg  sim="$3"
23*b1e83836Smrg  eval "$name=\"flags=\\\"$flags\\\"
24*b1e83836Smrgsim=\\\"$sim\\\"\""
25*b1e83836Smrg}
26*b1e83836Smrg
27*b1e83836Smrgif [ -f "$CHECK_SIMD_CONFIG" ]; then
28*b1e83836Smrg  . "$CHECK_SIMD_CONFIG"
29*b1e83836Smrgelif [ -z "$CHECK_SIMD_CONFIG" ]; then
30*b1e83836Smrg  if [ -z "$target_list" ]; then
31*b1e83836Smrg    target_list="unix"
32*b1e83836Smrg    case "$target_triplet" in
33*b1e83836Smrg      x86_64-*)      target_list="unix/-march=native" ;;
34*b1e83836Smrg      i?86-*)        target_list="unix/-march=native" ;;
35*b1e83836Smrg      powerpc64le-*) target_list="unix/-mcpu=power8" ;;
36*b1e83836Smrg      aarch64-*)     target_list="unix/-mcpu=cortex-a53" ;;
37*b1e83836Smrg      arm-*)         target_list="unix/-mcpu=cortex-a7" ;;
38*b1e83836Smrg    esac
39*b1e83836Smrg  fi
40*b1e83836Smrgelse
41*b1e83836Smrg  echo "Error: File not found: \$CHECK_SIMD_CONFIG='$CHECK_SIMD_CONFIG'" 1>&2
42*b1e83836Smrg  exit 1
43*b1e83836Smrgfi
44*b1e83836Smrg
45*b1e83836Smrg# define unix with no flags and no simulator:
46*b1e83836Smrgdefine_target unix
47*b1e83836Smrg
48*b1e83836Smrglist="$target_list"
49*b1e83836Smrg
50*b1e83836Smrg# expand a{b,c} to a/b a/c
51*b1e83836Smrgwhile [ "${list#*\{}" != "${list}" ]; do
52*b1e83836Smrg  list="$(echo "$list" | \
53*b1e83836Smrg    sed -e 's#\([^ ]\+\){\([^{},]*\),\([^{}]*\)}\(/[^ ]*\)\?#\1/\2\4 \1{\3}\4#g' \
54*b1e83836Smrg        -e 's#{\([^{},]*\)}#/\1#g' \
55*b1e83836Smrg        -e 's#/ # #g' -e 's#/$##')"
56*b1e83836Smrgdone
57*b1e83836Smrg
58*b1e83836Smrg# per a/b/c block extract flags and simulator, then make check-simd
59*b1e83836Smrgwhile [ ${#list} -gt 0 ]; do
60*b1e83836Smrg  a="${list%% *}"
61*b1e83836Smrg  if [ "$a" = "$list" ]; then
62*b1e83836Smrg    list=""
63*b1e83836Smrg  else
64*b1e83836Smrg    list="${list#${a} }"
65*b1e83836Smrg  fi
66*b1e83836Smrg  b="${a%%/*}"
67*b1e83836Smrg  eval "eval \"\$$b\""
68*b1e83836Smrg  flags="${flags}$(echo "${a#${b}}"|sed 's#/# #g')"
69*b1e83836Smrg  subdir="simd/$(echo "$flags" | sed 's#[= /-]##g')"
70*b1e83836Smrg  rm -f "${subdir}/Makefile"
71*b1e83836Smrg  $srcdir/testsuite/experimental/simd/generate_makefile.sh \
72*b1e83836Smrg    --destination="$testdir/$subdir" --sim="$sim" --testflags="$flags" \
73*b1e83836Smrg    $CXX $INCLUDES $CXXFLAGS -static-libgcc -static-libstdc++
74*b1e83836Smrg  echo "$subdir"
75*b1e83836Smrgdone
76