From 4c4cc525a823b444d0fbbc9c0abb98dc943e4e99 Mon Sep 17 00:00:00 2001 From: jake Date: Tue, 4 Jun 2002 17:02:27 +0000 Subject: Implement _Qp_sqrt. I've been unable to find a C program that gcc generates a call to this for, but apparently somehing in libstdc++ does. --- lib/libc/sparc64/fpu/fpu_qp.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'lib') diff --git a/lib/libc/sparc64/fpu/fpu_qp.c b/lib/libc/sparc64/fpu/fpu_qp.c index 48551ad..055df8e 100644 --- a/lib/libc/sparc64/fpu/fpu_qp.c +++ b/lib/libc/sparc64/fpu/fpu_qp.c @@ -108,6 +108,20 @@ _Qp_f ## name(u_int *a, u_int *b) \ return (test(FSR_GET_FCC0(fe.fe_fsr))); \ } +void _Qp_sqrt(u_int *c, u_int *a); +void +_Qp_sqrt(u_int *c, u_int *a) +{ + struct fpemu fe; + struct fpn *r; + __asm __volatile("stx %%fsr, %0" : "=m" (fe.fe_fsr) :); + fe.fe_f1.fp_sign = a[0] >> 31; + fe.fe_f1.fp_sticky = 0; + fe.fe_f1.fp_class = __fpu_qtof(&fe.fe_f1, a[0], a[1], a[2], a[3]); + r = __fpu_sqrt(&fe); + c[0] = __fpu_ftoq(&fe, r, c); +} + _QP_OP(add) _QP_OP(div) _QP_OP(mul) -- cgit v1.1