Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add low accuracy sin, cos, log2, exp2 and pow #229

Merged
merged 9 commits into from Mar 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 0 additions & 2 deletions Configure.cmake
Expand Up @@ -150,8 +150,6 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
command_arguments(ALIAS_PARAMS_ADVSIMD_DP 2 float64x2_t int32x2_t n advsimd)
command_arguments(ALIAS_PARAMS_ADVSIMD_SP -4 float32x4_t int32x4_t n advsimd)

set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-march=armv8-a+simd")

set(TESTER3_DEFINITIONS_ADVSIMD ATR=finz_ DPTYPE=float64x2_t SPTYPE=float32x4_t DPTYPESPEC=d2 SPTYPESPEC=f4 EXTSPEC=advsimd)
set(TESTER3_DEFINITIONS_ADVSIMDNOFMA ATR=cinz_ DPTYPE=float64x2_t SPTYPE=float32x4_t DPTYPESPEC=d2 SPTYPESPEC=f4 EXTSPEC=advsimdnofma)
set(TESTER3_DEFINITIONS_SVE ATR=finz_ DPTYPE=svfloat64_t SPTYPE=svfloat32_t DPTYPESPEC=dx SPTYPESPEC=fx EXTSPEC=sve)
Expand Down
2 changes: 1 addition & 1 deletion Jenkinsfile
Expand Up @@ -112,7 +112,7 @@ pipeline {
sh '''
echo "On" `hostname`
export PATH=$PATH:/opt/local/bin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin
export CC=gcc-7
export CC=gcc-7
rm -rf build
mkdir build
cd build
Expand Down
15 changes: 10 additions & 5 deletions src/arch/helperadvsimd.h
Expand Up @@ -152,24 +152,29 @@ static INLINE VECTOR_CC vfloat vdiv_vf_vf_vf(vfloat n, vfloat d) {
}
static INLINE VECTOR_CC vfloat vsqrt_vf_vf(vfloat d) { return vsqrtq_f32(d); }

// |x|, -x
static INLINE VECTOR_CC vfloat vabs_vf_vf(vfloat f) { return vabsq_f32(f); }
static INLINE VECTOR_CC vfloat vneg_vf_vf(vfloat f) { return vnegq_f32(f); }

#if CONFIG == 1
// Multiply accumulate: z = z + x * y
static INLINE VECTOR_CC vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) {
return vfmaq_f32(z, x, y);
}
// Multiply subtract: z = z = x * y
// Multiply subtract: z = z - x * y
static INLINE VECTOR_CC vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) {
return vfmsq_f32(z, x, y);
}
// Multiply subtract: z = x * y - z
static INLINE VECTOR_CC vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) {
return vneg_vf_vf(vfmsq_f32(z, x, y));
}
#else
static INLINE VECTOR_CC vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vadd_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
static INLINE VECTOR_CC vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(z, vmul_vf_vf_vf(x, y)); }
static INLINE VECTOR_CC vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
#endif

// |x|, -x
static INLINE VECTOR_CC vfloat vabs_vf_vf(vfloat f) { return vabsq_f32(f); }
static INLINE VECTOR_CC vfloat vneg_vf_vf(vfloat f) { return vnegq_f32(f); }

// max, min
static INLINE VECTOR_CC vfloat vmax_vf_vf_vf(vfloat x, vfloat y) {
return vmaxq_f32(x, y);
Expand Down
2 changes: 2 additions & 0 deletions src/arch/helperavx.h
Expand Up @@ -351,9 +351,11 @@ static INLINE vfloat vmin_vf_vf_vf(vfloat x, vfloat y) { return _mm256_min_ps(x,
#if CONFIG == 1
static INLINE vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vadd_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(z, vmul_vf_vf_vf(x, y)); }
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
#else
static INLINE vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return _mm256_macc_ps(x, y, z); }
static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return _mm256_nmacc_ps(x, y, z); }
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return _mm256_msub_ps(x, y, z); }
static INLINE vfloat vfma_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return _mm256_macc_ps(x, y, z); }
static INLINE vfloat vfmapp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return _mm256_macc_ps(x, y, z); }
static INLINE vfloat vfmapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return _mm256_msub_ps(x, y, z); }
Expand Down
1 change: 1 addition & 0 deletions src/arch/helperavx512f.h
Expand Up @@ -373,6 +373,7 @@ static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return _
#else
static INLINE vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vadd_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(z, vmul_vf_vf_vf(x, y)); }
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
#endif

static INLINE vfloat vfma_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return _mm512_fmadd_ps(x, y, z); }
Expand Down
2 changes: 2 additions & 0 deletions src/arch/helperneon32.h
Expand Up @@ -119,6 +119,7 @@ static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return v
static INLINE vfloat vfma_vf_vf_vf_vf (vfloat x, vfloat y, vfloat z) { return vfmaq_f32(z, x, y); }
static INLINE vfloat vfmanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vfmsq_f32(z, x, y); }
static INLINE vfloat vfmapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vneg_vf_vf(vfmanp_vf_vf_vf_vf(x, y, z)); }
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vneg_vf_vf(vfmanp_vf_vf_vf_vf(x, y, z)); }

static INLINE vfloat vdiv_vf_vf_vf(vfloat x, vfloat y) {
float32x4_t t = vrecpeq_f32(y), u;
Expand Down Expand Up @@ -152,6 +153,7 @@ static INLINE vfloat vrecsqrt_vf_vf(vfloat d) {
#else // #if CONFIG == 4
static INLINE vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vmlaq_f32(z, x, y); }
static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vmlsq_f32(z, x, y); }
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vneg_vf_vf(vmlsq_f32(z, x, y)); }

static INLINE vfloat vdiv_vf_vf_vf(vfloat n, vfloat d) {
float32x4_t x = vrecpeq_f32(d);
Expand Down
2 changes: 2 additions & 0 deletions src/arch/helperpower_128.h
Expand Up @@ -233,9 +233,11 @@ static INLINE vfloat vsqrt_vf_vf(vfloat d) { return vec_sqrt(d); }
#if CONFIG == 1
static INLINE vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vec_madd(x, y, z); }
static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vec_nmsub(x, y, z); }
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vec_msub(x, y, z); }
#else
static INLINE vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vadd_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(z, vmul_vf_vf_vf(x, y)); }
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
#endif

static INLINE vfloat vmlsubadd_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vmla_vf_vf_vf_vf(x, y, vnegpos_vf_vf(z)); }
Expand Down
1 change: 1 addition & 0 deletions src/arch/helperpurec_scalar.h
Expand Up @@ -308,6 +308,7 @@ static INLINE vfloat vmin_vf_vf_vf(vfloat x, vfloat y) { return x < y ? x : y; }
#ifndef ENABLE_FMA_SP
static INLINE vfloat vmla_vf_vf_vf_vf (vfloat x, vfloat y, vfloat z) { return x * y + z; }
static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return - x * y + z; }
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return x * y - z; }
#else
static INLINE vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return FMAF(x, y, z); }
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return FMAF(x, y, -z); }
Expand Down
1 change: 1 addition & 0 deletions src/arch/helpersse2.h
Expand Up @@ -313,6 +313,7 @@ static INLINE vfloat vsqrt_vf_vf(vfloat x) { return _mm_sqrt_ps(x); }
static INLINE vfloat vabs_vf_vf(vfloat f) { return vreinterpret_vf_vm(vandnot_vm_vm_vm(vreinterpret_vm_vf(vcast_vf_f(-0.0f)), vreinterpret_vm_vf(f))); }
static INLINE vfloat vneg_vf_vf(vfloat d) { return vreinterpret_vf_vm(vxor_vm_vm_vm(vreinterpret_vm_vf(vcast_vf_f(-0.0f)), vreinterpret_vm_vf(d))); }
static INLINE vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vadd_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(z, vmul_vf_vf_vf(x, y)); }
static INLINE vfloat vmax_vf_vf_vf(vfloat x, vfloat y) { return _mm_max_ps(x, y); }
static INLINE vfloat vmin_vf_vf_vf(vfloat x, vfloat y) { return _mm_min_ps(x, y); }
Expand Down
4 changes: 4 additions & 0 deletions src/arch/helpersve.h
Expand Up @@ -235,9 +235,13 @@ static INLINE vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) {
static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) {
return svmsb_f32_x(ptrue, x, y, z);
}
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) {
return svnmsb_f32_x(ptrue, x, y, z);
}
#else
static INLINE vfloat vmla_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vadd_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
static INLINE vfloat vmlanp_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(z, vmul_vf_vf_vf(x, y)); }
static INLINE vfloat vmlapn_vf_vf_vf_vf(vfloat x, vfloat y, vfloat z) { return vsub_vf_vf_vf(vmul_vf_vf_vf(x, y), z); }
#endif

// fused multiply add / sub
Expand Down
11 changes: 11 additions & 0 deletions src/libm-tester/hash_cinz.txt
Expand Up @@ -10,11 +10,15 @@ sincospi u05 0c6fc00c7aaf0b6e67d66542d1be833d
sincospi u35 c428b0fc3e6c5be4d2c03dcd8bb27a7c
log u10 4855b27222d900bea47a27cadba71727
log u35 c95484de57c167da3d8d6d1baadf9ffa
log2 u10 2662df9af919680ca62e1752fb1b7539
log2 u35 1cd6d7f194a5e8364191497adc5c5cec
log10 u10 36645e8031d873d66fd0ec2c5959f273
log1p u10 1383924fb56cf2e7eda27de21320c591
exp u10 13692a48edf2cf7a3e047b16ddfb7b81
exp2 u10 436146f8d6dcaa4a754837108a9aa3e1
exp2 u35 8881d075d9101a1dfa3f6a10b9ee8373
exp10 u10 9d704b310f683872a6446cfc97726a4d
exp10 u35 bc07745ebc22a7ee97679154c24b23cc
expm1 u10 cd3f0b8e86943d52c278394b60e2d22e
pow u10 a0ea63b27d33262346a35c9439741075
cbrt u10 5d8bf28ac74624594fd1be9217817690
Expand Down Expand Up @@ -68,11 +72,15 @@ sincospif u05 8b3762b67a661957c1414c351ec49034
sincospif u35 cec15ed76a358091632634166fa77b66
logf u10 c5a90119943acc4199e1cc7030b5def8
logf u35 af2fbe4bfa2caaf59c734e3749dd15be
log2f u10 ba8acae369bbb7b6404cccbc633fe25b
log2f u35 111da6eef2c9f1ca14793ff25807be7c
log10f u10 7e235a82d960e4434575dd39648d8bb7
log1pf u10 350fc4f13502b36bb1107e1b1122acb1
expf u10 ee4adaabefa3fac6c0f1925b2a948eea
exp2f u10 b0d283dbae0f36f1b3c7eed9871f0d0d
exp2f u35 522cc30f722f77fceb07015830b351a3
exp10f u10 ba6b659a6ac3945fcb602c73623b6ff2
exp10f u35 d142f1fb40e44f0c9e042718f27ee3e0
expm1f u10 ebfd6498cb40f61b609882de8a7f3c74
powf u10 a7cba3239c87969662e8b41a4dd8b4ab
cbrtf u10 01c5cac23fe21638be1c3eab6e368fd6
Expand Down Expand Up @@ -114,3 +122,6 @@ floorf 9341be69ee345c8554bf3ab4e9316133
ceilf c70874771cbe9741f1f05fedd4b629e9
roundf 0cf52f6b8015099771e9a7dfa6b090bc
rintf bed68e788e2b11543c09c9d52198abf8
fastsinf u3500 8eb51f86fb40414dd21284f020f24b6c
fastcosf u3500 69cbc3703f1d2c68695b00b1b09287b2
fastpowf u3500 e02e6a692cfa22a6b7149168c67ea1d2
11 changes: 11 additions & 0 deletions src/libm-tester/hash_finz.txt
Expand Up @@ -10,11 +10,15 @@ sincospi u05 0c6fc00c7aaf0b6e67d66542d1be833d
sincospi u35 c428b0fc3e6c5be4d2c03dcd8bb27a7c
log u10 4855b27222d900bea47a27cadba71727
log u35 015f8ae899c9b921d48919dd12ef19a9
log2 u10 2662df9af919680ca62e1752fb1b7539
log2 u35 908b1949db34ea855944f00089b21e23
log10 u10 36645e8031d873d66fd0ec2c5959f273
log1p u10 1383924fb56cf2e7eda27de21320c591
exp u10 084e5be89c2ad03e356078ea4f287bab
exp2 u10 6e36db9ae2cf9eca82e3d9157c622351
exp2 u35 6e36db9ae2cf9eca82e3d9157c622351
exp10 u10 0cc08bc6a3d08d6e61450b5370c6161e
exp10 u35 6904d5509ca794747aa249c13886f90f
expm1 u10 cd3f0b8e86943d52c278394b60e2d22e
pow u10 7e19796027d7c1d1999be948f90e6181
cbrt u10 5d8bf28ac74624594fd1be9217817690
Expand Down Expand Up @@ -68,11 +72,15 @@ sincospif u05 8b3762b67a661957c1414c351ec49034
sincospif u35 8720757f221c00cc8de24b7dc4949144
logf u10 c5a90119943acc4199e1cc7030b5def8
logf u35 b6234302d534d6ccd48155dd6b9a4293
log2f u10 ba8acae369bbb7b6404cccbc633fe25b
log2f u35 8596f906459db93ac21537fa73fe2a71
log10f u10 7e235a82d960e4434575dd39648d8bb7
log1pf u10 e53dbfa80bcc1a7bcfd21000e6950475
expf u10 9597388315e4b3e89c4c97ce46374dcf
exp2f u10 42d66e5e4cb88feb29c5b36c632159a5
exp2f u35 42d66e5e4cb88feb29c5b36c632159a5
exp10f u10 6fb0e9a829e12a06679d379d05b53ede
exp10f u35 6fb0e9a829e12a06679d379d05b53ede
expm1f u10 ebfd6498cb40f61b609882de8a7f3c74
powf u10 2ed84af40d03e307a620365f172d010d
cbrtf u10 01c5cac23fe21638be1c3eab6e368fd6
Expand Down Expand Up @@ -114,3 +122,6 @@ floorf 9341be69ee345c8554bf3ab4e9316133
ceilf c70874771cbe9741f1f05fedd4b629e9
roundf 0cf52f6b8015099771e9a7dfa6b090bc
rintf bed68e788e2b11543c09c9d52198abf8
fastsinf u3500 5c48081c74cd0316379b580b047dbfc2
fastcosf u3500 6f73d116f109283e5632c31f5988f55b
fastpowf u3500 6dbb3110412df4fed5a71f50d40def89
45 changes: 45 additions & 0 deletions src/libm-tester/iut.c
Expand Up @@ -245,11 +245,21 @@ int main(int argc, char **argv) {
sscanf(buf, "exp2 %" PRIx64, &u);
u = d2u(xexp2(u2d(u)));
printf("%" PRIx64 "\n", u);
} else if (startsWith(buf, "exp2_u35 ")) {
uint64_t u;
sscanf(buf, "exp2_u35 %" PRIx64, &u);
u = d2u(xexp2_u35(u2d(u)));
printf("%" PRIx64 "\n", u);
} else if (startsWith(buf, "exp10 ")) {
uint64_t u;
sscanf(buf, "exp10 %" PRIx64, &u);
u = d2u(xexp10(u2d(u)));
printf("%" PRIx64 "\n", u);
} else if (startsWith(buf, "exp10_u35 ")) {
uint64_t u;
sscanf(buf, "exp10_u35 %" PRIx64, &u);
u = d2u(xexp10_u35(u2d(u)));
printf("%" PRIx64 "\n", u);
} else if (startsWith(buf, "expm1 ")) {
uint64_t u;
sscanf(buf, "expm1 %" PRIx64, &u);
Expand All @@ -265,6 +275,11 @@ int main(int argc, char **argv) {
sscanf(buf, "log2 %" PRIx64, &u);
u = d2u(xlog2(u2d(u)));
printf("%" PRIx64 "\n", u);
} else if (startsWith(buf, "log2_u35 ")) {
uint64_t u;
sscanf(buf, "log2_u35 %" PRIx64, &u);
u = d2u(xlog2_u35(u2d(u)));
printf("%" PRIx64 "\n", u);
} else if (startsWith(buf, "log1p ")) {
uint64_t u;
sscanf(buf, "log1p %" PRIx64, &u);
Expand Down Expand Up @@ -459,6 +474,11 @@ int main(int argc, char **argv) {
sscanf(buf, "powf %x %x", &u, &v);
u = f2u(xpowf(u2f(u), u2f(v)));
printf("%x\n", u);
} else if (startsWith(buf, "fastpowf_u3500 ")) {
uint32_t u, v;
sscanf(buf, "fastpowf_u3500 %x %x", &u, &v);
u = f2u(xfastpowf_u3500(u2f(u), u2f(v)));
printf("%x\n", u);
} else if (startsWith(buf, "sinhf ")) {
uint32_t u;
sscanf(buf, "sinhf %x", &u);
Expand Down Expand Up @@ -514,6 +534,16 @@ int main(int argc, char **argv) {
sscanf(buf, "exp10f %x", &u);
u = f2u(xexp10f(u2f(u)));
printf("%x\n", u);
} else if (startsWith(buf, "exp2f_u35 ")) {
uint32_t u;
sscanf(buf, "exp2f_u35 %x", &u);
u = f2u(xexp2f_u35(u2f(u)));
printf("%x\n", u);
} else if (startsWith(buf, "exp10f_u35 ")) {
uint32_t u;
sscanf(buf, "exp10f_u35 %x", &u);
u = f2u(xexp10f_u35(u2f(u)));
printf("%x\n", u);
} else if (startsWith(buf, "expm1f ")) {
uint32_t u;
sscanf(buf, "expm1f %x", &u);
Expand All @@ -529,6 +559,11 @@ int main(int argc, char **argv) {
sscanf(buf, "log2f %x", &u);
u = f2u(xlog2f(u2f(u)));
printf("%x\n", u);
} else if (startsWith(buf, "log2f_u35 ")) {
uint32_t u;
sscanf(buf, "log2f_u35 %x", &u);
u = f2u(xlog2f_u35(u2f(u)));
printf("%x\n", u);
} else if (startsWith(buf, "log1pf ")) {
uint32_t u;
sscanf(buf, "log1pf %x", &u);
Expand Down Expand Up @@ -569,6 +604,16 @@ int main(int argc, char **argv) {
sscanf(buf, "cospif_u05 %x", &u);
u = f2u(xcospif_u05(u2f(u)));
printf("%x\n", u);
} else if (startsWith(buf, "fastsinf_u3500 ")) {
uint32_t u;
sscanf(buf, "fastsinf_u3500 %x", &u);
u = f2u(xfastsinf_u3500(u2f(u)));
printf("%x\n", u);
} else if (startsWith(buf, "fastcosf_u3500 ")) {
uint32_t u;
sscanf(buf, "fastcosf_u3500 %x", &u);
u = f2u(xfastcosf_u3500(u2f(u)));
printf("%x\n", u);
} else if (startsWith(buf, "tanf_u1 ")) {
uint32_t u;
sscanf(buf, "tanf_u1 %x", &u);
Expand Down
10 changes: 10 additions & 0 deletions src/libm-tester/iutsimd.c
Expand Up @@ -488,9 +488,12 @@ int do_test(int argc, char **argv) {

func_d_d("exp2", xexp2);
func_d_d("exp10", xexp10);
func_d_d("exp2_u35", xexp2_u35);
func_d_d("exp10_u35", xexp10_u35);
func_d_d("expm1", xexpm1);
func_d_d("log10", xlog10);
func_d_d("log2", xlog2);
func_d_d("log2_u35", xlog2_u35);
func_d_d("log1p", xlog1p);

func_d2_d("sincos", xsincos);
Expand Down Expand Up @@ -572,9 +575,12 @@ int do_test(int argc, char **argv) {

func_f_f("exp2f", xexp2f);
func_f_f("exp10f", xexp10f);
func_f_f("exp2f_u35", xexp2f_u35);
func_f_f("exp10f_u35", xexp10f_u35);
func_f_f("expm1f", xexpm1f);
func_f_f("log10f", xlog10f);
func_f_f("log2f", xlog2f);
func_f_f("log2f_u35", xlog2f_u35);
func_f_f("log1pf", xlog1pf);

func_f2_f("sincosf", xsincosf);
Expand Down Expand Up @@ -609,6 +615,10 @@ int do_test(int argc, char **argv) {
func_f_f("lgammaf_u1", xlgammaf_u1);
func_f_f("erff_u1", xerff_u1);
func_f_f("erfcf_u15", xerfcf_u15);

func_f_f("fastsinf_u3500", xfastsinf_u3500);
func_f_f("fastcosf_u3500", xfastcosf_u3500);
func_f_f_f("fastpowf_u3500", xfastpowf_u3500);
#endif
}

Expand Down