Szabolcs Nagy | 3a1d8e6 | 2019-07-18 10:17:08 +0100 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
| 3 | # ULP error check script. |
| 4 | # |
| 5 | # Copyright (c) 2019, Arm Limited. |
| 6 | # SPDX-License-Identifier: MIT |
| 7 | |
| 8 | #set -x |
| 9 | set -eu |
| 10 | |
| 11 | # cd to bin directory. |
| 12 | cd "${0%/*}" |
| 13 | |
| 14 | rmodes='n u d z' |
| 15 | #rmodes=n |
Szabolcs Nagy | ef987d3 | 2019-10-08 17:36:27 +0100 | [diff] [blame] | 16 | flags="${ULPFLAGS:--q}" |
Szabolcs Nagy | 3a1d8e6 | 2019-07-18 10:17:08 +0100 | [diff] [blame] | 17 | emu="$@" |
| 18 | |
Szabolcs Nagy | 8dcd063 | 2019-10-08 11:02:21 +0100 | [diff] [blame] | 19 | FAIL=0 |
| 20 | PASS=0 |
| 21 | |
Szabolcs Nagy | 3a1d8e6 | 2019-07-18 10:17:08 +0100 | [diff] [blame] | 22 | t() { |
| 23 | [ $r = "n" ] && Lt=$L || Lt=$Ldir |
Szabolcs Nagy | 8dcd063 | 2019-10-08 11:02:21 +0100 | [diff] [blame] | 24 | $emu ./ulp -r $r -e $Lt $flags "$@" && PASS=$((PASS+1)) || FAIL=$((FAIL+1)) |
Szabolcs Nagy | 3a1d8e6 | 2019-07-18 10:17:08 +0100 | [diff] [blame] | 25 | } |
| 26 | |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 27 | check() { |
| 28 | $emu ./ulp -f -q "$@" >/dev/null |
| 29 | } |
| 30 | |
Szabolcs Nagy | 3a1d8e6 | 2019-07-18 10:17:08 +0100 | [diff] [blame] | 31 | Ldir=0.5 |
| 32 | for r in $rmodes |
| 33 | do |
| 34 | L=0.01 |
| 35 | t exp 0 0xffff000000000000 10000 |
| 36 | t exp 0x1p-6 0x1p6 40000 |
| 37 | t exp -0x1p-6 -0x1p6 40000 |
| 38 | t exp 633.3 733.3 10000 |
| 39 | t exp -633.3 -777.3 10000 |
| 40 | |
| 41 | L=0.01 |
| 42 | t exp2 0 0xffff000000000000 10000 |
| 43 | t exp2 0x1p-6 0x1p6 40000 |
| 44 | t exp2 -0x1p-6 -0x1p6 40000 |
| 45 | t exp2 633.3 733.3 10000 |
| 46 | t exp2 -633.3 -777.3 10000 |
| 47 | |
Szabolcs Nagy | 33ba190 | 2020-01-14 10:15:58 +0000 | [diff] [blame] | 48 | L=0.02 |
| 49 | t log 0 0xffff000000000000 10000 |
| 50 | t log 0x1p-4 0x1p4 40000 |
| 51 | t log 0 inf 40000 |
| 52 | |
| 53 | L=0.05 |
| 54 | t log2 0 0xffff000000000000 10000 |
| 55 | t log2 0x1p-4 0x1p4 40000 |
| 56 | t log2 0 inf 40000 |
| 57 | |
Szabolcs Nagy | 3a1d8e6 | 2019-07-18 10:17:08 +0100 | [diff] [blame] | 58 | L=0.05 |
| 59 | t pow 0.5 2.0 x 0 inf 20000 |
| 60 | t pow -0.5 -2.0 x 0 inf 20000 |
| 61 | t pow 0.5 2.0 x -0 -inf 20000 |
| 62 | t pow -0.5 -2.0 x -0 -inf 20000 |
| 63 | t pow 0.5 2.0 x 0x1p-10 0x1p10 40000 |
| 64 | t pow 0.5 2.0 x -0x1p-10 -0x1p10 40000 |
| 65 | t pow 0 inf x 0.5 2.0 80000 |
| 66 | t pow 0 inf x -0.5 -2.0 80000 |
| 67 | t pow 0x1.fp-1 0x1.08p0 x 0x1p8 0x1p17 80000 |
| 68 | t pow 0x1.fp-1 0x1.08p0 x -0x1p8 -0x1p17 80000 |
| 69 | t pow 0 0x1p-1000 x 0 1.0 50000 |
| 70 | t pow 0x1p1000 inf x 0 1.0 50000 |
| 71 | t pow 0x1.ffffffffffff0p-1 0x1.0000000000008p0 x 0x1p60 0x1p68 50000 |
| 72 | t pow 0x1.ffffffffff000p-1 0x1p0 x 0x1p50 0x1p52 50000 |
| 73 | t pow -0x1.ffffffffff000p-1 -0x1p0 x 0x1p50 0x1p52 50000 |
| 74 | |
| 75 | L=0.01 |
| 76 | t expf 0 0xffff0000 10000 |
| 77 | t expf 0x1p-14 0x1p8 50000 |
| 78 | t expf -0x1p-14 -0x1p8 50000 |
| 79 | |
| 80 | L=0.01 |
| 81 | t exp2f 0 0xffff0000 10000 |
| 82 | t exp2f 0x1p-14 0x1p8 50000 |
| 83 | t exp2f -0x1p-14 -0x1p8 50000 |
| 84 | |
Szabolcs Nagy | 33ba190 | 2020-01-14 10:15:58 +0000 | [diff] [blame] | 85 | L=0.32 |
| 86 | t logf 0 0xffff0000 10000 |
| 87 | t logf 0x1p-4 0x1p4 50000 |
| 88 | t logf 0 inf 50000 |
| 89 | |
| 90 | L=0.26 |
| 91 | t log2f 0 0xffff0000 10000 |
| 92 | t log2f 0x1p-4 0x1p4 50000 |
| 93 | t log2f 0 inf 50000 |
| 94 | |
Szabolcs Nagy | 3a1d8e6 | 2019-07-18 10:17:08 +0100 | [diff] [blame] | 95 | L=0.06 |
| 96 | t sinf 0 0xffff0000 10000 |
| 97 | t sinf 0x1p-14 0x1p54 50000 |
| 98 | t sinf -0x1p-14 -0x1p54 50000 |
| 99 | |
| 100 | L=0.06 |
| 101 | t cosf 0 0xffff0000 10000 |
| 102 | t cosf 0x1p-14 0x1p54 50000 |
| 103 | t cosf -0x1p-14 -0x1p54 50000 |
| 104 | |
Szabolcs Nagy | 33ba190 | 2020-01-14 10:15:58 +0000 | [diff] [blame] | 105 | L=0.06 |
| 106 | t sincosf_sinf 0 0xffff0000 10000 |
| 107 | t sincosf_sinf 0x1p-14 0x1p54 50000 |
| 108 | t sincosf_sinf -0x1p-14 -0x1p54 50000 |
| 109 | |
| 110 | L=0.06 |
| 111 | t sincosf_cosf 0 0xffff0000 10000 |
| 112 | t sincosf_cosf 0x1p-14 0x1p54 50000 |
| 113 | t sincosf_cosf -0x1p-14 -0x1p54 50000 |
| 114 | |
Szabolcs Nagy | 3a1d8e6 | 2019-07-18 10:17:08 +0100 | [diff] [blame] | 115 | L=0.4 |
| 116 | t powf 0x1p-1 0x1p1 x 0x1p-7 0x1p7 50000 |
| 117 | t powf 0x1p-1 0x1p1 x -0x1p-7 -0x1p7 50000 |
| 118 | t powf 0x1p-70 0x1p70 x 0x1p-1 0x1p1 50000 |
| 119 | t powf 0x1p-70 0x1p70 x -0x1p-1 -0x1p1 50000 |
| 120 | t powf 0x1.ep-1 0x1.1p0 x 0x1p8 0x1p14 50000 |
| 121 | t powf 0x1.ep-1 0x1.1p0 x -0x1p8 -0x1p14 50000 |
| 122 | done |
Szabolcs Nagy | 8dcd063 | 2019-10-08 11:02:21 +0100 | [diff] [blame] | 123 | |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 124 | # vector functions |
| 125 | Ldir=0.5 |
| 126 | r='n' |
| 127 | flags="${ULPFLAGS:--q} -f" |
Szabolcs Nagy | 1f3b163 | 2019-11-06 19:41:30 +0000 | [diff] [blame] | 128 | runs= |
| 129 | check __s_exp 1 && runs=1 |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 130 | runv= |
| 131 | check __v_exp 1 && runv=1 |
| 132 | runvn= |
| 133 | check __vn_exp 1 && runvn=1 |
| 134 | |
| 135 | range_exp=' |
| 136 | 0 0xffff000000000000 10000 |
| 137 | 0x1p-6 0x1p6 400000 |
| 138 | -0x1p-6 -0x1p6 400000 |
| 139 | 633.3 733.3 10000 |
| 140 | -633.3 -777.3 10000 |
| 141 | ' |
| 142 | |
Szabolcs Nagy | 33ba190 | 2020-01-14 10:15:58 +0000 | [diff] [blame] | 143 | range_log=' |
| 144 | 0 0xffff000000000000 10000 |
| 145 | 0x1p-4 0x1p4 400000 |
| 146 | 0 inf 400000 |
| 147 | ' |
| 148 | |
Szabolcs Nagy | a807c9b | 2020-01-10 15:10:45 +0000 | [diff] [blame] | 149 | range_pow=' |
| 150 | 0x1p-1 0x1p1 x 0x1p-10 0x1p10 50000 |
| 151 | 0x1p-1 0x1p1 x -0x1p-10 -0x1p10 50000 |
| 152 | 0x1p-500 0x1p500 x 0x1p-1 0x1p1 50000 |
| 153 | 0x1p-500 0x1p500 x -0x1p-1 -0x1p1 50000 |
| 154 | 0x1.ep-1 0x1.1p0 x 0x1p8 0x1p16 50000 |
| 155 | 0x1.ep-1 0x1.1p0 x -0x1p8 -0x1p16 50000 |
| 156 | ' |
| 157 | |
Szabolcs Nagy | 33ba190 | 2020-01-14 10:15:58 +0000 | [diff] [blame] | 158 | range_sin=' |
| 159 | 0 0xffff000000000000 10000 |
| 160 | 0x1p-4 0x1p4 400000 |
| 161 | -0x1p-23 0x1p23 400000 |
| 162 | ' |
| 163 | range_cos="$range_sin" |
| 164 | |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 165 | range_expf=' |
| 166 | 0 0xffff0000 10000 |
| 167 | 0x1p-14 0x1p8 500000 |
| 168 | -0x1p-14 -0x1p8 500000 |
| 169 | ' |
| 170 | |
| 171 | range_expf_1u="$range_expf" |
Szabolcs Nagy | 69170e1 | 2019-10-14 15:21:28 +0100 | [diff] [blame] | 172 | range_exp2f="$range_expf" |
| 173 | range_exp2f_1u="$range_expf" |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 174 | |
Szabolcs Nagy | c280e49 | 2019-08-09 15:18:40 +0100 | [diff] [blame] | 175 | range_logf=' |
| 176 | 0 0xffff0000 10000 |
| 177 | 0x1p-4 0x1p4 500000 |
| 178 | ' |
| 179 | |
Szabolcs Nagy | c5cba85 | 2019-08-09 15:39:09 +0100 | [diff] [blame] | 180 | range_sinf=' |
| 181 | 0 0xffff0000 10000 |
| 182 | 0x1p-4 0x1p4 300000 |
| 183 | -0x1p-9 -0x1p9 300000 |
| 184 | ' |
| 185 | range_cosf="$range_sinf" |
| 186 | |
Szabolcs Nagy | ba75d0a | 2019-08-09 16:24:59 +0100 | [diff] [blame] | 187 | range_powf=' |
| 188 | 0x1p-1 0x1p1 x 0x1p-7 0x1p7 50000 |
| 189 | 0x1p-1 0x1p1 x -0x1p-7 -0x1p7 50000 |
| 190 | 0x1p-70 0x1p70 x 0x1p-1 0x1p1 50000 |
| 191 | 0x1p-70 0x1p70 x -0x1p-1 -0x1p1 50000 |
| 192 | 0x1.ep-1 0x1.1p0 x 0x1p8 0x1p14 50000 |
| 193 | 0x1.ep-1 0x1.1p0 x -0x1p8 -0x1p14 50000 |
| 194 | ' |
| 195 | |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 196 | # error limits |
| 197 | L_exp=1.9 |
Szabolcs Nagy | 33ba190 | 2020-01-14 10:15:58 +0000 | [diff] [blame] | 198 | L_log=1.2 |
Szabolcs Nagy | a807c9b | 2020-01-10 15:10:45 +0000 | [diff] [blame] | 199 | L_pow=0.05 |
Szabolcs Nagy | 33ba190 | 2020-01-14 10:15:58 +0000 | [diff] [blame] | 200 | L_sin=3.0 |
| 201 | L_cos=3.0 |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 202 | L_expf=1.49 |
| 203 | L_expf_1u=0.4 |
Szabolcs Nagy | 69170e1 | 2019-10-14 15:21:28 +0100 | [diff] [blame] | 204 | L_exp2f=1.49 |
| 205 | L_exp2f_1u=0.4 |
Szabolcs Nagy | c280e49 | 2019-08-09 15:18:40 +0100 | [diff] [blame] | 206 | L_logf=2.9 |
Szabolcs Nagy | c5cba85 | 2019-08-09 15:39:09 +0100 | [diff] [blame] | 207 | L_sinf=1.4 |
| 208 | L_cosf=1.4 |
Szabolcs Nagy | ba75d0a | 2019-08-09 16:24:59 +0100 | [diff] [blame] | 209 | L_powf=2.1 |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 210 | |
Szabolcs Nagy | 65464ec | 2019-11-05 17:26:37 +0000 | [diff] [blame] | 211 | while read G F R |
| 212 | do |
| 213 | [ "$R" = 1 ] || continue |
| 214 | case "$G" in \#*) continue ;; esac |
| 215 | eval range="\${range_$G}" |
| 216 | eval L="\${L_$G}" |
| 217 | while read X |
| 218 | do |
| 219 | [ -n "$X" ] || continue |
| 220 | case "$X" in \#*) continue ;; esac |
| 221 | t $F $X |
| 222 | done << EOF |
| 223 | $range |
| 224 | EOF |
| 225 | done << EOF |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 226 | # group symbol run |
Szabolcs Nagy | 1f3b163 | 2019-11-06 19:41:30 +0000 | [diff] [blame] | 227 | exp __s_exp $runs |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 228 | exp __v_exp $runv |
| 229 | exp __vn_exp $runvn |
| 230 | exp _ZGVnN2v_exp $runvn |
| 231 | |
Szabolcs Nagy | 33ba190 | 2020-01-14 10:15:58 +0000 | [diff] [blame] | 232 | log __s_log $runs |
| 233 | log __v_log $runv |
| 234 | log __vn_log $runvn |
| 235 | log _ZGVnN2v_log $runvn |
| 236 | |
Szabolcs Nagy | a807c9b | 2020-01-10 15:10:45 +0000 | [diff] [blame] | 237 | pow __s_pow $runs |
| 238 | pow __v_pow $runv |
| 239 | pow __vn_pow $runvn |
| 240 | pow _ZGVnN2vv_pow $runvn |
| 241 | |
Szabolcs Nagy | 33ba190 | 2020-01-14 10:15:58 +0000 | [diff] [blame] | 242 | sin __s_sin $runs |
| 243 | sin __v_sin $runv |
| 244 | sin __vn_sin $runvn |
| 245 | sin _ZGVnN2v_sin $runvn |
| 246 | |
| 247 | cos __s_cos $runs |
| 248 | cos __v_cos $runv |
| 249 | cos __vn_cos $runvn |
| 250 | cos _ZGVnN2v_cos $runvn |
| 251 | |
Szabolcs Nagy | 1f3b163 | 2019-11-06 19:41:30 +0000 | [diff] [blame] | 252 | expf __s_expf $runs |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 253 | expf __v_expf $runv |
| 254 | expf __vn_expf $runvn |
| 255 | expf _ZGVnN4v_expf $runvn |
| 256 | |
Szabolcs Nagy | 1f3b163 | 2019-11-06 19:41:30 +0000 | [diff] [blame] | 257 | expf_1u __s_expf_1u $runs |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 258 | expf_1u __v_expf_1u $runv |
| 259 | expf_1u __vn_expf_1u $runvn |
| 260 | |
Szabolcs Nagy | 1f3b163 | 2019-11-06 19:41:30 +0000 | [diff] [blame] | 261 | exp2f __s_exp2f $runs |
Szabolcs Nagy | 69170e1 | 2019-10-14 15:21:28 +0100 | [diff] [blame] | 262 | exp2f __v_exp2f $runv |
| 263 | exp2f __vn_exp2f $runvn |
| 264 | exp2f _ZGVnN4v_exp2f $runvn |
| 265 | |
Szabolcs Nagy | 1f3b163 | 2019-11-06 19:41:30 +0000 | [diff] [blame] | 266 | exp2f_1u __s_exp2f_1u $runs |
Szabolcs Nagy | 69170e1 | 2019-10-14 15:21:28 +0100 | [diff] [blame] | 267 | exp2f_1u __v_exp2f_1u $runv |
| 268 | exp2f_1u __vn_exp2f_1u $runvn |
| 269 | |
Szabolcs Nagy | 1f3b163 | 2019-11-06 19:41:30 +0000 | [diff] [blame] | 270 | logf __s_logf $runs |
Szabolcs Nagy | c280e49 | 2019-08-09 15:18:40 +0100 | [diff] [blame] | 271 | logf __v_logf $runv |
| 272 | logf __vn_logf $runvn |
| 273 | logf _ZGVnN4v_logf $runvn |
| 274 | |
Szabolcs Nagy | 1f3b163 | 2019-11-06 19:41:30 +0000 | [diff] [blame] | 275 | sinf __s_sinf $runs |
Szabolcs Nagy | c5cba85 | 2019-08-09 15:39:09 +0100 | [diff] [blame] | 276 | sinf __v_sinf $runv |
| 277 | sinf __vn_sinf $runvn |
| 278 | sinf _ZGVnN4v_sinf $runvn |
| 279 | |
Szabolcs Nagy | 1f3b163 | 2019-11-06 19:41:30 +0000 | [diff] [blame] | 280 | cosf __s_cosf $runs |
Szabolcs Nagy | c5cba85 | 2019-08-09 15:39:09 +0100 | [diff] [blame] | 281 | cosf __v_cosf $runv |
| 282 | cosf __vn_cosf $runvn |
| 283 | cosf _ZGVnN4v_cosf $runvn |
| 284 | |
Szabolcs Nagy | 1f3b163 | 2019-11-06 19:41:30 +0000 | [diff] [blame] | 285 | powf __s_powf $runs |
Szabolcs Nagy | ba75d0a | 2019-08-09 16:24:59 +0100 | [diff] [blame] | 286 | powf __v_powf $runv |
| 287 | powf __vn_powf $runvn |
| 288 | powf _ZGVnN4vv_powf $runvn |
Szabolcs Nagy | 65464ec | 2019-11-05 17:26:37 +0000 | [diff] [blame] | 289 | EOF |
Szabolcs Nagy | 7a1f4cf | 2019-07-18 12:51:41 +0100 | [diff] [blame] | 290 | |
Szabolcs Nagy | 8dcd063 | 2019-10-08 11:02:21 +0100 | [diff] [blame] | 291 | [ 0 -eq $FAIL ] || { |
| 292 | echo "FAILED $FAIL PASSED $PASS" |
| 293 | exit 1 |
| 294 | } |