1#!/bin/bash 2 3# ULP error check script. 4# 5# Copyright (c) 2019-2024, Arm Limited. 6# SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception 7 8#set -x 9set -eu 10 11# cd to bin directory. 12cd "${0%/*}" 13 14flags="${ULPFLAGS:--q}" 15emu="$@" 16 17# Enable SVE testing 18WANT_SVE_MATH=${WANT_SVE_MATH:-0} 19 20FAIL=0 21PASS=0 22 23t() { 24 routine=$1 25 L=$(cat $LIMITS | grep "^$routine " | awk '{print $2}') 26 [[ $L =~ ^[0-9]+\.[0-9]+$ ]] 27 extra_flags= 28 [[ -z "${PRED:-}" ]] || extra_flags="$extra_flags -p $PRED" 29 [[ -z "${5:-}" ]] || extra_flags="$extra_flags -c $5" 30 grep -q "^$routine$" $FENV || extra_flags="$extra_flags -f" 31 IFS=',' read -ra LO <<< "$2" 32 IFS=',' read -ra HI <<< "$3" 33 ITV="${LO[0]} ${HI[0]}" 34 for i in "${!LO[@]}"; do 35 [[ "$i" -eq "0" ]] || ITV="$ITV x ${LO[$i]} ${HI[$i]}" 36 done 37 # Add -z flag to ignore zero sign for vector routines 38 { echo $routine | grep -q "ZGV"; } && extra_flags="$extra_flags -z" 39 $emu ./ulp -e $L $flags ${extra_flags} $routine $ITV $4 && PASS=$((PASS+1)) || FAIL=$((FAIL+1)) 40} 41 42check() { 43 $emu ./ulp -f -q "$@" #>/dev/null 44} 45 46if [ "$FUNC" == "atan2" ] || [ -z "$FUNC" ]; then 47 # Regression-test for correct NaN handling in atan2 48 check atan2 0x1p-1022 0x1p-1000 x 0 0x1p-1022 40000 49 check atan2 0x1.7887a0a717aefp+1017 0x1.7887a0a717aefp+1017 x -nan -nan 50 check atan2 nan nan x -nan -nan 51fi 52 53# vector functions 54flags="${ULPFLAGS:--q}" 55runsv= 56if [ $WANT_SVE_MATH -eq 1 ]; then 57# No guarantees about powi accuracy, so regression-test for exactness 58# w.r.t. the custom reference impl in ulp_wrappers.h 59 if [ -z "$FUNC" ] || [ "$FUNC" == "_ZGVsMxvv_powi" ]; then 60 check -q -f -e 0 _ZGVsMxvv_powi 0 inf x 0 1000 100000 && runsv=1 61 check -q -f -e 0 _ZGVsMxvv_powi -0 -inf x 0 1000 100000 && runsv=1 62 check -q -f -e 0 _ZGVsMxvv_powi 0 inf x -0 -1000 100000 && runsv=1 63 check -q -f -e 0 _ZGVsMxvv_powi -0 -inf x -0 -1000 100000 && runsv=1 64 fi 65 if [ -z "$FUNC" ] || [ "$FUNC" == "_ZGVsMxvv_powk" ]; then 66 check -q -f -e 0 _ZGVsMxvv_powk 0 inf x 0 1000 100000 && runsv=1 67 check -q -f -e 0 _ZGVsMxvv_powk -0 -inf x 0 1000 100000 && runsv=1 68 check -q -f -e 0 _ZGVsMxvv_powk 0 inf x -0 -1000 100000 && runsv=1 69 check -q -f -e 0 _ZGVsMxvv_powk -0 -inf x -0 -1000 100000 && runsv=1 70 fi 71fi 72 73while read F LO HI N C 74do 75 [[ -z $F ]] || t $F $LO $HI $N $C 76done << EOF 77$(cat $INTERVALS | grep "\b$FUNC\b") 78EOF 79 80[ 0 -eq $FAIL ] || { 81 echo "FAILED $FAIL PASSED $PASS" 82 exit 1 83} 84