mailing list of musl libc
 help / color / mirror / Atom feed
* [musl] Hexagon DSP support
@ 2020-04-15 13:19 sidneym
  2020-04-15 16:30 ` Rich Felker
  2020-04-15 18:55 ` Fangrui Song
  0 siblings, 2 replies; 42+ messages in thread
From: sidneym @ 2020-04-15 13:19 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 1444 bytes --]

Recently work has been done with clang/llvm/lld to extend support for
Qualcomm's Hexagon DSP to a Linux target.  At this point the publicly
available LLVM tools are able to build and run Hexagon programs via QEMU.
I've attached a patch that add the Hexagon bits to musl.  The optimized
routines have been purposely omitted to keep the size and complexity to a
minimum.

The changes are being mirrored here:
https://github.com/quic/musl/tree/hexagon
The QEMU mirror is here: https://github.com/quic/qemu
A description of the assembly language is here:
https://developer.qualcomm.com/download/hexagon/hexagon-v5x-programmers-refe
rence-manual.pdf?referrer=node/6116

The objective is to have enough freely available tools and libraries that
any user could develop code for the DSP.  The C-library is an important part
of that stack and this patch is intended to start a discussion of what would
need to happen in order for Hexagon to be added to the musl sources.

I've tested this using libc-test (git://repo.or.cz/libc-test) and 56 errors
are reported.  The support for Hexagon in QEMU is on-going and while some of
the errors (math) may be attributed to QEMU most also happen on hardware.  A
good chunk fail due to floating point exception status or precision.

Beyond the above testing a large number of packages have been built using
buildroot with our internal llvm tools.  No issues outside of tweaks to
avoid glibc assumptions were seen.

[-- Attachment #2: winmail.dat --]
[-- Type: application/ms-tnef, Size: 50077 bytes --]

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-04-15 13:19 [musl] Hexagon DSP support sidneym
@ 2020-04-15 16:30 ` Rich Felker
  2020-04-15 17:50   ` sidneym
  2020-04-15 18:55 ` Fangrui Song
  1 sibling, 1 reply; 42+ messages in thread
From: Rich Felker @ 2020-04-15 16:30 UTC (permalink / raw)
  To: sidneym; +Cc: musl

On Wed, Apr 15, 2020 at 08:19:29AM -0500, sidneym@codeaurora.org wrote:
> Recently work has been done with clang/llvm/lld to extend support for
> Qualcomm's Hexagon DSP to a Linux target.  At this point the publicly
> available LLVM tools are able to build and run Hexagon programs via QEMU.
> I've attached a patch that add the Hexagon bits to musl.  The optimized
> routines have been purposely omitted to keep the size and complexity to a
> minimum.
> 
> The changes are being mirrored here:
> https://github.com/quic/musl/tree/hexagon
> The QEMU mirror is here: https://github.com/quic/qemu
> A description of the assembly language is here:
> https://developer.qualcomm.com/download/hexagon/hexagon-v5x-programmers-refe
> rence-manual.pdf?referrer=node/6116
> 
> The objective is to have enough freely available tools and libraries that
> any user could develop code for the DSP.  The C-library is an important part
> of that stack and this patch is intended to start a discussion of what would
> need to happen in order for Hexagon to be added to the musl sources.

Thanks for reaching out upstream and sharing this. I did a quick
glance over the port (mostly just arch/hexagon dir, not source dirs in
any detail) and what I've read so far looks good.

One question I have: alltypes.h.in defines _REDIR_TIME64. Is this
because there's an existing unofficial ABI in deployments that you
don't want to break? If so that's probably okay, but if not it's not
necessary or wanted for new 32-bit archs to define this; if it's not
defined, the unadorned symbol names will just be 64-bit versions, just
like on 64-bit archs.

> I've tested this using libc-test (git://repo.or.cz/libc-test) and 56 errors
> are reported.  The support for Hexagon in QEMU is on-going and while some of
> the errors (math) may be attributed to QEMU most also happen on hardware.  A
> good chunk fail due to floating point exception status or precision.

Can you send the output report to the list or post it somewhere
publicly accessible? I can probably give you a quick rundown on
whether any of the failures are unexpected (on qemu or real hardware)
and it will suggest which parts of the source I (and others in the
community) should focus on reviewing.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-04-15 16:30 ` Rich Felker
@ 2020-04-15 17:50   ` sidneym
  2020-04-15 18:06     ` Szabolcs Nagy
  0 siblings, 1 reply; 42+ messages in thread
From: sidneym @ 2020-04-15 17:50 UTC (permalink / raw)
  To: musl



> -----Original Message-----
> From: Rich Felker <dalias@libc.org>
> Sent: Wednesday, April 15, 2020 11:30 AM
> To: sidneym@codeaurora.org
> Cc: musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> On Wed, Apr 15, 2020 at 08:19:29AM -0500, sidneym@codeaurora.org wrote:
> > Recently work has been done with clang/llvm/lld to extend support for
> > Qualcomm's Hexagon DSP to a Linux target.  At this point the publicly
> > available LLVM tools are able to build and run Hexagon programs via
QEMU.
> > I've attached a patch that add the Hexagon bits to musl.  The
> > optimized routines have been purposely omitted to keep the size and
> > complexity to a minimum.
> >
> > The changes are being mirrored here:
> > https://github.com/quic/musl/tree/hexagon
> > The QEMU mirror is here: https://github.com/quic/qemu A description of
> > the assembly language is here:
> > https://developer.qualcomm.com/download/hexagon/hexagon-v5x-
> programmer
> > s-refe
> > rence-manual.pdf?referrer=node/6116
> >
> > The objective is to have enough freely available tools and libraries
> > that any user could develop code for the DSP.  The C-library is an
> > important part of that stack and this patch is intended to start a
> > discussion of what would need to happen in order for Hexagon to be
> added to the musl sources.
> 
> Thanks for reaching out upstream and sharing this. I did a quick glance
over
> the port (mostly just arch/hexagon dir, not source dirs in any detail) and
what
> I've read so far looks good.
> 
> One question I have: alltypes.h.in defines _REDIR_TIME64. Is this because
> there's an existing unofficial ABI in deployments that you don't want to
> break? If so that's probably okay, but if not it's not necessary or wanted
for
> new 32-bit archs to define this; if it's not defined, the unadorned symbol
> names will just be 64-bit versions, just like on 64-bit archs.
> 
That was a copy/paste error and was responsible for a few libc-testsuite
failures: 
   ld.lld: error: undefined symbol: __dlsym_time64
I will correct that and update the source.


> > I've tested this using libc-test (git://repo.or.cz/libc-test) and 56
> > errors are reported.  The support for Hexagon in QEMU is on-going and
> > while some of the errors (math) may be attributed to QEMU most also
> > happen on hardware.  A good chunk fail due to floating point exception
> status or precision.
> 
> Can you send the output report to the list or post it somewhere publicly
> accessible? I can probably give you a quick rundown on whether any of the
> failures are unexpected (on qemu or real hardware) and it will suggest
which
> parts of the source I (and others in the
> community) should focus on reviewing.

This is the list, the context associated with some of the failures can be
bulky so I hope the summary is ok.  Let me know which failures are most
critical and I will try to fix those first.  51 failures after removing the
TIME64 define

FAIL src/api/main.exe [status 1]
FAIL src/functional/dlopen.exe [status 1]
FAIL src/functional/ipc_msg-static.exe [status 1]
FAIL src/functional/ipc_msg.exe [status 1]
FAIL src/functional/ipc_sem-static.exe [status 1]
FAIL src/functional/ipc_sem.exe [status 1]
FAIL src/functional/ipc_shm-static.exe [status 1]
FAIL src/functional/ipc_shm.exe [status 1]
FAIL src/functional/pthread_mutex-static.exe [status 1]
FAIL src/functional/pthread_mutex.exe [status 1]
FAIL src/functional/pthread_mutex_pi-static.exe [timed out]
FAIL src/functional/pthread_mutex_pi.exe [signal Segmentation fault]
FAIL src/functional/pthread_robust-static.exe [timed out]
FAIL src/functional/pthread_robust.exe [timed out]
FAIL src/functional/sem_init-static.exe [status 1]
FAIL src/functional/sem_init.exe [status 1]
FAIL src/functional/strptime-static.exe [status 1]
FAIL src/functional/strptime.exe [status 1]
FAIL src/functional/utime-static.exe [status 1]
FAIL src/functional/utime.exe [status 1]
FAIL src/math/acoshl.exe [status 1]
FAIL src/math/asinhl.exe [status 1]
FAIL src/math/erfcl.exe [status 1]
FAIL src/math/exp2l.exe [status 1]
FAIL src/math/fmal.exe [status 1]
FAIL src/math/ilogb.exe [status 1]
FAIL src/math/ilogbf.exe [status 1]
FAIL src/math/ilogbl.exe [status 1]
FAIL src/math/lgammal.exe [status 1]
FAIL src/math/powf.exe [status 1]
FAIL src/math/powl.exe [status 1]
FAIL src/math/sqrt.exe [status 1]
FAIL src/math/sqrtf.exe [status 1]
FAIL src/math/sqrtl.exe [status 1]
FAIL src/math/tgamma.exe [status 1]
FAIL src/math/tgammaf.exe [status 1]
FAIL src/math/tgammal.exe [status 1]
FAIL src/math/y0.exe [status 1]
FAIL src/math/y0f.exe [status 1]
FAIL src/math/y1.exe [status 1]
FAIL src/math/y1f.exe [status 1]
FAIL src/math/yn.exe [status 1]
FAIL src/math/ynf.exe [status 1]
FAIL src/regression/malloc-brk-fail-static.exe [status 1]
FAIL src/regression/malloc-brk-fail.exe [timed out]
FAIL src/regression/pthread-robust-detach-static.exe [status 1]
FAIL src/regression/pthread-robust-detach.exe [status 1]
FAIL src/regression/pthread_cond-smasher-static.exe [status 1]
FAIL src/regression/pthread_cond-smasher.exe [status 1]
FAIL src/regression/pthread_cond_wait-cancel_ignored-static.exe [status 1]
FAIL src/regression/pthread_once-deadlock-static.exe [status 1]


> 
> Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-04-15 17:50   ` sidneym
@ 2020-04-15 18:06     ` Szabolcs Nagy
  2020-04-15 18:22       ` sidneym
  2020-04-15 18:26       ` Rich Felker
  0 siblings, 2 replies; 42+ messages in thread
From: Szabolcs Nagy @ 2020-04-15 18:06 UTC (permalink / raw)
  To: sidneym; +Cc: musl

* sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-04-15 12:50:21 -0500]:
> > > Recently work has been done with clang/llvm/lld to extend support for
> > > Qualcomm's Hexagon DSP to a Linux target.  At this point the publicly
> > > available LLVM tools are able to build and run Hexagon programs via
> QEMU.
...
> This is the list, the context associated with some of the failures can be
> bulky so I hope the summary is ok.  Let me know which failures are most
> critical and I will try to fix those first.  51 failures after removing the
> TIME64 define

is this qemu system emulation?

i'd look at the pthread failures first.
sqrt/sqrtf should work too (you may want to
implement them if there is a single instruction)
other math failures are not target specific.
the ipc failures may be relevant, or it
may be a time issue (if timestamps fail).

> 
> FAIL src/api/main.exe [status 1]
> FAIL src/functional/dlopen.exe [status 1]
> FAIL src/functional/ipc_msg-static.exe [status 1]
> FAIL src/functional/ipc_msg.exe [status 1]
> FAIL src/functional/ipc_sem-static.exe [status 1]
> FAIL src/functional/ipc_sem.exe [status 1]
> FAIL src/functional/ipc_shm-static.exe [status 1]
> FAIL src/functional/ipc_shm.exe [status 1]
> FAIL src/functional/pthread_mutex-static.exe [status 1]
> FAIL src/functional/pthread_mutex.exe [status 1]
> FAIL src/functional/pthread_mutex_pi-static.exe [timed out]
> FAIL src/functional/pthread_mutex_pi.exe [signal Segmentation fault]
> FAIL src/functional/pthread_robust-static.exe [timed out]
> FAIL src/functional/pthread_robust.exe [timed out]
> FAIL src/functional/sem_init-static.exe [status 1]
> FAIL src/functional/sem_init.exe [status 1]
> FAIL src/functional/strptime-static.exe [status 1]
> FAIL src/functional/strptime.exe [status 1]
> FAIL src/functional/utime-static.exe [status 1]
> FAIL src/functional/utime.exe [status 1]
> FAIL src/math/acoshl.exe [status 1]
> FAIL src/math/asinhl.exe [status 1]
> FAIL src/math/erfcl.exe [status 1]
> FAIL src/math/exp2l.exe [status 1]
> FAIL src/math/fmal.exe [status 1]
> FAIL src/math/ilogb.exe [status 1]
> FAIL src/math/ilogbf.exe [status 1]
> FAIL src/math/ilogbl.exe [status 1]
> FAIL src/math/lgammal.exe [status 1]
> FAIL src/math/powf.exe [status 1]
> FAIL src/math/powl.exe [status 1]
> FAIL src/math/sqrt.exe [status 1]
> FAIL src/math/sqrtf.exe [status 1]
> FAIL src/math/sqrtl.exe [status 1]
> FAIL src/math/tgamma.exe [status 1]
> FAIL src/math/tgammaf.exe [status 1]
> FAIL src/math/tgammal.exe [status 1]
> FAIL src/math/y0.exe [status 1]
> FAIL src/math/y0f.exe [status 1]
> FAIL src/math/y1.exe [status 1]
> FAIL src/math/y1f.exe [status 1]
> FAIL src/math/yn.exe [status 1]
> FAIL src/math/ynf.exe [status 1]
> FAIL src/regression/malloc-brk-fail-static.exe [status 1]
> FAIL src/regression/malloc-brk-fail.exe [timed out]
> FAIL src/regression/pthread-robust-detach-static.exe [status 1]
> FAIL src/regression/pthread-robust-detach.exe [status 1]
> FAIL src/regression/pthread_cond-smasher-static.exe [status 1]
> FAIL src/regression/pthread_cond-smasher.exe [status 1]
> FAIL src/regression/pthread_cond_wait-cancel_ignored-static.exe [status 1]
> FAIL src/regression/pthread_once-deadlock-static.exe [status 1]
> 
> 
> > 
> > Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-04-15 18:06     ` Szabolcs Nagy
@ 2020-04-15 18:22       ` sidneym
  2020-04-16  9:36         ` Szabolcs Nagy
  2020-04-15 18:26       ` Rich Felker
  1 sibling, 1 reply; 42+ messages in thread
From: sidneym @ 2020-04-15 18:22 UTC (permalink / raw)
  To: musl



> -----Original Message-----
> From: Szabolcs Nagy <nsz@port70.net>
> Sent: Wednesday, April 15, 2020 1:06 PM
> To: sidneym@codeaurora.org
> Cc: musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-04-15
> 12:50:21 -0500]:
> > > > Recently work has been done with clang/llvm/lld to extend support
> > > > for Qualcomm's Hexagon DSP to a Linux target.  At this point the
> > > > publicly available LLVM tools are able to build and run Hexagon
> > > > programs via
> > QEMU.
> ...
> > This is the list, the context associated with some of the failures can
> > be bulky so I hope the summary is ok.  Let me know which failures are
> > most critical and I will try to fix those first.  51 failures after
> > removing the
> > TIME64 define
> 
> is this qemu system emulation?
No it isn't however that is being worked on.

> 
> i'd look at the pthread failures first.
> sqrt/sqrtf should work too (you may want to implement them if there is a
> single instruction) other math failures are not target specific.

In fact that does go away if I used the hardware accelerated routine that is
part of compiler-rt.builtins (__hexagon_sqrt)   Creating an explicit
reference to compiler-rt-builtins vs just copying the assembly, which is
preferred?


> the ipc failures may be relevant, or it
> may be a time issue (if timestamps fail).
> 
> >
> > FAIL src/api/main.exe [status 1]
> > FAIL src/functional/dlopen.exe [status 1] FAIL
> > src/functional/ipc_msg-static.exe [status 1] FAIL
> > src/functional/ipc_msg.exe [status 1] FAIL
> > src/functional/ipc_sem-static.exe [status 1] FAIL
> > src/functional/ipc_sem.exe [status 1] FAIL
> > src/functional/ipc_shm-static.exe [status 1] FAIL
> > src/functional/ipc_shm.exe [status 1] FAIL
> > src/functional/pthread_mutex-static.exe [status 1] FAIL
> > src/functional/pthread_mutex.exe [status 1] FAIL
> > src/functional/pthread_mutex_pi-static.exe [timed out] FAIL
> > src/functional/pthread_mutex_pi.exe [signal Segmentation fault] FAIL
> > src/functional/pthread_robust-static.exe [timed out] FAIL
> > src/functional/pthread_robust.exe [timed out] FAIL
> > src/functional/sem_init-static.exe [status 1] FAIL
> > src/functional/sem_init.exe [status 1] FAIL
> > src/functional/strptime-static.exe [status 1] FAIL
> > src/functional/strptime.exe [status 1] FAIL
> > src/functional/utime-static.exe [status 1] FAIL
> > src/functional/utime.exe [status 1] FAIL src/math/acoshl.exe [status
> > 1] FAIL src/math/asinhl.exe [status 1] FAIL src/math/erfcl.exe [status
> > 1] FAIL src/math/exp2l.exe [status 1] FAIL src/math/fmal.exe [status
> > 1] FAIL src/math/ilogb.exe [status 1] FAIL src/math/ilogbf.exe [status
> > 1] FAIL src/math/ilogbl.exe [status 1] FAIL src/math/lgammal.exe
> > [status 1] FAIL src/math/powf.exe [status 1] FAIL src/math/powl.exe
> > [status 1] FAIL src/math/sqrt.exe [status 1] FAIL src/math/sqrtf.exe
> > [status 1] FAIL src/math/sqrtl.exe [status 1] FAIL src/math/tgamma.exe
> > [status 1] FAIL src/math/tgammaf.exe [status 1] FAIL
> > src/math/tgammal.exe [status 1] FAIL src/math/y0.exe [status 1] FAIL
> > src/math/y0f.exe [status 1] FAIL src/math/y1.exe [status 1] FAIL
> > src/math/y1f.exe [status 1] FAIL src/math/yn.exe [status 1] FAIL
> > src/math/ynf.exe [status 1] FAIL
> > src/regression/malloc-brk-fail-static.exe [status 1] FAIL
> > src/regression/malloc-brk-fail.exe [timed out] FAIL
> > src/regression/pthread-robust-detach-static.exe [status 1] FAIL
> > src/regression/pthread-robust-detach.exe [status 1] FAIL
> > src/regression/pthread_cond-smasher-static.exe [status 1] FAIL
> > src/regression/pthread_cond-smasher.exe [status 1] FAIL
> > src/regression/pthread_cond_wait-cancel_ignored-static.exe [status 1]
> > FAIL src/regression/pthread_once-deadlock-static.exe [status 1]
> >
> >
> > >
> > > Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-04-15 18:06     ` Szabolcs Nagy
  2020-04-15 18:22       ` sidneym
@ 2020-04-15 18:26       ` Rich Felker
  2020-04-15 19:12         ` sidneym
  1 sibling, 1 reply; 42+ messages in thread
From: Rich Felker @ 2020-04-15 18:26 UTC (permalink / raw)
  To: sidneym, musl

On Wed, Apr 15, 2020 at 08:06:20PM +0200, Szabolcs Nagy wrote:
> * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-04-15 12:50:21 -0500]:
> > > > Recently work has been done with clang/llvm/lld to extend support for
> > > > Qualcomm's Hexagon DSP to a Linux target.  At this point the publicly
> > > > available LLVM tools are able to build and run Hexagon programs via
> > QEMU.
> ....
> > This is the list, the context associated with some of the failures can be
> > bulky so I hope the summary is ok.  Let me know which failures are most
> > critical and I will try to fix those first.  51 failures after removing the
> > TIME64 define
> 
> is this qemu system emulation?
> 
> i'd look at the pthread failures first.

If qemu-user these would possibly be expected failures. If qemu-system
or native they almost surely indicate bugs in the atomics.

> sqrt/sqrtf should work too (you may want to
> implement them if there is a single instruction)
> other math failures are not target specific.
> the ipc failures may be relevant, or it
> may be a time issue (if timestamps fail).

arch/hexagon/bits is missing sem.h etc. so it's using the arch/generic
definitions, which only work for archs that are 64-bit or where the
only existing kernel interface has 64-bit time_t (i.e. riscv32). For
anything else they must be defined with the proper hi/lo time members,
and bits/ipcstat.h must define IPC_STAT as 0x102 to activate the
translations.

> > FAIL src/api/main.exe [status 1]
> > FAIL src/functional/dlopen.exe [status 1]
> > FAIL src/functional/ipc_msg-static.exe [status 1]
> > FAIL src/functional/ipc_msg.exe [status 1]
> > FAIL src/functional/ipc_sem-static.exe [status 1]
> > FAIL src/functional/ipc_sem.exe [status 1]
> > FAIL src/functional/ipc_shm-static.exe [status 1]
> > FAIL src/functional/ipc_shm.exe [status 1]
> > FAIL src/functional/pthread_mutex-static.exe [status 1]
> > FAIL src/functional/pthread_mutex.exe [status 1]
> > FAIL src/functional/pthread_mutex_pi-static.exe [timed out]
> > FAIL src/functional/pthread_mutex_pi.exe [signal Segmentation fault]
> > FAIL src/functional/pthread_robust-static.exe [timed out]
> > FAIL src/functional/pthread_robust.exe [timed out]
> > FAIL src/functional/sem_init-static.exe [status 1]
> > FAIL src/functional/sem_init.exe [status 1]
> > FAIL src/functional/strptime-static.exe [status 1]
> > FAIL src/functional/strptime.exe [status 1]
> > FAIL src/functional/utime-static.exe [status 1]
> > FAIL src/functional/utime.exe [status 1]
> > FAIL src/math/acoshl.exe [status 1]
> > FAIL src/math/asinhl.exe [status 1]
> > FAIL src/math/erfcl.exe [status 1]
> > FAIL src/math/exp2l.exe [status 1]
> > FAIL src/math/fmal.exe [status 1]
> > FAIL src/math/ilogb.exe [status 1]
> > FAIL src/math/ilogbf.exe [status 1]
> > FAIL src/math/ilogbl.exe [status 1]
> > FAIL src/math/lgammal.exe [status 1]
> > FAIL src/math/powf.exe [status 1]
> > FAIL src/math/powl.exe [status 1]
> > FAIL src/math/sqrt.exe [status 1]
> > FAIL src/math/sqrtf.exe [status 1]
> > FAIL src/math/sqrtl.exe [status 1]
> > FAIL src/math/tgamma.exe [status 1]
> > FAIL src/math/tgammaf.exe [status 1]
> > FAIL src/math/tgammal.exe [status 1]
> > FAIL src/math/y0.exe [status 1]
> > FAIL src/math/y0f.exe [status 1]
> > FAIL src/math/y1.exe [status 1]
> > FAIL src/math/y1f.exe [status 1]
> > FAIL src/math/yn.exe [status 1]
> > FAIL src/math/ynf.exe [status 1]
> > FAIL src/regression/malloc-brk-fail-static.exe [status 1]
> > FAIL src/regression/malloc-brk-fail.exe [timed out]
> > FAIL src/regression/pthread-robust-detach-static.exe [status 1]
> > FAIL src/regression/pthread-robust-detach.exe [status 1]
> > FAIL src/regression/pthread_cond-smasher-static.exe [status 1]
> > FAIL src/regression/pthread_cond-smasher.exe [status 1]
> > FAIL src/regression/pthread_cond_wait-cancel_ignored-static.exe [status 1]
> > FAIL src/regression/pthread_once-deadlock-static.exe [status 1]

Could you send the whole src/REPORT file which contains not just the
FAIL lines but the specific test failures that caused them? And label
whether it's for qemu-user, qemu-system, or real metal.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-04-15 13:19 [musl] Hexagon DSP support sidneym
  2020-04-15 16:30 ` Rich Felker
@ 2020-04-15 18:55 ` Fangrui Song
  1 sibling, 0 replies; 42+ messages in thread
From: Fangrui Song @ 2020-04-15 18:55 UTC (permalink / raw)
  To: sidneym; +Cc: musl

On 2020-04-15, sidneym@codeaurora.org wrote:
>Recently work has been done with clang/llvm/lld to extend support for
>Qualcomm's Hexagon DSP to a Linux target.  At this point the publicly
>available LLVM tools are able to build and run Hexagon programs via QEMU.
>I've attached a patch that add the Hexagon bits to musl.  The optimized
>routines have been purposely omitted to keep the size and complexity to a
>minimum.
>
>The changes are being mirrored here:
>https://github.com/quic/musl/tree/hexagon
>The QEMU mirror is here: https://github.com/quic/qemu
>A description of the assembly language is here:
>https://developer.qualcomm.com/download/hexagon/hexagon-v5x-programmers-refe
>rence-manual.pdf?referrer=node/6116
>
>The objective is to have enough freely available tools and libraries that
>any user could develop code for the DSP.  The C-library is an important part
>of that stack and this patch is intended to start a discussion of what would
>need to happen in order for Hexagon to be added to the musl sources.
>
>I've tested this using libc-test (git://repo.or.cz/libc-test) and 56 errors
>are reported.  The support for Hexagon in QEMU is on-going and while some of
>the errors (math) may be attributed to QEMU most also happen on hardware.  A
>good chunk fail due to floating point exception status or precision.
>
>Beyond the above testing a large number of packages have been built using
>buildroot with our internal llvm tools.  No issues outside of tweaks to
>avoid glibc assumptions were seen.

WoW

Any chance to move the psABI
(http://lists.llvm.org/pipermail/llvm-dev/attachments/20190916/21516a52/attachment-0001.pdf),
as mentioned by https://reviews.llvm.org/D77021#1950279 to a more discoverable/official place :) ?

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-04-15 18:26       ` Rich Felker
@ 2020-04-15 19:12         ` sidneym
  2020-04-15 19:29           ` 'Rich Felker'
  0 siblings, 1 reply; 42+ messages in thread
From: sidneym @ 2020-04-15 19:12 UTC (permalink / raw)
  To: 'Rich Felker', musl

[-- Attachment #1: Type: text/plain, Size: 4548 bytes --]



> -----Original Message-----
> From: Rich Felker <dalias@libc.org>
> Sent: Wednesday, April 15, 2020 1:26 PM
> To: sidneym@codeaurora.org; musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> On Wed, Apr 15, 2020 at 08:06:20PM +0200, Szabolcs Nagy wrote:
> > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-04-15
> 12:50:21 -0500]:
> > > > > Recently work has been done with clang/llvm/lld to extend
> > > > > support for Qualcomm's Hexagon DSP to a Linux target.  At this
> > > > > point the publicly available LLVM tools are able to build and
> > > > > run Hexagon programs via
> > > QEMU.
> > ....
> > > This is the list, the context associated with some of the failures
> > > can be bulky so I hope the summary is ok.  Let me know which
> > > failures are most critical and I will try to fix those first.  51
> > > failures after removing the
> > > TIME64 define
> >
> > is this qemu system emulation?
> >
> > i'd look at the pthread failures first.
> 
> If qemu-user these would possibly be expected failures. If qemu-system or
> native they almost surely indicate bugs in the atomics.
> 
> > sqrt/sqrtf should work too (you may want to implement them if there is
> > a single instruction) other math failures are not target specific.
> > the ipc failures may be relevant, or it may be a time issue (if
> > timestamps fail).
> 
> arch/hexagon/bits is missing sem.h etc. so it's using the arch/generic
> definitions, which only work for archs that are 64-bit or where the only
> existing kernel interface has 64-bit time_t (i.e. riscv32). For anything
else
> they must be defined with the proper hi/lo time members, and
bits/ipcstat.h
> must define IPC_STAT as 0x102 to activate the translations.

Thanks I will take a look at these headers and the test issues.

> 
> > > FAIL src/api/main.exe [status 1]
> > > FAIL src/functional/dlopen.exe [status 1] FAIL
> > > src/functional/ipc_msg-static.exe [status 1] FAIL
> > > src/functional/ipc_msg.exe [status 1] FAIL
> > > src/functional/ipc_sem-static.exe [status 1] FAIL
> > > src/functional/ipc_sem.exe [status 1] FAIL
> > > src/functional/ipc_shm-static.exe [status 1] FAIL
> > > src/functional/ipc_shm.exe [status 1] FAIL
> > > src/functional/pthread_mutex-static.exe [status 1] FAIL
> > > src/functional/pthread_mutex.exe [status 1] FAIL
> > > src/functional/pthread_mutex_pi-static.exe [timed out] FAIL
> > > src/functional/pthread_mutex_pi.exe [signal Segmentation fault] FAIL
> > > src/functional/pthread_robust-static.exe [timed out] FAIL
> > > src/functional/pthread_robust.exe [timed out] FAIL
> > > src/functional/sem_init-static.exe [status 1] FAIL
> > > src/functional/sem_init.exe [status 1] FAIL
> > > src/functional/strptime-static.exe [status 1] FAIL
> > > src/functional/strptime.exe [status 1] FAIL
> > > src/functional/utime-static.exe [status 1] FAIL
> > > src/functional/utime.exe [status 1] FAIL src/math/acoshl.exe [status
> > > 1] FAIL src/math/asinhl.exe [status 1] FAIL src/math/erfcl.exe
> > > [status 1] FAIL src/math/exp2l.exe [status 1] FAIL src/math/fmal.exe
> > > [status 1] FAIL src/math/ilogb.exe [status 1] FAIL
> > > src/math/ilogbf.exe [status 1] FAIL src/math/ilogbl.exe [status 1]
> > > FAIL src/math/lgammal.exe [status 1] FAIL src/math/powf.exe [status
> > > 1] FAIL src/math/powl.exe [status 1] FAIL src/math/sqrt.exe [status
> > > 1] FAIL src/math/sqrtf.exe [status 1] FAIL src/math/sqrtl.exe
> > > [status 1] FAIL src/math/tgamma.exe [status 1] FAIL
> > > src/math/tgammaf.exe [status 1] FAIL src/math/tgammal.exe [status 1]
> > > FAIL src/math/y0.exe [status 1] FAIL src/math/y0f.exe [status 1]
> > > FAIL src/math/y1.exe [status 1] FAIL src/math/y1f.exe [status 1]
> > > FAIL src/math/yn.exe [status 1] FAIL src/math/ynf.exe [status 1]
> > > FAIL src/regression/malloc-brk-fail-static.exe [status 1] FAIL
> > > src/regression/malloc-brk-fail.exe [timed out] FAIL
> > > src/regression/pthread-robust-detach-static.exe [status 1] FAIL
> > > src/regression/pthread-robust-detach.exe [status 1] FAIL
> > > src/regression/pthread_cond-smasher-static.exe [status 1] FAIL
> > > src/regression/pthread_cond-smasher.exe [status 1] FAIL
> > > src/regression/pthread_cond_wait-cancel_ignored-static.exe [status
> > > 1] FAIL src/regression/pthread_once-deadlock-static.exe [status 1]
> 
> Could you send the whole src/REPORT file which contains not just the FAIL
> lines but the specific test failures that caused them? And label whether
it's
> for qemu-user, qemu-system, or real metal.

OK I attached the full report.


> 
> Rich

[-- Attachment #2: REPORT-qemu-user --]
[-- Type: application/octet-stream, Size: 256176 bytes --]

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-04-15 19:12         ` sidneym
@ 2020-04-15 19:29           ` 'Rich Felker'
  2020-04-30 22:44             ` sidneym
  0 siblings, 1 reply; 42+ messages in thread
From: 'Rich Felker' @ 2020-04-15 19:29 UTC (permalink / raw)
  To: sidneym; +Cc: musl

On Wed, Apr 15, 2020 at 02:12:12PM -0500, sidneym@codeaurora.org wrote:
> src/api/ftw.c:44:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]

Compiling libc-test with -Werror is invalid. It necessarily must
produce some warnings, and needs to be able to distinguish actual
errors from them.

> 8 errors generated.
> src/functional/dlopen.c:39: dlsym main failed: Symbol not found: main
> FAIL src/functional/dlopen.exe [status 1]
> clang-11: warning: argument unused during compilation: '-rdynamic' [-Wunused-command-line-argument]

This is a clang deficiency that's preventing the test from working.

> src/functional/ipc_msg.c:62: qid_ds.msg_lspid == 0 failed: got 100, want 0
> src/functional/ipc_msg.c:64: (long long)qid_ds.msg_stime == 0 failed: got 6815993655711498240, want 0
> src/functional/ipc_msg.c:67: qid_ds.msg_ctime >= t failed: got 70368744177664, want >= 154502684032321054
> src/functional/ipc_msg.c:71: qid_ds.msg_qbytes > 0 failed: got 0, want > 0
> src/functional/ipc_msg.c:76: qid_ds.msg_qnum == 1 failed: got 0, want 1
> src/functional/ipc_msg.c:77: qid_ds.msg_lspid == getpid() failed: got 100, want 185819
> src/functional/ipc_msg.c:81: msg_stime is 6815993655711498240 want <= 154502684032321059
> src/functional/ipc_msg.c:128: child exit status: 256
> FAIL src/functional/ipc_msg-static.exe [status 1]

This is the sysvipc bits headers issue I mentioned. Same with the
sem/shm ones.

> src/functional/pthread_mutex.c:145: PTHREAD_MUTEX_ERRORCHECK relock did not return EDEADLK, got deadlock
> src/functional/pthread_mutex.c:148: PTHREAD_MUTEX_RECURSIVE relock did not succed, got deadlock
> FAIL src/functional/pthread_mutex-static.exe [status 1]
> src/functional/pthread_mutex.c:145: PTHREAD_MUTEX_ERRORCHECK relock did not return EDEADLK, got 
> src/functional/pthread_mutex.c:148: PTHREAD_MUTEX_RECURSIVE relock did not succed, got deadlock
> FAIL src/functional/pthread_mutex.exe [status 1]

This suggests broken atomics. It doesn't look like anything qemu-user
could cause (unless it's just failing to emulate the atomics at all).

> src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
> src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
> src/functional/pthread_mutex_pi.c:148: PTHREAD_MUTEX_ERRORCHECK relock did not return EDEADLK, got deadlock
> src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
> FAIL src/functional/pthread_mutex_pi-static.exe [timed out]
> src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
> src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
> src/functional/pthread_mutex_pi.c:148: PTHREAD_MUTEX_ERRORCHECK relock did not return EDEADLK, got deadlock
> src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
> src/functional/pthread_mutex_pi.c:151: PTHREAD_MUTEX_RECURSIVE relock did not succed, got deadlock
> src/functional/pthread_mutex_pi.c:87: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
> src/functional/pthread_mutex_pi.c:24: pthread_mutex_unlock(a[0]) failed: Operation not permitted
> FAIL src/functional/pthread_mutex_pi.exe [signal Segmentation fault]
> src/functional/pthread_robust.c:39: pthread_mutexattr_setrobust(&mtx_a, PTHREAD_MUTEX_ROBUST) failed: (pshared==0, pi==0) Function not implemented (setting robust attribute)
> FAIL src/functional/pthread_robust-static.exe [timed out]
> src/functional/pthread_robust.c:39: pthread_mutexattr_setrobust(&mtx_a, PTHREAD_MUTEX_ROBUST) failed: (pshared==0, pi==0) Function not implemented (setting robust attribute)
> FAIL src/functional/pthread_robust.exe [timed out]

These are all expected on qemu-user: kernel prio-inherit and robust
features are not emulated by qemu.

> src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed: Operation timed out
> src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed: Operation timed out
> src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed: Operation timed out
> src/functional/sem_init.c:49: sem value should be 0, got 3
> FAIL src/functional/sem_init-static.exe [status 1]
> src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed: Operation timed out
> src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed: Operation timed out
> src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed: Operation timed out
> src/functional/sem_init.c:49: sem value should be 0, got 3
> FAIL src/functional/sem_init.exe [status 1]

This is probably broken atomics again.

> src/functional/strptime.c:23: "%F": failed to parse "1856-07-10"
> src/functional/strptime.c:23: "%s": failed to parse "683078400"
> src/functional/strptime.c:47: "%z": failed to parse "+0200"
> src/functional/strptime.c:47: "%z": failed to parse "-0530"
> src/functional/strptime.c:47: "%z": failed to parse "-06"
> FAIL src/functional/strptime-static.exe [status 1]
> src/functional/strptime.c:23: "%F": failed to parse "1856-07-10"
> src/functional/strptime.c:23: "%s": failed to parse "683078400"
> src/functional/strptime.c:47: "%z": failed to parse "+0200"
> src/functional/strptime.c:47: "%z": failed to parse "-0530"
> src/functional/strptime.c:47: "%z": failed to parse "-06"
> FAIL src/functional/strptime.exe [status 1]

These are expected, functionality musl does not yet support
(future-standard, I think).

> src/functional/utime.c:38: st.st_atim.tv_sec == 0 failed: 1
> src/functional/utime.c:40: st.st_mtim.tv_sec == 0 failed: 1073741822
> src/functional/utime.c:47: st.st_atim.tv_sec >= t failed: 0
> src/functional/utime.c:48: st.st_mtim.tv_sec == 0 failed: 1073741823
> src/functional/utime.c:55: st.st_mtim.tv_sec >= t failed: 1073741822
> src/functional/utime.c:59: st.st_atim.tv_sec >= t failed: 0
> src/functional/utime.c:60: st.st_mtim.tv_sec >= t failed: 1073741823
> src/functional/utime.c:65: st.st_atim.tv_sec == 1LL<<32 failed: 0
> src/functional/utime.c:66: st.st_mtim.tv_sec == 1LL<<32 failed: 0
> FAIL src/functional/utime-static.exe [status 1]
> src/functional/utime.c:38: st.st_atim.tv_sec == 0 failed: 1
> src/functional/utime.c:40: st.st_mtim.tv_sec == 0 failed: 1073741822
> src/functional/utime.c:47: st.st_atim.tv_sec >= t failed: 0
> src/functional/utime.c:48: st.st_mtim.tv_sec == 0 failed: 1073741823
> src/functional/utime.c:55: st.st_mtim.tv_sec >= t failed: 1073741822
> src/functional/utime.c:59: st.st_atim.tv_sec >= t failed: 0
> src/functional/utime.c:60: st.st_mtim.tv_sec >= t failed: 1073741823
> src/functional/utime.c:65: st.st_atim.tv_sec == 1LL<<32 failed: 0
> src/functional/utime.c:66: st.st_mtim.tv_sec == 1LL<<32 failed: 0
> FAIL src/functional/utime.exe [status 1]

Looks like something is wrong here, possibly wrong struct kstat, or it
could be a qemu bug.

> src/math/ucb/sqrt.h:47: bad fp exception: RN sqrt(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT got 0
> [...]
> src/math/special/sqrt.h:74: bad fp exception: RN sqrtl(0x1.9b294f88p-1015)=0x1.cad197e28e85bp-508, want INEXACT got 0
> FAIL src/math/sqrtl.exe [status 1]

These are likely all general (not arch-specific) clang floating point
bugs. We should see if they also happen compiling other archs without
asm versions of sqrt.

Alternatively it might be a qemu fpu emulation bug. I've seen this
kind of thing (inconsistent across arch) on other archs under
qemu-user.

> src/regression/malloc-brk-fail.c:41: malloc(10000) failed (eventhough 64k is available to mmap): Out of memory
> FAIL src/regression/malloc-brk-fail-static.exe [status 1]
> FAIL src/regression/malloc-brk-fail.exe [timed out]

This test does not seem to work on modern kernels much less qemu-user.

> src/regression/pthread-robust-detach.c:33: pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==0) got 38 "Function not implemented" want 0 "No error information"
> src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx, &ts) failed: (pshared==0) got 110 "Operation timed out" want 130 "Previous owner died"
> src/regression/pthread-robust-detach.c:33: pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==1) got 38 "Function not implemented" want 0 "No error information"
> src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx, &ts) failed: (pshared==1) got 110 "Operation timed out" want 130 "Previous owner died"
> FAIL src/regression/pthread-robust-detach-static.exe [status 1]
> src/regression/pthread-robust-detach.c:33: pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==0) got 38 "Function not implemented" want 0 "No error information"
> src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx, &ts) failed: (pshared==0) got 110 "Operation timed out" want 130 "Previous owner died"
> src/regression/pthread-robust-detach.c:33: pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==1) got 38 "Function not implemented" want 0 "No error information"
> src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx, &ts) failed: (pshared==1) got 110 "Operation timed out" want 130 "Previous owner died"
> FAIL src/regression/pthread-robust-detach.exe [status 1]

Expected on qemu-user.

> src/regression/pthread_cond-smasher.c:140: main thread in phase 0 (0 threads inside), finished waiting: Operation timed out
> FAIL src/regression/pthread_cond-smasher-static.exe [status 1]
> src/regression/pthread_cond-smasher.c:104: thread 5 in phase 0 (0) finished waiting: Operation timed out
> FAIL src/regression/pthread_cond-smasher.exe [status 1]

These could be atomic bugs or just emulation being slow.

> src/regression/pthread_cond_wait-cancel_ignored.c:52: pthread_cond_wait did not act on cancellation
> FAIL src/regression/pthread_cond_wait-cancel_ignored-static.exe [status 1]
> src/regression/pthread_once-deadlock.c:41: sem_timedwait(s,&ts) failed: Operation timed out
> src/regression/pthread_once-deadlock.c:44: pthread_once deadlocked
> FAIL src/regression/pthread_once-deadlock-static.exe [status 1]

These are definitely atomic bugs (either in the arch bits or in qemu).

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-04-15 18:22       ` sidneym
@ 2020-04-16  9:36         ` Szabolcs Nagy
  2020-04-16 15:34           ` Rich Felker
  0 siblings, 1 reply; 42+ messages in thread
From: Szabolcs Nagy @ 2020-04-16  9:36 UTC (permalink / raw)
  To: sidneym; +Cc: musl

* sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-04-15 13:22:29 -0500]:
> > sqrt/sqrtf should work too (you may want to implement them if there is a
> > single instruction) other math failures are not target specific.
> 
> In fact that does go away if I used the hardware accelerated routine that is
> part of compiler-rt.builtins (__hexagon_sqrt)   Creating an explicit
> reference to compiler-rt-builtins vs just copying the assembly, which is
> preferred?

the preferred is like on other targets an inline asm block.
i think using __builtin_sqrt may be fine too if you know that
all hexagon compilers support that and doesnt generate an
actual sqrt call (e.g. on gcc that needs -fno-math-errno).

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-04-16  9:36         ` Szabolcs Nagy
@ 2020-04-16 15:34           ` Rich Felker
  2020-04-16 16:26             ` sidneym
  0 siblings, 1 reply; 42+ messages in thread
From: Rich Felker @ 2020-04-16 15:34 UTC (permalink / raw)
  To: sidneym, musl

On Thu, Apr 16, 2020 at 11:36:38AM +0200, Szabolcs Nagy wrote:
> * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-04-15 13:22:29 -0500]:
> > > sqrt/sqrtf should work too (you may want to implement them if there is a
> > > single instruction) other math failures are not target specific.
> > 
> > In fact that does go away if I used the hardware accelerated routine that is
> > part of compiler-rt.builtins (__hexagon_sqrt)   Creating an explicit
> > reference to compiler-rt-builtins vs just copying the assembly, which is
> > preferred?
> 
> the preferred is like on other targets an inline asm block.
> i think using __builtin_sqrt may be fine too if you know that
> all hexagon compilers support that and doesnt generate an
> actual sqrt call (e.g. on gcc that needs -fno-math-errno).

__builtin_sqrt is explicitly allowed to compile to an external call to
sqrt (at compiler discretion), and thus can't be used to implement the
sqrt function. If you're implementing a native sqrt it should be
inline asm. But the C sqrt should work too. If it's not working that
indicates a bug in the compiler, in the code in musl, or in qemu, and
whichever it is we should track that down and get it fixed.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-04-16 15:34           ` Rich Felker
@ 2020-04-16 16:26             ` sidneym
  2020-04-16 16:34               ` 'Rich Felker'
  0 siblings, 1 reply; 42+ messages in thread
From: sidneym @ 2020-04-16 16:26 UTC (permalink / raw)
  To: 'Rich Felker', musl



> -----Original Message-----
> From: Rich Felker <dalias@libc.org>
> Sent: Thursday, April 16, 2020 10:34 AM
> To: sidneym@codeaurora.org; musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> On Thu, Apr 16, 2020 at 11:36:38AM +0200, Szabolcs Nagy wrote:
> > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-04-15
> 13:22:29 -0500]:
> > > > sqrt/sqrtf should work too (you may want to implement them if
> > > > there is a single instruction) other math failures are not target
specific.
> > >
> > > In fact that does go away if I used the hardware accelerated routine
that
> is
> > > part of compiler-rt.builtins (__hexagon_sqrt)   Creating an explicit
> > > reference to compiler-rt-builtins vs just copying the assembly,
> > > which is preferred?
> >
> > the preferred is like on other targets an inline asm block.
> > i think using __builtin_sqrt may be fine too if you know that all
> > hexagon compilers support that and doesnt generate an actual sqrt call
> > (e.g. on gcc that needs -fno-math-errno).
> 
> __builtin_sqrt is explicitly allowed to compile to an external call to
sqrt (at
> compiler discretion), and thus can't be used to implement the sqrt
function.
> If you're implementing a native sqrt it should be inline asm. But the C
sqrt
> should work too. If it's not working that indicates a bug in the compiler,
in the
> code in musl, or in qemu, and whichever it is we should track that down
and
> get it fixed.

I will add the assembly version for sqrt. There was an issue in qemu when
using the assembly version but that is fixed.  FWIW when I use the soft
version with clang for hexagon I still see errors, mostly looking for
INEXACT but not seeing it.


> 
> Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-04-16 16:26             ` sidneym
@ 2020-04-16 16:34               ` 'Rich Felker'
  0 siblings, 0 replies; 42+ messages in thread
From: 'Rich Felker' @ 2020-04-16 16:34 UTC (permalink / raw)
  To: sidneym; +Cc: musl

On Thu, Apr 16, 2020 at 11:26:52AM -0500, sidneym@codeaurora.org wrote:
> 
> 
> > -----Original Message-----
> > From: Rich Felker <dalias@libc.org>
> > Sent: Thursday, April 16, 2020 10:34 AM
> > To: sidneym@codeaurora.org; musl@lists.openwall.com
> > Subject: Re: [musl] Hexagon DSP support
> > 
> > On Thu, Apr 16, 2020 at 11:36:38AM +0200, Szabolcs Nagy wrote:
> > > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-04-15
> > 13:22:29 -0500]:
> > > > > sqrt/sqrtf should work too (you may want to implement them if
> > > > > there is a single instruction) other math failures are not target
> specific.
> > > >
> > > > In fact that does go away if I used the hardware accelerated routine
> that
> > is
> > > > part of compiler-rt.builtins (__hexagon_sqrt)   Creating an explicit
> > > > reference to compiler-rt-builtins vs just copying the assembly,
> > > > which is preferred?
> > >
> > > the preferred is like on other targets an inline asm block.
> > > i think using __builtin_sqrt may be fine too if you know that all
> > > hexagon compilers support that and doesnt generate an actual sqrt call
> > > (e.g. on gcc that needs -fno-math-errno).
> > 
> > __builtin_sqrt is explicitly allowed to compile to an external call to
> sqrt (at
> > compiler discretion), and thus can't be used to implement the sqrt
> function.
> > If you're implementing a native sqrt it should be inline asm. But the C
> sqrt
> > should work too. If it's not working that indicates a bug in the compiler,
> in the
> > code in musl, or in qemu, and whichever it is we should track that down
> and
> > get it fixed.
> 
> I will add the assembly version for sqrt. There was an issue in qemu when
> using the assembly version but that is fixed.  FWIW when I use the soft
> version with clang for hexagon I still see errors, mostly looking for
> INEXACT but not seeing it.

I saw errors that were actual incorrect results not just wrong
exception flags, like:

src/math/ucb/sqrt.h:49: RU sqrt(0x1.fffffffffffffp+1023) want 0x1p+512 got 0x1.fffffffffffffp+511 ulperr -0.250 = -0x1p-1 + 0x1p-2

At least they all seemed to be in non-default rounding modes though so
the impact is low-ish. These are probably all qemu bugs but hard to
say for sure...

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-04-15 19:29           ` 'Rich Felker'
@ 2020-04-30 22:44             ` sidneym
  2020-04-30 23:51               ` Rich Felker
  0 siblings, 1 reply; 42+ messages in thread
From: sidneym @ 2020-04-30 22:44 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 12300 bytes --]

> -----Original Message-----
> From: 'Rich Felker' <dalias@libc.org>
> Sent: Wednesday, April 15, 2020 2:30 PM
> To: sidneym@codeaurora.org
> Cc: musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> On Wed, Apr 15, 2020 at 02:12:12PM -0500, sidneym@codeaurora.org wrote:
> > src/api/ftw.c:44:1: error: switch condition has boolean value
> > [-Werror,-Wswitch-bool]
> 
> Compiling libc-test with -Werror is invalid. It necessarily must produce
some
> warnings, and needs to be able to distinguish actual errors from them.
> 
> > 8 errors generated.
> > src/functional/dlopen.c:39: dlsym main failed: Symbol not found: main
> > FAIL src/functional/dlopen.exe [status 1]
> > clang-11: warning: argument unused during compilation: '-rdynamic'
> > [-Wunused-command-line-argument]
> 
> This is a clang deficiency that's preventing the test from working.
> 
> > src/functional/ipc_msg.c:62: qid_ds.msg_lspid == 0 failed: got 100,
> > want 0
> > src/functional/ipc_msg.c:64: (long long)qid_ds.msg_stime == 0 failed:
> > got 6815993655711498240, want 0
> > src/functional/ipc_msg.c:67: qid_ds.msg_ctime >= t failed: got
> > 70368744177664, want >= 154502684032321054
> > src/functional/ipc_msg.c:71: qid_ds.msg_qbytes > 0 failed: got 0, want
> > > 0
> > src/functional/ipc_msg.c:76: qid_ds.msg_qnum == 1 failed: got 0, want
> > 1
> > src/functional/ipc_msg.c:77: qid_ds.msg_lspid == getpid() failed: got
> > 100, want 185819
> > src/functional/ipc_msg.c:81: msg_stime is 6815993655711498240 want <=
> > 154502684032321059
> > src/functional/ipc_msg.c:128: child exit status: 256 FAIL
> > src/functional/ipc_msg-static.exe [status 1]
> 
> This is the sysvipc bits headers issue I mentioned. Same with the sem/shm
> ones.

Passing with updated headers and qemu.

> 
> > src/functional/pthread_mutex.c:145: PTHREAD_MUTEX_ERRORCHECK relock
> > did not return EDEADLK, got deadlock
> > src/functional/pthread_mutex.c:148: PTHREAD_MUTEX_RECURSIVE relock
> did
> > not succed, got deadlock FAIL src/functional/pthread_mutex-static.exe
> > [status 1]
> > src/functional/pthread_mutex.c:145: PTHREAD_MUTEX_ERRORCHECK relock
> > did not return EDEADLK, got
> > src/functional/pthread_mutex.c:148: PTHREAD_MUTEX_RECURSIVE relock
> did
> > not succed, got deadlock FAIL src/functional/pthread_mutex.exe [status
> > 1]
> 
> This suggests broken atomics. It doesn't look like anything qemu-user
could
> cause (unless it's just failing to emulate the atomics at all).
> 
Updated QEMU to include time64 changes.  Passing now.

> > src/functional/pthread_mutex_pi.c:42:
> > pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed:
> > Function not implemented
> > src/functional/pthread_mutex_pi.c:42:
> > pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed:
> > Function not implemented
> > src/functional/pthread_mutex_pi.c:148: PTHREAD_MUTEX_ERRORCHECK
> relock
> > did not return EDEADLK, got deadlock
> > src/functional/pthread_mutex_pi.c:42:
> > pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed:
> > Function not implemented FAIL
> > src/functional/pthread_mutex_pi-static.exe [timed out]
> > src/functional/pthread_mutex_pi.c:42:
> > pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed:
> > Function not implemented
> > src/functional/pthread_mutex_pi.c:42:
> > pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed:
> > Function not implemented
> > src/functional/pthread_mutex_pi.c:148: PTHREAD_MUTEX_ERRORCHECK
> relock
> > did not return EDEADLK, got deadlock
> > src/functional/pthread_mutex_pi.c:42:
> > pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed:
> > Function not implemented
> > src/functional/pthread_mutex_pi.c:151: PTHREAD_MUTEX_RECURSIVE
> relock
> > did not succed, got deadlock
> > src/functional/pthread_mutex_pi.c:87:
> > pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed:
> > Function not implemented
> > src/functional/pthread_mutex_pi.c:24: pthread_mutex_unlock(a[0])
> > failed: Operation not permitted FAIL
> > src/functional/pthread_mutex_pi.exe [signal Segmentation fault]
> > src/functional/pthread_robust.c:39:
> > pthread_mutexattr_setrobust(&mtx_a, PTHREAD_MUTEX_ROBUST) failed:
> > (pshared==0, pi==0) Function not implemented (setting robust
> > attribute) FAIL src/functional/pthread_robust-static.exe [timed out]
> > src/functional/pthread_robust.c:39:
> > pthread_mutexattr_setrobust(&mtx_a, PTHREAD_MUTEX_ROBUST) failed:
> > (pshared==0, pi==0) Function not implemented (setting robust
> > attribute) FAIL src/functional/pthread_robust.exe [timed out]
> 
> These are all expected on qemu-user: kernel prio-inherit and robust
features
> are not emulated by qemu.
> 
> > src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed:
> > Operation timed out
> > src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed:
> > Operation timed out
> > src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed:
> > Operation timed out
> > src/functional/sem_init.c:49: sem value should be 0, got 3 FAIL
> > src/functional/sem_init-static.exe [status 1]
> > src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed:
> > Operation timed out
> > src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed:
> > Operation timed out
> > src/functional/sem_init.c:19: sem_timedwait(s+1, &ts) failed:
> > Operation timed out
> > src/functional/sem_init.c:49: sem value should be 0, got 3 FAIL
> > src/functional/sem_init.exe [status 1]
> 
> This is probably broken atomics again.

Passed with updated headers and QEMU.

> 
> > src/functional/strptime.c:23: "%F": failed to parse "1856-07-10"
> > src/functional/strptime.c:23: "%s": failed to parse "683078400"
> > src/functional/strptime.c:47: "%z": failed to parse "+0200"
> > src/functional/strptime.c:47: "%z": failed to parse "-0530"
> > src/functional/strptime.c:47: "%z": failed to parse "-06"
> > FAIL src/functional/strptime-static.exe [status 1]
> > src/functional/strptime.c:23: "%F": failed to parse "1856-07-10"
> > src/functional/strptime.c:23: "%s": failed to parse "683078400"
> > src/functional/strptime.c:47: "%z": failed to parse "+0200"
> > src/functional/strptime.c:47: "%z": failed to parse "-0530"
> > src/functional/strptime.c:47: "%z": failed to parse "-06"
> > FAIL src/functional/strptime.exe [status 1]
> 
> These are expected, functionality musl does not yet support
(future-standard, I
> think).
> 
> > src/functional/utime.c:38: st.st_atim.tv_sec == 0 failed: 1
> > src/functional/utime.c:40: st.st_mtim.tv_sec == 0 failed: 1073741822
> > src/functional/utime.c:47: st.st_atim.tv_sec >= t failed: 0
> > src/functional/utime.c:48: st.st_mtim.tv_sec == 0 failed: 1073741823
> > src/functional/utime.c:55: st.st_mtim.tv_sec >= t failed: 1073741822
> > src/functional/utime.c:59: st.st_atim.tv_sec >= t failed: 0
> > src/functional/utime.c:60: st.st_mtim.tv_sec >= t failed: 1073741823
> > src/functional/utime.c:65: st.st_atim.tv_sec == 1LL<<32 failed: 0
> > src/functional/utime.c:66: st.st_mtim.tv_sec == 1LL<<32 failed: 0 FAIL
> > src/functional/utime-static.exe [status 1]
> > src/functional/utime.c:38: st.st_atim.tv_sec == 0 failed: 1
> > src/functional/utime.c:40: st.st_mtim.tv_sec == 0 failed: 1073741822
> > src/functional/utime.c:47: st.st_atim.tv_sec >= t failed: 0
> > src/functional/utime.c:48: st.st_mtim.tv_sec == 0 failed: 1073741823
> > src/functional/utime.c:55: st.st_mtim.tv_sec >= t failed: 1073741822
> > src/functional/utime.c:59: st.st_atim.tv_sec >= t failed: 0
> > src/functional/utime.c:60: st.st_mtim.tv_sec >= t failed: 1073741823
> > src/functional/utime.c:65: st.st_atim.tv_sec == 1LL<<32 failed: 0
> > src/functional/utime.c:66: st.st_mtim.tv_sec == 1LL<<32 failed: 0 FAIL
> > src/functional/utime.exe [status 1]
> 
> Looks like something is wrong here, possibly wrong struct kstat, or it
could be a
> qemu bug.

It seems like QEMU's TARGET_NR_utimensat needs to changes similar to those
done for clock_get/settime to account for 64bit time_t.   I made some
changes but the last 2 checks at 65 and 66 still fail.

> 
> > src/math/ucb/sqrt.h:47: bad fp exception: RN
> > sqrt(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT got
> > 0 [...]
> > src/math/special/sqrt.h:74: bad fp exception: RN
> > sqrtl(0x1.9b294f88p-1015)=0x1.cad197e28e85bp-508, want INEXACT got 0
> > FAIL src/math/sqrtl.exe [status 1]
> 
> These are likely all general (not arch-specific) clang floating point
bugs. We
> should see if they also happen compiling other archs without asm versions
of
> sqrt.

Assembly version of sqrt does pass.

> 
> Alternatively it might be a qemu fpu emulation bug. I've seen this kind of
thing
> (inconsistent across arch) on other archs under qemu-user.
> 
> > src/regression/malloc-brk-fail.c:41: malloc(10000) failed (eventhough
> > 64k is available to mmap): Out of memory FAIL
> > src/regression/malloc-brk-fail-static.exe [status 1] FAIL
> > src/regression/malloc-brk-fail.exe [timed out]
> 
> This test does not seem to work on modern kernels much less qemu-user.
> 
> > src/regression/pthread-robust-detach.c:33:
> pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==0) got 38
> "Function not implemented" want 0 "No error information"
> > src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx,
> &ts) failed: (pshared==0) got 110 "Operation timed out" want 130 "Previous
> owner died"
> > src/regression/pthread-robust-detach.c:33:
> pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==1) got 38
> "Function not implemented" want 0 "No error information"
> > src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx,
> &ts) failed: (pshared==1) got 110 "Operation timed out" want 130 "Previous
> owner died"
> > FAIL src/regression/pthread-robust-detach-static.exe [status 1]
> > src/regression/pthread-robust-detach.c:33:
> pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==0) got 38
> "Function not implemented" want 0 "No error information"
> > src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx,
> &ts) failed: (pshared==0) got 110 "Operation timed out" want 130 "Previous
> owner died"
> > src/regression/pthread-robust-detach.c:33:
> pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==1) got 38
> "Function not implemented" want 0 "No error information"
> > src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx,
> &ts) failed: (pshared==1) got 110 "Operation timed out" want 130 "Previous
> owner died"
> > FAIL src/regression/pthread-robust-detach.exe [status 1]
> 
> Expected on qemu-user.
> 
> > src/regression/pthread_cond-smasher.c:140: main thread in phase 0 (0
> > threads inside), finished waiting: Operation timed out FAIL
> > src/regression/pthread_cond-smasher-static.exe [status 1]
> > src/regression/pthread_cond-smasher.c:104: thread 5 in phase 0 (0)
> > finished waiting: Operation timed out FAIL
> > src/regression/pthread_cond-smasher.exe [status 1]
> 
> These could be atomic bugs or just emulation being slow.

I bumped the timeout to 240 seconds it might have fixed these.

> 
> > src/regression/pthread_cond_wait-cancel_ignored.c:52:
> > pthread_cond_wait did not act on cancellation FAIL
> > src/regression/pthread_cond_wait-cancel_ignored-static.exe [status 1]
> > src/regression/pthread_once-deadlock.c:41: sem_timedwait(s,&ts)
> > failed: Operation timed out
> > src/regression/pthread_once-deadlock.c:44: pthread_once deadlocked
> > FAIL src/regression/pthread_once-deadlock-static.exe [status 1]
> 
> These are definitely atomic bugs (either in the arch bits or in qemu).

Also fixed, time64 change to QEMU was key to correcting a lot of these
issues.

> 
> Rich

Hi,

Updated libc-test REPORT and musl patch are attached.  I had to update QEMU,
pulling in 64bit time changes and routing the system calls to those
interfaces.  The routing of the syscalls to the 64bit interfaces is not
committed but the patch for it is here:
https://github.com/qemu/qemu/commit/b792b073e1042ca2668adb57142efba838620329

The Hexagon branch of musl is here:
https://github.com/quic/musl/tree/hexagon

The sqrt routine I added is from compiler-rt.builtins and it is more
involved than other target's versions.  I can see how sqrt might be excluded
from the c-library to keep the target specific complexity to a minimum.

Thanks,

[-- Attachment #2: winmail.dat --]
[-- Type: application/ms-tnef, Size: 277840 bytes --]

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-04-30 22:44             ` sidneym
@ 2020-04-30 23:51               ` Rich Felker
  2020-05-05 23:37                 ` sidneym
  0 siblings, 1 reply; 42+ messages in thread
From: Rich Felker @ 2020-04-30 23:51 UTC (permalink / raw)
  To: sidneym; +Cc: musl

On Thu, Apr 30, 2020 at 05:44:07PM -0500, sidneym@codeaurora.org wrote:
> > -----Original Message-----
> > From: 'Rich Felker' <dalias@libc.org>
> > Sent: Wednesday, April 15, 2020 2:30 PM
> > To: sidneym@codeaurora.org
> > Cc: musl@lists.openwall.com
> > Subject: Re: [musl] Hexagon DSP support
> > 
> > On Wed, Apr 15, 2020 at 02:12:12PM -0500, sidneym@codeaurora.org wrote:
> > > src/api/ftw.c:44:1: error: switch condition has boolean value
> > > [-Werror,-Wswitch-bool]
> > 
> > Compiling libc-test with -Werror is invalid. It necessarily must produce
> some
> > warnings, and needs to be able to distinguish actual errors from them.
> > 
> > > 8 errors generated.
> > > src/functional/dlopen.c:39: dlsym main failed: Symbol not found: main
> > > FAIL src/functional/dlopen.exe [status 1]
> > > clang-11: warning: argument unused during compilation: '-rdynamic'
> > > [-Wunused-command-line-argument]
> > 
> > This is a clang deficiency that's preventing the test from working.
> > 
> > > src/functional/ipc_msg.c:62: qid_ds.msg_lspid == 0 failed: got 100,
> > > want 0
> > > src/functional/ipc_msg.c:64: (long long)qid_ds.msg_stime == 0 failed:
> > > got 6815993655711498240, want 0
> > > src/functional/ipc_msg.c:67: qid_ds.msg_ctime >= t failed: got
> > > 70368744177664, want >= 154502684032321054
> > > src/functional/ipc_msg.c:71: qid_ds.msg_qbytes > 0 failed: got 0, want
> > > > 0
> > > src/functional/ipc_msg.c:76: qid_ds.msg_qnum == 1 failed: got 0, want
> > > 1
> > > src/functional/ipc_msg.c:77: qid_ds.msg_lspid == getpid() failed: got
> > > 100, want 185819
> > > src/functional/ipc_msg.c:81: msg_stime is 6815993655711498240 want <=
> > > 154502684032321059
> > > src/functional/ipc_msg.c:128: child exit status: 256 FAIL
> > > src/functional/ipc_msg-static.exe [status 1]
> > 
> > This is the sysvipc bits headers issue I mentioned. Same with the sem/shm
> > ones.
> 
> Passing with updated headers and qemu.

Looking at https://github.com/quic/musl/commit/b710ae08dfa8c0841abed44d55eee5e042321bd6
there are new problems:

- Member mode in struct ipc_perm has wrong type. It must be mode_t.
  This can be fixed just by removing the padding. But is there a
  reason you're not using the generic arch-agnostic definition on both
  the kernel and libc side?

- The definitions in bits/msg.h, bits/sem.h, and bits/shm.h are not
  time64-compatible. In fact bits/sem.h is a regression; you had it
  right before and broke it.

- The definition in bits/stat.h is using the wrong types (you need to
  use libc type names for all the members; this is a policy
  requirement to ensure that none inadvertently mismatch). Note that
  there's not even really a need to use an arch-specific header here
  anymore; the kernel definition comes from arch/hexagon/kstat.h and
  the bits/stat.h can just be copied from aarch64 or something else
  with a clean layout.

Also math asm like sqrt.S is not acceptable for upstream.
Arch-specific math files should only be for use of fpu instructions
that perform the operation without the need for any high level flow
control.

> > > src/functional/pthread_mutex.c:145: PTHREAD_MUTEX_ERRORCHECK relock
> > > did not return EDEADLK, got deadlock
> > > src/functional/pthread_mutex.c:148: PTHREAD_MUTEX_RECURSIVE relock
> > did
> > > not succed, got deadlock FAIL src/functional/pthread_mutex-static.exe
> > > [status 1]
> > > src/functional/pthread_mutex.c:145: PTHREAD_MUTEX_ERRORCHECK relock
> > > did not return EDEADLK, got
> > > src/functional/pthread_mutex.c:148: PTHREAD_MUTEX_RECURSIVE relock
> > did
> > > not succed, got deadlock FAIL src/functional/pthread_mutex.exe [status
> > > 1]
> > 
> > This suggests broken atomics. It doesn't look like anything qemu-user
> could
> > cause (unless it's just failing to emulate the atomics at all).
> > 
> Updated QEMU to include time64 changes.  Passing now.

It should not be necessary to update qemu for time64 in order for this
to work. Any change you made to qemu to make this work is almost
certainly wrong. According to my reading of the upstream kernel, there
is an existing stable user-kernel syscall ABI for hexagon, so you
can't change any of the existing types or behavior of any of the
existing syscalls.

Looking at your port, I think I've found the real core problem. In:

https://github.com/quic/musl/blob/b710ae08dfa8c0841abed44d55eee5e042321bd6/arch/hexagon/bits/syscall.h.in

I don't see any of the time64 syscalls. Having them defined is
absolutely mandatory for an arch where the unadorned syscalls do not
use 64-bit time_t. If you add them and revert all the incorrect
changes, I think everything will work.

> > Looks like something is wrong here, possibly wrong struct kstat, or it
> could be a
> > qemu bug.
> 
> It seems like QEMU's TARGET_NR_utimensat needs to changes similar to those
> done for clock_get/settime to account for 64bit time_t.   I made some
> changes but the last 2 checks at 65 and 66 still fail.

No. It does not need any change, and any change to it is wrong. It is
implementing an existing ABI that's immutable and that's fine. What
needs to change is that your syscall.h.in needs to define the values
for the time64 syscalls. This will inform musl that the "plain"
syscalls use 32-bit time_t and get you a correct build. Right now you
just have a badly broken build where you've balanced brokenness in one
place with corresponding brokenness in other places until the right
thing comes out.

> > > src/math/ucb/sqrt.h:47: bad fp exception: RN
> > > sqrt(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT got
> > > 0 [...]
> > > src/math/special/sqrt.h:74: bad fp exception: RN
> > > sqrtl(0x1.9b294f88p-1015)=0x1.cad197e28e85bp-508, want INEXACT got 0
> > > FAIL src/math/sqrtl.exe [status 1]
> > 
> > These are likely all general (not arch-specific) clang floating point
> bugs. We
> > should see if they also happen compiling other archs without asm versions
> of
> > sqrt.
> 
> Assembly version of sqrt does pass.

Yes but writing a large complex function in asm is not reviewable or
maintainable.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-04-30 23:51               ` Rich Felker
@ 2020-05-05 23:37                 ` sidneym
  2020-05-06  0:59                   ` Rich Felker
  0 siblings, 1 reply; 42+ messages in thread
From: sidneym @ 2020-05-05 23:37 UTC (permalink / raw)
  To: Rich Felker; +Cc: musl

[-- Attachment #1: Type: text/plain, Size: 6952 bytes --]

On 2020-04-30 18:51, Rich Felker wrote:
> On Thu, Apr 30, 2020 at 05:44:07PM -0500, sidneym@codeaurora.org wrote:
>> > -----Original Message-----
>> > From: 'Rich Felker' <dalias@libc.org>
>> > Sent: Wednesday, April 15, 2020 2:30 PM
>> > To: sidneym@codeaurora.org
>> > Cc: musl@lists.openwall.com
>> > Subject: Re: [musl] Hexagon DSP support
>> >
>> > On Wed, Apr 15, 2020 at 02:12:12PM -0500, sidneym@codeaurora.org
> wrote:
>> > > src/api/ftw.c:44:1: error: switch condition has boolean value
>> > > [-Werror,-Wswitch-bool]
>> >
>> > Compiling libc-test with -Werror is invalid. It necessarily must
> produce
>> some
>> > warnings, and needs to be able to distinguish actual errors from them.
>> >
>> > > 8 errors generated.
>> > > src/functional/dlopen.c:39: dlsym main failed: Symbol not found:
> main
>> > > FAIL src/functional/dlopen.exe [status 1]
>> > > clang-11: warning: argument unused during compilation: '-rdynamic'
>> > > [-Wunused-command-line-argument]
>> >
>> > This is a clang deficiency that's preventing the test from working.
>> >
>> > > src/functional/ipc_msg.c:62: qid_ds.msg_lspid == 0 failed: got 100,
>> > > want 0
>> > > src/functional/ipc_msg.c:64: (long long)qid_ds.msg_stime == 0
> failed:
>> > > got 6815993655711498240, want 0
>> > > src/functional/ipc_msg.c:67: qid_ds.msg_ctime >= t failed: got
>> > > 70368744177664, want >= 154502684032321054
>> > > src/functional/ipc_msg.c:71: qid_ds.msg_qbytes > 0 failed: got 0,
> want
>> > > > 0
>> > > src/functional/ipc_msg.c:76: qid_ds.msg_qnum == 1 failed: got 0,
> want
>> > > 1
>> > > src/functional/ipc_msg.c:77: qid_ds.msg_lspid == getpid() failed:
> got
>> > > 100, want 185819
>> > > src/functional/ipc_msg.c:81: msg_stime is 6815993655711498240 want
> <=
>> > > 154502684032321059
>> > > src/functional/ipc_msg.c:128: child exit status: 256 FAIL
>> > > src/functional/ipc_msg-static.exe [status 1]
>> >
>> > This is the sysvipc bits headers issue I mentioned. Same with the
> sem/shm
>> > ones.
>> 
>> Passing with updated headers and qemu.
> 
> Looking at
> https://github.com/quic/musl/commit/b710ae08dfa8c0841abed44d55eee5e042321b
> d6
> there are new problems:
> 
> - Member mode in struct ipc_perm has wrong type. It must be mode_t.
>   This can be fixed just by removing the padding. But is there a
>   reason you're not using the generic arch-agnostic definition on both
>   the kernel and libc side?

Updated that type

> 
> - The definitions in bits/msg.h, bits/sem.h, and bits/shm.h are not
>   time64-compatible. In fact bits/sem.h is a regression; you had it
>   right before and broke it.
As you point out below the core of the problem was the missing time64
calls.  I've updated the structures to use what I hope or the correct 
types.

> 
> - The definition in bits/stat.h is using the wrong types (you need to
>   use libc type names for all the members; this is a policy
>   requirement to ensure that none inadvertently mismatch). Note that
>   there's not even really a need to use an arch-specific header here
>   anymore; the kernel definition comes from arch/hexagon/kstat.h and
>   the bits/stat.h can just be copied from aarch64 or something else
>   with a clean layout.

I used OpenRISC's stat.h.

> 
> Also math asm like sqrt.S is not acceptable for upstream.
> Arch-specific math files should only be for use of fpu instructions
> that perform the operation without the need for any high level flow
> control.
This is what I expected and I removed the file.

> 
>> > > src/functional/pthread_mutex.c:145: PTHREAD_MUTEX_ERRORCHECK relock
>> > > did not return EDEADLK, got deadlock
>> > > src/functional/pthread_mutex.c:148: PTHREAD_MUTEX_RECURSIVE relock
>> > did
>> > > not succed, got deadlock FAIL
> src/functional/pthread_mutex-static.exe
>> > > [status 1]
>> > > src/functional/pthread_mutex.c:145: PTHREAD_MUTEX_ERRORCHECK relock
>> > > did not return EDEADLK, got
>> > > src/functional/pthread_mutex.c:148: PTHREAD_MUTEX_RECURSIVE relock
>> > did
>> > > not succed, got deadlock FAIL src/functional/pthread_mutex.exe
> [status
>> > > 1]
>> >
>> > This suggests broken atomics. It doesn't look like anything qemu-user
>> could
>> > cause (unless it's just failing to emulate the atomics at all).
>> >
>> Updated QEMU to include time64 changes.  Passing now.
> 
> It should not be necessary to update qemu for time64 in order for this
> to work. Any change you made to qemu to make this work is almost
> certainly wrong. According to my reading of the upstream kernel, there
> is an existing stable user-kernel syscall ABI for hexagon, so you
> can't change any of the existing types or behavior of any of the
> existing syscalls.
> 
> Looking at your port, I think I've found the real core problem. In:
> 
> https://github.com/quic/musl/blob/b710ae08dfa8c0841abed44d55eee5e042321bd6
> /arch/hexagon/bits/syscall.h.in
> 
> I don't see any of the time64 syscalls. Having them defined is
> absolutely mandatory for an arch where the unadorned syscalls do not
> use 64-bit time_t. If you add them and revert all the incorrect
> changes, I think everything will work.

Adding those calls helped and cleared up a lot of confusion on my part.


> 
>> > Looks like something is wrong here, possibly wrong struct kstat, or it
>> could be a
>> > qemu bug.
>> 
>> It seems like QEMU's TARGET_NR_utimensat needs to changes similar to
> those
>> done for clock_get/settime to account for 64bit time_t.   I made some
>> changes but the last 2 checks at 65 and 66 still fail.
> 
> No. It does not need any change, and any change to it is wrong. It is
> implementing an existing ABI that's immutable and that's fine. What
> needs to change is that your syscall.h.in needs to define the values
> for the time64 syscalls. This will inform musl that the "plain"
> syscalls use 32-bit time_t and get you a correct build. Right now you
> just have a badly broken build where you've balanced brokenness in one
> place with corresponding brokenness in other places until the right
> thing comes out.

In QEMU I have had to update hexagon/target_structs.h (target_shmid_ds 
and target_semid64_ds) to reflect the size of time_t from abi_ulong 
types to abi_ullong types.

I've attached a new REPORT and the code changes are here:
https://github.com/quic/musl/compare/hexagon

Thanks for your help.

> 
>> > > src/math/ucb/sqrt.h:47: bad fp exception: RN
>> > > sqrt(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT
> got
>> > > 0 [...]
>> > > src/math/special/sqrt.h:74: bad fp exception: RN
>> > > sqrtl(0x1.9b294f88p-1015)=0x1.cad197e28e85bp-508, want INEXACT got 0
>> > > FAIL src/math/sqrtl.exe [status 1]
>> >
>> > These are likely all general (not arch-specific) clang floating point
>> bugs. We
>> > should see if they also happen compiling other archs without asm
> versions
>> of
>> > sqrt.
>> 
>> Assembly version of sqrt does pass.
> 
> Yes but writing a large complex function in asm is not reviewable or
> maintainable.
> 
> Rich

[-- Attachment #2: REPORT --]
[-- Type: text/plain, Size: 253799 bytes --]

src/api/ftw.c:44:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISBLK(0))
^~~~~~~~~~~~~
src/api/ftw.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/ftw.c:45:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISCHR(0))
^~~~~~~~~~~~~
src/api/ftw.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/ftw.c:46:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISDIR(0))
^~~~~~~~~~~~~
src/api/ftw.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/ftw.c:47:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISFIFO(0))
^~~~~~~~~~~~~~
src/api/ftw.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/ftw.c:48:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISREG(0))
^~~~~~~~~~~~~
src/api/ftw.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/ftw.c:49:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISLNK(0))
^~~~~~~~~~~~~
src/api/ftw.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/ftw.c:50:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISSOCK(0))
^~~~~~~~~~~~~~
src/api/ftw.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
7 errors generated.
src/api/iso646.c:8:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(0 not_eq 1)
^~~~~~~~~~~~~
src/api/iso646.c:2:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/iso646.c:9:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(0 and 1)
^~~~~~~~~~
src/api/iso646.c:2:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/iso646.c:10:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(0 or 1)
^~~~~~~~~
src/api/iso646.c:2:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/iso646.c:14:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(not 0)
^~~~~~~~
src/api/iso646.c:2:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
4 errors generated.
FAIL src/api/main.exe [status 1]
clang-11: error: no such file or directory: 'src/api/ftw.o'
clang-11: error: no such file or directory: 'src/api/iso646.o'
clang-11: error: no such file or directory: 'src/api/stdlib.o'
clang-11: error: no such file or directory: 'src/api/sys_ipc.o'
clang-11: error: no such file or directory: 'src/api/sys_sem.o'
clang-11: error: no such file or directory: 'src/api/sys_shm.o'
clang-11: error: no such file or directory: 'src/api/sys_stat.o'
clang-11: error: no such file or directory: 'src/api/sys_wait.o'
clang-11: error: no such file or directory: 'src/api/unistd.o'
src/api/stdlib.c:20:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(WIFEXITED(0))
^~~~~~~~~~~~~~~
src/api/stdlib.c:4:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/stdlib.c:21:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(WIFSIGNALED(0))
^~~~~~~~~~~~~~~~~
src/api/stdlib.c:4:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/stdlib.c:22:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(WIFSTOPPED(0))
^~~~~~~~~~~~~~~~
src/api/stdlib.c:4:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
3 errors generated.
src/api/sys_ipc.c:13:1: error: initializing 'uid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(uid_t,uid)
^~~~~~~~~~~~
src/api/sys_ipc.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
src/api/sys_ipc.c:14:1: error: initializing 'gid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(gid_t,gid)
^~~~~~~~~~~~
src/api/sys_ipc.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
src/api/sys_ipc.c:15:1: error: initializing 'uid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(uid_t,cuid)
^~~~~~~~~~~~~
src/api/sys_ipc.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
src/api/sys_ipc.c:16:1: error: initializing 'gid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(gid_t,cgid)
^~~~~~~~~~~~~
src/api/sys_ipc.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
4 errors generated.
src/api/sys_sem.c:41:1: error: initializing 'uid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(uid_t,uid)
^~~~~~~~~~~~
src/api/sys_sem.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
src/api/sys_sem.c:42:1: error: initializing 'gid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(gid_t,gid)
^~~~~~~~~~~~
src/api/sys_sem.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
src/api/sys_sem.c:43:1: error: initializing 'uid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(uid_t,cuid)
^~~~~~~~~~~~~
src/api/sys_sem.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
src/api/sys_sem.c:44:1: error: initializing 'gid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(gid_t,cgid)
^~~~~~~~~~~~~
src/api/sys_sem.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
4 errors generated.
src/api/sys_shm.c:36:1: error: initializing 'uid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(uid_t,uid)
^~~~~~~~~~~~
src/api/sys_shm.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
src/api/sys_shm.c:37:1: error: initializing 'gid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(gid_t,gid)
^~~~~~~~~~~~
src/api/sys_shm.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
src/api/sys_shm.c:38:1: error: initializing 'uid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(uid_t,cuid)
^~~~~~~~~~~~~
src/api/sys_shm.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
src/api/sys_shm.c:39:1: error: initializing 'gid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
F(gid_t,cgid)
^~~~~~~~~~~~~
src/api/sys_shm.c:3:20: note: expanded from macro 'F'
#define F(t,n) {t *y = &x.n;}
                   ^   ~~~~
4 errors generated.
src/api/sys_stat.c:68:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISBLK(0))
^~~~~~~~~~~~~
src/api/sys_stat.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/sys_stat.c:69:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISCHR(0))
^~~~~~~~~~~~~
src/api/sys_stat.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/sys_stat.c:70:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISDIR(0))
^~~~~~~~~~~~~
src/api/sys_stat.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/sys_stat.c:71:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISFIFO(0))
^~~~~~~~~~~~~~
src/api/sys_stat.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/sys_stat.c:72:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISREG(0))
^~~~~~~~~~~~~
src/api/sys_stat.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/sys_stat.c:73:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISLNK(0))
^~~~~~~~~~~~~
src/api/sys_stat.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/sys_stat.c:74:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(S_ISSOCK(0))
^~~~~~~~~~~~~~
src/api/sys_stat.c:5:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
7 errors generated.
src/api/sys_wait.c:11:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(WIFEXITED(0))
^~~~~~~~~~~~~~~
src/api/sys_wait.c:4:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/sys_wait.c:12:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(WIFSIGNALED(0))
^~~~~~~~~~~~~~~~~
src/api/sys_wait.c:4:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/sys_wait.c:13:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(WIFSTOPPED(0))
^~~~~~~~~~~~~~~~
src/api/sys_wait.c:4:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
src/api/sys_wait.c:20:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
C(WIFCONTINUED(0))
^~~~~~~~~~~~~~~~~~
src/api/sys_wait.c:4:14: note: expanded from macro 'C'
#define C(n) switch(n){case n:;}
             ^      ~
4 errors generated.
src/api/unistd.c:87:3: error: use of undeclared identifier '_CS_POSIX_V7_THREADS_CFLAGS'
C(_CS_POSIX_V7_THREADS_CFLAGS)
  ^
src/api/unistd.c:88:3: error: use of undeclared identifier '_CS_POSIX_V7_THREADS_LDFLAGS'
C(_CS_POSIX_V7_THREADS_LDFLAGS)
  ^
src/api/unistd.c:117:3: error: use of undeclared identifier '_PC_TIMESTAMP_RESOLUTION'
C(_PC_TIMESTAMP_RESOLUTION)
  ^
src/api/unistd.c:238:3: error: use of undeclared identifier '_SC_XOPEN_UUCP'
C(_SC_XOPEN_UUCP)
  ^
src/api/unistd.c:87:3: error: use of undeclared identifier '_CS_POSIX_V7_THREADS_CFLAGS'
C(_CS_POSIX_V7_THREADS_CFLAGS)
  ^
src/api/unistd.c:88:3: error: use of undeclared identifier '_CS_POSIX_V7_THREADS_LDFLAGS'
C(_CS_POSIX_V7_THREADS_LDFLAGS)
  ^
src/api/unistd.c:117:3: error: use of undeclared identifier '_PC_TIMESTAMP_RESOLUTION'
C(_PC_TIMESTAMP_RESOLUTION)
  ^
src/api/unistd.c:238:3: error: use of undeclared identifier '_SC_XOPEN_UUCP'
C(_SC_XOPEN_UUCP)
  ^
8 errors generated.
src/functional/dlopen.c:39: dlsym main failed: Symbol not found: main
FAIL src/functional/dlopen.exe [status 1]
clang-11: warning: argument unused during compilation: '-rdynamic' [-Wunused-command-line-argument]
src/functional/ipc_msg.c:63: qid_ds.msg_qnum == 0 failed: got 16384, want 0
src/functional/ipc_msg.c:67: (long long)qid_ds.msg_rtime == 0 failed: got 6823500725968961536, want 0
src/functional/ipc_msg.c:69: qid_ds.msg_ctime >= t failed: got 69713, want >= 1588720066
src/functional/ipc_msg.c:73: qid_ds.msg_qbytes > 0 failed: got 0, want > 0
src/functional/ipc_msg.c:78: qid_ds.msg_qnum == 1 failed: got 16384, want 1
src/functional/ipc_msg.c:79: qid_ds.msg_lspid == getpid() failed: got 0, want 240818
src/functional/ipc_msg.c:81: msg_stime is 0 want >= 1588720066
src/functional/ipc_msg.c:130: child exit status: 256
FAIL src/functional/ipc_msg-static.exe [status 1]
src/functional/ipc_msg.c:63: qid_ds.msg_qnum == 0 failed: got 16384, want 0
src/functional/ipc_msg.c:67: (long long)qid_ds.msg_rtime == 0 failed: got 6823500725968961536, want 0
src/functional/ipc_msg.c:69: qid_ds.msg_ctime >= t failed: got 0, want >= 1588720066
src/functional/ipc_msg.c:73: qid_ds.msg_qbytes > 0 failed: got 0, want > 0
src/functional/ipc_msg.c:78: qid_ds.msg_qnum == 1 failed: got 16384, want 1
src/functional/ipc_msg.c:79: qid_ds.msg_lspid == getpid() failed: got 0, want 240786
src/functional/ipc_msg.c:81: msg_stime is 0 want >= 1588720066
src/functional/ipc_msg.c:130: child exit status: 256
FAIL src/functional/ipc_msg.exe [status 1]
src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:87: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:87: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:108: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:108: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
FAIL src/functional/pthread_mutex_pi-static.exe [status 1]
src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:42: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:87: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:87: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:108: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
src/functional/pthread_mutex_pi.c:108: pthread_mutexattr_setprotocol(&ma, PTHREAD_PRIO_INHERIT) failed: Function not implemented
FAIL src/functional/pthread_mutex_pi.exe [status 1]
src/functional/pthread_robust.c:39: pthread_mutexattr_setrobust(&mtx_a, PTHREAD_MUTEX_ROBUST) failed: (pshared==0, pi==0) Function not implemented (setting robust attribute)
FAIL src/functional/pthread_robust-static.exe [timed out]
src/functional/pthread_robust.c:39: pthread_mutexattr_setrobust(&mtx_a, PTHREAD_MUTEX_ROBUST) failed: (pshared==0, pi==0) Function not implemented (setting robust attribute)
FAIL src/functional/pthread_robust.exe [timed out]
src/functional/sscanf.c:73:9: warning: magnitude of floating-point constant too large for type 'double'; maximum is 1.7976931348623157E+308 [-Wliteral-range]
        TEST_F(1.234e1234);
               ^
src/functional/sscanf.c:73:9: warning: magnitude of floating-point constant too large for type 'double'; maximum is 1.7976931348623157E+308 [-Wliteral-range]
src/functional/sscanf.c:74:9: warning: magnitude of floating-point constant too small for type 'double'; minimum is 4.9406564584124654E-324 [-Wliteral-range]
        TEST_F(1.234e-1234);
               ^
src/functional/sscanf.c:74:9: warning: magnitude of floating-point constant too small for type 'double'; minimum is 4.9406564584124654E-324 [-Wliteral-range]
src/functional/sscanf.c:75:9: warning: magnitude of floating-point constant too large for type 'double'; maximum is 1.7976931348623157E+308 [-Wliteral-range]
        TEST_F(1.234e56789);
               ^
src/functional/sscanf.c:75:9: warning: magnitude of floating-point constant too large for type 'double'; maximum is 1.7976931348623157E+308 [-Wliteral-range]
src/functional/sscanf.c:76:9: warning: magnitude of floating-point constant too small for type 'double'; minimum is 4.9406564584124654E-324 [-Wliteral-range]
        TEST_F(1.234e-56789);
               ^
src/functional/sscanf.c:76:9: warning: magnitude of floating-point constant too small for type 'double'; minimum is 4.9406564584124654E-324 [-Wliteral-range]
8 warnings generated.
src/functional/strptime.c:23: "%F": failed to parse "1856-07-10"
src/functional/strptime.c:23: "%s": failed to parse "683078400"
src/functional/strptime.c:47: "%z": failed to parse "+0200"
src/functional/strptime.c:47: "%z": failed to parse "-0530"
src/functional/strptime.c:47: "%z": failed to parse "-06"
FAIL src/functional/strptime-static.exe [status 1]
src/functional/strptime.c:23: "%F": failed to parse "1856-07-10"
src/functional/strptime.c:23: "%s": failed to parse "683078400"
src/functional/strptime.c:47: "%z": failed to parse "+0200"
src/functional/strptime.c:47: "%z": failed to parse "-0530"
src/functional/strptime.c:47: "%z": failed to parse "-06"
FAIL src/functional/strptime.exe [status 1]
src/functional/utime.c:63: futimens(fd, ((struct timespec[2]){{.tv_sec=1LL<<32},{.tv_sec=1LL<<32}})) == 0 failed: Not supported
FAIL src/functional/utime-static.exe [status 1]
src/functional/utime.c:63: futimens(fd, ((struct timespec[2]){{.tv_sec=1LL<<32},{.tv_sec=1LL<<32}})) == 0 failed: Not supported
FAIL src/functional/utime.exe [status 1]
X src/math/special/acosh.h:9: RN acosh(0x1.001f1c62cf304p+0) want 0x1.f8d125ff71ccp-6 got 0x1.f8d125ff71cc2p-6 ulperr 1.853 = 0x1p+1 + -0x1.2d785ap-3
X src/math/special/acosh.h:10: RN acosh(0x1.00788c223616fp+0) want 0x1.f0cb8ee812621p-5 got 0x1.f0cb8ee812623p-5 ulperr 1.724 = 0x1p+1 + -0x1.1b0c1ap-2
X src/math/special/acosh.h:11: RN acosh(0x1.007b7a37c7606p+0) want 0x1.f6cb68859ae3p-5 got 0x1.f6cb68859ae2ep-5 ulperr -1.855 = -0x1p+1 + 0x1.280488p-3
X src/math/special/acosh.h:12: RN acosh(0x1.01d173033243cp+0) want 0x1.e7e1b18d99376p-4 got 0x1.e7e1b18d99378p-4 ulperr 1.930 = 0x1p+1 + -0x1.1f3d3ep-4
X src/math/special/acosh.h:13: RN acosh(0x1.01d8f20e90409p+0) want 0x1.ebca3eea5cda5p-4 got 0x1.ebca3eea5cda3p-4 ulperr -1.652 = -0x1p+1 + 0x1.648602p-2
X src/math/special/acosh.h:14: RN acosh(0x1.01ef6122e68bep+0) want 0x1.f74df150afc94p-4 got 0x1.f74df150afc92p-4 ulperr -1.762 = -0x1p+1 + 0x1.e79556p-3
X src/math/special/acosh.h:15: RN acosh(0x1.06822faf07879p+0) want 0x1.ccd73cbc4af78p-3 got 0x1.ccd73cbc4af7ap-3 ulperr 1.674 = 0x1p+1 + -0x1.4df79ep-2
X src/math/special/acosh.h:17: RN acosh(0x1.069d65411ec51p+0) want 0x1.d0928b08facbap-3 got 0x1.d0928b08facbcp-3 ulperr 1.785 = 0x1p+1 + -0x1.b83338p-3
X src/math/special/acosh.h:18: RN acosh(0x1.071d6b2713d08p+0) want 0x1.e1bc6a6c345fdp-3 got 0x1.e1bc6a6c345ffp-3 ulperr 1.818 = 0x1p+1 + -0x1.74a04ep-3
X src/math/special/acosh.h:19: RN acosh(0x1.0728405f5140cp+0) want 0x1.e328ebe92b32cp-3 got 0x1.e328ebe92b32ep-3 ulperr 1.790 = 0x1p+1 + -0x1.ae89ap-3
X src/math/special/acosh.h:20: RN acosh(0x1.07bd2c5c01bcbp+0) want 0x1.f6513c44c131p-3 got 0x1.f6513c44c1312p-3 ulperr 1.719 = 0x1p+1 + -0x1.203932p-2
X src/math/special/acosh.h:21: RN acosh(0x1.1aae7c452c859p+0) want 0x1.cf8d69288e386p-2 got 0x1.cf8d69288e384p-2 ulperr -1.723 = -0x1p+1 + 0x1.1b325ap-2
X src/math/special/acosh.h:23: RN acosh(0x1.1b50764626f1ep+0) want 0x1.d4ec67c71794p-2 got 0x1.d4ec67c717942p-2 ulperr 1.738 = 0x1p+1 + -0x1.0c09dap-2
src/math/special/acosh.h:9: RN acoshl(0x1.001f1c62cf304p+0) want 0x1.f8d125ff71ccp-6 got 0x1.f8d125ff71cc2p-6 ulperr 1.853 = 0x1p+1 + -0x1.2d785ap-3
src/math/special/acosh.h:10: RN acoshl(0x1.00788c223616fp+0) want 0x1.f0cb8ee812621p-5 got 0x1.f0cb8ee812623p-5 ulperr 1.724 = 0x1p+1 + -0x1.1b0c1ap-2
src/math/special/acosh.h:11: RN acoshl(0x1.007b7a37c7606p+0) want 0x1.f6cb68859ae3p-5 got 0x1.f6cb68859ae2ep-5 ulperr -1.855 = -0x1p+1 + 0x1.280488p-3
src/math/special/acosh.h:12: RN acoshl(0x1.01d173033243cp+0) want 0x1.e7e1b18d99376p-4 got 0x1.e7e1b18d99378p-4 ulperr 1.930 = 0x1p+1 + -0x1.1f3d3ep-4
src/math/special/acosh.h:13: RN acoshl(0x1.01d8f20e90409p+0) want 0x1.ebca3eea5cda5p-4 got 0x1.ebca3eea5cda3p-4 ulperr -1.652 = -0x1p+1 + 0x1.648602p-2
src/math/special/acosh.h:14: RN acoshl(0x1.01ef6122e68bep+0) want 0x1.f74df150afc94p-4 got 0x1.f74df150afc92p-4 ulperr -1.762 = -0x1p+1 + 0x1.e79556p-3
src/math/special/acosh.h:15: RN acoshl(0x1.06822faf07879p+0) want 0x1.ccd73cbc4af78p-3 got 0x1.ccd73cbc4af7ap-3 ulperr 1.674 = 0x1p+1 + -0x1.4df79ep-2
src/math/special/acosh.h:17: RN acoshl(0x1.069d65411ec51p+0) want 0x1.d0928b08facbap-3 got 0x1.d0928b08facbcp-3 ulperr 1.785 = 0x1p+1 + -0x1.b83338p-3
src/math/special/acosh.h:18: RN acoshl(0x1.071d6b2713d08p+0) want 0x1.e1bc6a6c345fdp-3 got 0x1.e1bc6a6c345ffp-3 ulperr 1.818 = 0x1p+1 + -0x1.74a04ep-3
src/math/special/acosh.h:19: RN acoshl(0x1.0728405f5140cp+0) want 0x1.e328ebe92b32cp-3 got 0x1.e328ebe92b32ep-3 ulperr 1.790 = 0x1p+1 + -0x1.ae89ap-3
src/math/special/acosh.h:20: RN acoshl(0x1.07bd2c5c01bcbp+0) want 0x1.f6513c44c131p-3 got 0x1.f6513c44c1312p-3 ulperr 1.719 = 0x1p+1 + -0x1.203932p-2
src/math/special/acosh.h:21: RN acoshl(0x1.1aae7c452c859p+0) want 0x1.cf8d69288e386p-2 got 0x1.cf8d69288e384p-2 ulperr -1.723 = -0x1p+1 + 0x1.1b325ap-2
src/math/special/acosh.h:23: RN acoshl(0x1.1b50764626f1ep+0) want 0x1.d4ec67c71794p-2 got 0x1.d4ec67c717942p-2 ulperr 1.738 = 0x1p+1 + -0x1.0c09dap-2
FAIL src/math/acoshl.exe [status 1]
X src/math/special/asinh.h:7: RN asinh(0x1.fbdd0eedf8143p-3) want 0x1.f6cc20d7a594ap-3 got 0x1.f6cc20d7a594cp-3 ulperr 1.513 = 0x1p+1 + -0x1.f327a8p-2
X src/math/special/asinh.h:8: RN asinh(0x1.df2723491f88fp-3) want 0x1.dae2c8444900cp-3 got 0x1.dae2c8444900ap-3 ulperr -1.551 = -0x1p+1 + 0x1.cb8b86p-2
X src/math/special/asinh.h:9: RN asinh(0x1.ef675c6541305p-3) want 0x1.eab20432c9598p-3 got 0x1.eab20432c959ap-3 ulperr 1.568 = 0x1p+1 + -0x1.ba9e34p-2
X src/math/special/asinh.h:10: RN asinh(0x1.f19df3a1722a9p-3) want 0x1.ecd8a7f621554p-3 got 0x1.ecd8a7f621552p-3 ulperr -1.535 = -0x1p+1 + 0x1.dbc1a8p-2
X src/math/special/asinh.h:11: RN asinh(0x1.f1af09dcfa7d6p-3) want 0x1.ece942815ceccp-3 got 0x1.ece942815cecap-3 ulperr -1.526 = -0x1p+1 + 0x1.e5bb5p-2
X src/math/special/asinh.h:12: RN asinh(0x1.f339ebbeac5bap-3) want 0x1.ee68f10a49c42p-3 got 0x1.ee68f10a49c44p-3 ulperr 1.529 = 0x1p+1 + -0x1.e28cbp-2
X src/math/special/asinh.h:13: RN asinh(0x1.f424275dc8787p-3) want 0x1.ef4c7fcb51c56p-3 got 0x1.ef4c7fcb51c54p-3 ulperr -1.642 = -0x1p+1 + 0x1.6e4e9p-2
X src/math/special/asinh.h:14: RN asinh(0x1.f60d54a133665p-3) want 0x1.f127a8dec0c2p-3 got 0x1.f127a8dec0c1ep-3 ulperr -1.512 = -0x1p+1 + 0x1.f3c9eap-2
X src/math/special/asinh.h:15: RN asinh(0x1.fdccdaf285ffdp-3) want 0x1.f8ad4bed7af4cp-3 got 0x1.f8ad4bed7af4ap-3 ulperr -1.576 = -0x1p+1 + 0x1.b1f1f8p-2
X src/math/special/asinh.h:16: RN asinh(0x1.ff5bec94924c7p-3) want 0x1.fa30836c3949ap-3 got 0x1.fa30836c39498p-3 ulperr -1.533 = -0x1p+1 + 0x1.de989p-2
X src/math/special/asinh.h:17: RN asinh(0x1.028e8fd61c8a5p-2) want 0x1.ffc55bd02e9dep-3 got 0x1.ffc55bd02e9ep-3 ulperr 1.670 = 0x1p+1 + -0x1.523c08p-2
X src/math/special/asinh.h:18: RN asinh(0x1.dc71794e1f137p-2) want 0x1.ccbd41a7d058ap-2 got 0x1.ccbd41a7d0588p-2 ulperr -1.585 = -0x1p+1 + 0x1.a944b8p-2
X src/math/special/asinh.h:19: RN asinh(0x1.df308e177c3cbp-2) want 0x1.cf3a638145d7ap-2 got 0x1.cf3a638145d78p-2 ulperr -1.505 = -0x1p+1 + 0x1.fb3684p-2
X src/math/special/asinh.h:20: RN asinh(0x1.ea94e1e267746p-2) want 0x1.d9862533f65f6p-2 got 0x1.d9862533f65f4p-2 ulperr -1.579 = -0x1p+1 + 0x1.af51ecp-2
X src/math/special/asinh.h:21: RN asinh(0x1.ecd4f07608dc7p-2) want 0x1.db8d6fdcc6d74p-2 got 0x1.db8d6fdcc6d76p-2 ulperr 1.517 = 0x1p+1 + -0x1.eeb48p-2
X src/math/special/asinh.h:22: RN asinh(0x1.f30656c78ee7ep-2) want 0x1.e1204e364a186p-2 got 0x1.e1204e364a188p-2 ulperr 1.576 = 0x1p+1 + -0x1.b23ffp-2
X src/math/special/asinh.h:23: RN asinh(0x1.f5c0c6e41b969p-2) want 0x1.e393d3dc3b70ap-2 got 0x1.e393d3dc3b70cp-2 ulperr 1.562 = 0x1p+1 + -0x1.c06dbep-2
X src/math/special/asinh.h:24: RN asinh(0x1.09c58725300e7p-1) want 0x1.fe2c7f25fb172p-2 got 0x1.fe2c7f25fb174p-2 ulperr 1.579 = 0x1p+1 + -0x1.ae9df6p-2
src/math/special/asinh.h:7: RN asinhl(0x1.fbdd0eedf8143p-3) want 0x1.f6cc20d7a594ap-3 got 0x1.f6cc20d7a594cp-3 ulperr 1.513 = 0x1p+1 + -0x1.f327a8p-2
src/math/special/asinh.h:8: RN asinhl(0x1.df2723491f88fp-3) want 0x1.dae2c8444900cp-3 got 0x1.dae2c8444900ap-3 ulperr -1.551 = -0x1p+1 + 0x1.cb8b86p-2
src/math/special/asinh.h:9: RN asinhl(0x1.ef675c6541305p-3) want 0x1.eab20432c9598p-3 got 0x1.eab20432c959ap-3 ulperr 1.568 = 0x1p+1 + -0x1.ba9e34p-2
src/math/special/asinh.h:10: RN asinhl(0x1.f19df3a1722a9p-3) want 0x1.ecd8a7f621554p-3 got 0x1.ecd8a7f621552p-3 ulperr -1.535 = -0x1p+1 + 0x1.dbc1a8p-2
src/math/special/asinh.h:11: RN asinhl(0x1.f1af09dcfa7d6p-3) want 0x1.ece942815ceccp-3 got 0x1.ece942815cecap-3 ulperr -1.526 = -0x1p+1 + 0x1.e5bb5p-2
src/math/special/asinh.h:12: RN asinhl(0x1.f339ebbeac5bap-3) want 0x1.ee68f10a49c42p-3 got 0x1.ee68f10a49c44p-3 ulperr 1.529 = 0x1p+1 + -0x1.e28cbp-2
src/math/special/asinh.h:13: RN asinhl(0x1.f424275dc8787p-3) want 0x1.ef4c7fcb51c56p-3 got 0x1.ef4c7fcb51c54p-3 ulperr -1.642 = -0x1p+1 + 0x1.6e4e9p-2
src/math/special/asinh.h:14: RN asinhl(0x1.f60d54a133665p-3) want 0x1.f127a8dec0c2p-3 got 0x1.f127a8dec0c1ep-3 ulperr -1.512 = -0x1p+1 + 0x1.f3c9eap-2
src/math/special/asinh.h:15: RN asinhl(0x1.fdccdaf285ffdp-3) want 0x1.f8ad4bed7af4cp-3 got 0x1.f8ad4bed7af4ap-3 ulperr -1.576 = -0x1p+1 + 0x1.b1f1f8p-2
src/math/special/asinh.h:16: RN asinhl(0x1.ff5bec94924c7p-3) want 0x1.fa30836c3949ap-3 got 0x1.fa30836c39498p-3 ulperr -1.533 = -0x1p+1 + 0x1.de989p-2
src/math/special/asinh.h:17: RN asinhl(0x1.028e8fd61c8a5p-2) want 0x1.ffc55bd02e9dep-3 got 0x1.ffc55bd02e9ep-3 ulperr 1.670 = 0x1p+1 + -0x1.523c08p-2
src/math/special/asinh.h:18: RN asinhl(0x1.dc71794e1f137p-2) want 0x1.ccbd41a7d058ap-2 got 0x1.ccbd41a7d0588p-2 ulperr -1.585 = -0x1p+1 + 0x1.a944b8p-2
src/math/special/asinh.h:19: RN asinhl(0x1.df308e177c3cbp-2) want 0x1.cf3a638145d7ap-2 got 0x1.cf3a638145d78p-2 ulperr -1.505 = -0x1p+1 + 0x1.fb3684p-2
src/math/special/asinh.h:20: RN asinhl(0x1.ea94e1e267746p-2) want 0x1.d9862533f65f6p-2 got 0x1.d9862533f65f4p-2 ulperr -1.579 = -0x1p+1 + 0x1.af51ecp-2
src/math/special/asinh.h:21: RN asinhl(0x1.ecd4f07608dc7p-2) want 0x1.db8d6fdcc6d74p-2 got 0x1.db8d6fdcc6d76p-2 ulperr 1.517 = 0x1p+1 + -0x1.eeb48p-2
src/math/special/asinh.h:22: RN asinhl(0x1.f30656c78ee7ep-2) want 0x1.e1204e364a186p-2 got 0x1.e1204e364a188p-2 ulperr 1.576 = 0x1p+1 + -0x1.b23ffp-2
src/math/special/asinh.h:23: RN asinhl(0x1.f5c0c6e41b969p-2) want 0x1.e393d3dc3b70ap-2 got 0x1.e393d3dc3b70cp-2 ulperr 1.562 = 0x1p+1 + -0x1.c06dbep-2
src/math/special/asinh.h:24: RN asinhl(0x1.09c58725300e7p-1) want 0x1.fe2c7f25fb172p-2 got 0x1.fe2c7f25fb174p-2 ulperr 1.579 = 0x1p+1 + -0x1.ae9df6p-2
FAIL src/math/asinhl.exe [status 1]
X src/math/special/erfc.h:6: RN erfc(0x1.5db559fe5c0bap+0) want 0x1.b53cf571d328fp-5 got 0x1.b53cf571d328cp-5 ulperr -2.609 = -0x1.8p+1 + 0x1.900982p-2
src/math/special/erfc.h:6: RN erfcl(0x1.5db559fe5c0bap+0) want 0x1.b53cf571d328fp-5 got 0x1.b53cf571d328cp-5 ulperr -2.609 = -0x1.8p+1 + 0x1.900982p-2
FAIL src/math/erfcl.exe [status 1]
X src/math/special/exp2.h:12: bad fp exception: RN exp2(-0x1.ff8p+9)=0x1p-1023, want 0 got INEXACT|UNDERFLOW
X src/math/special/exp2.h:18: bad fp exception: RN exp2(-0x1.ff8p+9)=0x1p-1023, want 0 got INEXACT|UNDERFLOW
X src/math/special/exp2.h:20: bad fp exception: RN exp2(-0x1p+10)=0x1p-1024, want 0 got INEXACT|UNDERFLOW
X src/math/special/exp2.h:21: bad fp exception: RN exp2(-0x1.004p+10)=0x1p-1025, want 0 got INEXACT|UNDERFLOW
X src/math/special/exp2.h:22: bad fp exception: RN exp2(-0x1.0c8p+10)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
src/math/special/exp2.h:12: bad fp exception: RN exp2l(-0x1.ff8p+9)=0x1p-1023, want 0 got INEXACT|UNDERFLOW
src/math/special/exp2.h:18: bad fp exception: RN exp2l(-0x1.ff8p+9)=0x1p-1023, want 0 got INEXACT|UNDERFLOW
src/math/special/exp2.h:20: bad fp exception: RN exp2l(-0x1p+10)=0x1p-1024, want 0 got INEXACT|UNDERFLOW
src/math/special/exp2.h:21: bad fp exception: RN exp2l(-0x1.004p+10)=0x1p-1025, want 0 got INEXACT|UNDERFLOW
src/math/special/exp2.h:22: bad fp exception: RN exp2l(-0x1.0c8p+10)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
FAIL src/math/exp2l.exe [status 1]
src/math/sanity/fma.h:1: RN fmal(-0x1.02239f3c6a8f1p+3,0x1.22484b9ef31fp+2,0x1.52fb12ef638a1p-1) want -0x1.1f69545c32effp+5 got -0x1.9ee52705ep+4 ulperr 1406739496828928.000 = 0x1.3fdb04p+50 + -0x1.759846p-3
src/math/sanity/fma.h:2: RN fmal(0x1.161868e18bc67p+2,-0x1.1c6a6cdce75e8p+3,0x1.ab3ff8575b21dp-5) want -0x1.348be0b9d32d3p+5 got -0x1.c8a99f416p+3 ulperr 3419582362550272.000 = 0x1.84c2f2p+51 + 0x1.b43916p-3
src/math/sanity/fma.h:3: RN fmal(-0x1.0c34b3e01e6e7p+3,-0x1.61bde29e83f6dp+1,0x1.eb4a2e7ce0693p+2) want 0x1.ed6e27fca81b7p+4 got 0x1.487be8a56cp+2 ulperr -7235829650948096.000 = -0x1.9b4f2ep+52 + -0x1.f11488p-2
src/math/sanity/fma.h:4: RN fmal(-0x1.a206f0a19dcc4p+2,0x1.24527f7b576acp+2,-0x1.95882b433fad3p-1) want -0x1.ea02e2365f336p+4 got 0x1.2e3092a8ap+3 ulperr 11278458491502592.000 = 0x1.408d96p+53 + 0x1.41da3ap-2
src/math/sanity/fma.h:5: RN fmal(0x1.288bbb0d6a1e6p+3,0x1.33edd910a3c01p+2,-0x1.1e159e36313eep-1) want 0x1.603abfa620e23p+5 got -0x1.7341dbb0dp+2 ulperr -7012890246643712.000 = -0x1.8ea2fcp+52 + -0x1.7be8ccp-3
src/math/special/fma.h:42: RN fmal(0x1p+0,0x1p+0,-0x1p-1074) want 0x1p+0 got -0x1.fffffp-43 ulperr -4503599627370496.000 = -0x1p+52 + 0x0p+0
src/math/special/fma.h:43: bad fp exception: RN fmal(0x1p-1074,0x1p-1074,0x1.fffffffffffffp-1022)=0x1.fffffffffffffp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:43: RN fmal(0x1p-1074,0x1p-1074,0x1.fffffffffffffp-1022) want 0x1.fffffffffffffp-1022 got 0x1p-1074 ulperr -9007199254740992.000 = -0x1p+53 + 0x0p+0
src/math/special/fma.h:44: bad fp exception: RN fmal(0x1p-1074,-0x1p-1074,0x1.fffffffffffffp-1022)=0x1.fffffffffffffp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:44: RN fmal(0x1p-1074,-0x1p-1074,0x1.fffffffffffffp-1022) want 0x1.fffffffffffffp-1022 got -0x0p+0 ulperr -9007199254740992.000 = -0x1p+53 + 0x0p+0
src/math/special/fma.h:45: bad fp exception: RN fmal(0x1p-1074,-0x1p-1074,-0x1.fffffffffffffp-1022)=-0x1.fffffffffffffp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:45: RN fmal(0x1p-1074,-0x1p-1074,-0x1.fffffffffffffp-1022) want -0x1.fffffffffffffp-1022 got -0x1p-1074 ulperr 9007199254740992.000 = 0x1p+53 + 0x0p+0
src/math/special/fma.h:46: bad fp exception: RN fmal(0x1p-1074,0x1p-1074,-0x1.fffffffffffffp-1022)=-0x1.fffffffffffffp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:46: RN fmal(0x1p-1074,0x1p-1074,-0x1.fffffffffffffp-1022) want -0x1.fffffffffffffp-1022 got 0x0p+0 ulperr 9007199254740992.000 = 0x1p+53 + 0x0p+0
src/math/special/fma.h:47: RN fmal(0x1p-1074,-0x1p-1074,0x1p-1074) want 0x1p-1074 got -0x0p+0 ulperr -1.000 = -0x1p+0 + 0x0p+0
src/math/special/fma.h:48: RN fmal(0x1p-1074,-0x1p-1074,-0x1p-1074) want -0x1p-1074 got -0x0p+0 ulperr 1.000 = 0x1p+0 + 0x0p+0
src/math/special/fma.h:49: RN fmal(0x1.0000000000001p+0,0x1p+0,0x1p+53) want 0x1.0000000000001p+53 got 0x1.000008p+12 ulperr -4503599627370496.000 = -0x1p+52 + 0x1p-1
src/math/special/fma.h:50: RN fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1p+53) want 0x1.0000000000001p+53 got 0x1.ffc02p+10 ulperr -4503599627370496.000 = -0x1p+52 + 0x1p-1
src/math/special/fma.h:51: RN fmal(0x1p+0,0x1.fffffffffffffp-1,0x1.fffffffffffffp+53) want 0x1.fffffffffffffp+53 got -0x1.ffffep+10 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:52: RN fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffep+53) want 0x1.fffffffffffffp+53 got 0x1.ffc02p+10 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:53: RN fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1p-52) want 0x1.0000000000001p+0 got -0x1.fffffp-42 ulperr -4503599627370496.000 = -0x1p+52 + -0x1p-1
src/math/special/fma.h:54: RN fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.fffffffffffffp-53) want 0x1.0000000000001p+0 got -0x1.fffff8p-41 ulperr -4503599627370496.000 = -0x1p+52 + -0x1p-1
src/math/special/fma.h:55: RN fmal(0x1.0000000000005p+0,0x1.ffffffffffffbp-1,0x1p-52) want 0x1.0000000000003p+0 got -0x1.8fffff8p-37 ulperr -4503599627370496.000 = -0x1p+52 + -0x1p-1
src/math/special/fma.h:56: RN fmal(0x1.0000000000006p+0,0x1.ffffffffffffdp-1,0x1p-52) want 0x1.0000000000005p+0 got -0x1.1fffff8p-37 ulperr -4503599627370496.000 = -0x1p+52 + -0x1p-1
src/math/special/fma.h:75: RN fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffbp-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffff5p+0 got 0x1.6800008p-37 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:76: RN fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1p+0) want 0x1.ffffffffffff9p+0 got 0x1.b000008p-37 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:77: RN fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1.ffffffffffffcp-1) want 0x1.ffffffffffff7p+0 got 0x1.b000008p-37 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:78: RN fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1.ffffffffffff8p-1) want 0x1.ffffffffffff5p+0 got 0x1.b000008p-37 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:79: RN fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff9p-1,0x1.ffffffffffffdp-1) want 0x1.ffffffffffff7p+0 got 0x1.f800008p-37 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:80: RN fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff9p-1,0x1.ffffffffffff9p-1) want 0x1.ffffffffffff5p+0 got 0x1.f800008p-37 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:81: RN fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff8p-1,0x1.ffffffffffffep-1) want 0x1.ffffffffffff7p+0 got 0x1.2000004p-36 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:82: RN fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff8p-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffff5p+0 got 0x1.2000004p-36 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:83: RN fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.fffffffffffffp-1) want 0x1.ffffffffffff7p+0 got 0x1.4400004p-36 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:84: RN fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.ffffffffffffbp-1) want 0x1.ffffffffffff5p+0 got 0x1.4400004p-36 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:85: RN fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffff3p+0 got 0x1.4400004p-36 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:86: RN fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffep-1) want 0x1.fffffffffffffp+0 got -0x1.fffffp-42 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:87: RN fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffffdp+0 got -0x1.fffffp-42 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:88: RN fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.fffffffffffffp-1) want 0x1.fffffffffffffp+0 got -0x1.fffff8p-41 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:89: RN fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.ffffffffffffbp-1) want 0x1.ffffffffffffdp+0 got -0x1.fffff8p-41 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:90: RN fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffffbp+0 got -0x1.fffff8p-41 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:91: RN fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1p+0) want 0x1.fffffffffffffp+0 got -0x1.7ffffcp-40 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:92: RN fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1.ffffffffffffcp-1) want 0x1.ffffffffffffdp+0 got -0x1.7ffffcp-40 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:93: RN fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1.ffffffffffff8p-1) want 0x1.ffffffffffffbp+0 got -0x1.7ffffcp-40 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:94: RN fmal(0x1.0000000000001p+0,0x1.ffffffffffffcp-1,0x1.ffffffffffffdp-1) want 0x1.ffffffffffffdp+0 got -0x1.fffffcp-40 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:95: RN fmal(0x1.0000000000001p+0,0x1.ffffffffffffcp-1,0x1.ffffffffffff9p-1) want 0x1.ffffffffffffbp+0 got -0x1.fffffcp-40 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:96: RN fmal(0x1.0000000000001p+0,0x1.ffffffffffffbp-1,0x1.ffffffffffffep-1) want 0x1.ffffffffffffdp+0 got -0x1.3ffffep-39 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:97: RN fmal(0x1.0000000000001p+0,0x1.ffffffffffffbp-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffffbp+0 got -0x1.3ffffep-39 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:98: RN fmal(0x1.5872449b765b9p+0,0x1.c9acf91f8de2bp+0,0x1.9265607e4d168p+0) want 0x1.fd190c77c2a67p+1 got -0x1.b3fc37bedp-4 ulperr -9195829923414016.000 = -0x1.055c78p+53 + -0x1.fffc98p-2
src/math/special/fma.h:99: RN fmal(0x1.81d010b146d0ep+0,0x1.2d3c680dc9071p+0,0x1.a80b69538754cp+0) want 0x1.b7040b44973a7p+1 got 0x1.4d0cb20197p+1 ulperr -1864177270390784.000 = -0x1.a7dd66p+50 + 0x1.ffacbcp-2
src/math/special/fma.h:100: RN fmal(0x1.6a44f2252b6a2p+0,0x1.da452a378b832p+0,0x1.1fe2ce329104p+0) want 0x1.df842b6f48b13p+1 got 0x1.12e95c1ba4p+0 ulperr -6017592242208768.000 = -0x1.560f7ep+52 + 0x1.ffdda2p-2
src/math/special/fma.h:101: RN fmal(0x1.096b1d26463eep+0,0x1.d846d3e34333p+0,0x1.721e3480922b8p+0) want 0x1.ade2909c0269fp+1 got -0x1.a139d9b2cp-1 ulperr -9397596749561856.000 = -0x1.0b1884p+53 + -0x1.ffe5ecp-2
src/math/special/fma.h:102: RN fmal(0x1.99bd3434c454bp+0,0x1.03cb8e4115bdep+0,0x1.109f107188b08p+0) want 0x1.5837a47d37fafp+1 got 0x1.cfdec0c00ap+0 ulperr -1975290892910592.000 = -0x1.c1211p+50 + 0x1.ffc604p-2
src/math/special/fma.h:103: RN fmal(0x1.ba930a0a78ed2p+0,0x1.8c24e8d67f636p+0,0x1.ac49dbfbf8affp+0) want 0x1.164947ae6a5d9p+2 got -0x1.33e3b04edp-2 ulperr -5234191281160192.000 = -0x1.298782p+52 + -0x1.fffb3p-2
src/math/special/fma.h:104: RN fmal(0x1.be224ad773191p+0,0x1.d96b77169731fp+0,0x1.662cfb75d8edep+0) want 0x1.27cd67e720f79p+2 got 0x1.e4711611c78p+1 ulperr -942615600037888.000 = -0x1.aca6e6p+49 + 0x1.ffc372p-2
src/math/special/fma.h:105: RN fmal(0x1.59e7a1b0bdb3cp+0,0x1.2decba4d46421p+0,0x1.88f4062e96df5p+0) want 0x1.90749e4794f79p+1 got -0x1.b3c84a9a88p-1 ulperr -8961479327875072.000 = -0x1.fd66bp+52 + -0x1.ffe4c4p-2
src/math/special/fma.h:106: RN fmal(0x1.22edf4b4da9a7p+0,0x1.dfa8d65f506cdp+0,0x1.2799208da2fbap+0) want 0x1.a45a1e99ed7a9p+1 got 0x1.a0bdfb8976p-1 ulperr -5562059957731328.000 = -0x1.3c2aap+52 + 0x1.ffe5f4p-2
src/math/special/fma.h:107: RN fmal(0x1.ad5b991a2a279p+0,0x1.f02fd26706024p+0,0x1.831cdd5c8797cp+0) want 0x1.30d3a2ac90a61p+2 got 0x1.c7c15e1c82p+1 ulperr -1353701616779264.000 = -0x1.33cbcep+50 + 0x1.ffc708p-2
src/math/special/fma.h:108: RN fmal(0x1.531f9620e764ap+0,0x1.cad61b54d4425p+0,0x1.df817cae8a9afp+0) want 0x1.0fd4e7f8671ddp+2 got 0x1.8e74e26059p+1 ulperr -1277252138434560.000 = -0x1.2269dcp+50 + 0x1.ffce32p-2
src/math/special/fma.h:109: RN fmal(0x1.629a5ad79494fp+0,0x1.049e58693f4c4p+0,0x1.45b0109e4d00cp+0) want 0x1.5758154e14965p+1 got -0x1.01173c9c2p-3 ulperr -6322847379095552.000 = -0x1.67698ap+52 + -0x1.fffbfcp-2
src/math/special/fma.h:110: RN fmal(0x1.2f52b53f9240ap+0,0x1.1d5c686dbb0dap+0,0x1.6da3e392a4fd4p+0) want 0x1.5fe03a6795913p+1 got 0x1.5bdb7d9084p+0 ulperr -3130480329228288.000 = -0x1.63e4f8p+51 + 0x1.ffd484p-2
src/math/special/fma.h:111: RN fmal(0x1.058667552b49ep+0,0x1.23307bacc1c42p+0,0x1.5b059b47cd8f5p+0) want 0x1.423f752486d13p+1 got -0x1.4bfb042744p+0 ulperr -8589176530272256.000 = -0x1.e83cf8p+52 + -0x1.ffd68p-2
src/math/special/fma.h:112: RN fmal(0x1.a717d95337ed8p+0,0x1.2b1c37846aaadp+0,0x1.be65672f885b1p+0) want 0x1.d65e72303c075p+1 got -0x1.7e0573ec04p+1 ulperr -14995408015065088.000 = -0x1.aa31f4p+53 + -0x1.ffa07ep-2
src/math/special/fma.h:113: RN fmal(0x1.deb79287b3d32p+0,0x1.62776b829babap+0,0x1.67daf18bd2eb1p+0) want 0x1.ff5a0d45c69d7p+1 got 0x1.ad881652ap-3 ulperr -8523520438960128.000 = -0x1.e4818cp+52 + 0x1.fff94ap-2
src/math/special/fma.h:114: RN fmal(0x1.fbf12d3a6de91p+0,0x1.879fe6124f11p+0,0x1.9f3f1247a8641p+0) want 0x1.2a126c6980019p+2 got 0x1.45e3d61a84p+2 ulperr 489379780886528.000 = 0x1.bd169cp+48 + 0x1.ffae88p-2
src/math/special/fma.h:115: RN fmal(0x1.c589628460e01p+0,0x1.e1bec1c797533p+0,0x1.349f30cdb84bbp+0) want 0x1.2286118b6f6e5p+2 got -0x1.8e9d95e0668p+1 ulperr -8617206560587776.000 = -0x1.e9d4dcp+52 + -0x1.ffce2cp-2
src/math/special/fma.h:116: RN fmal(0x1.46fd6c2c924ebp+0,0x1.65e2f02e730a1p+0,0x1.37739d2751098p+0) want 0x1.804a71c1f1273p+1 got 0x1.855d7947cbp+0 ulperr -3335623268106240.000 = -0x1.7b376ap+51 + 0x1.ffcf54p-2
src/math/special/fma.h:117: RN fmal(0x1.f99e595ae11fdp+0,0x1.bd33d9a1d81bp+0,0x1.932a2a2e244c1p+0) want 0x1.409e34f8f2f89p+2 got -0x1.7a49668944p+2 ulperr -12295261934059520.000 = -0x1.5d73cep+53 + -0x1.ffa16ep-2
src/math/special/fma.h:118: RN fmal(0x1.59ea1e56bfe55p+0,0x1.6f46b7d412a44p+0,0x1.80f2bc9a32cc3p+0) want 0x1.b89c7640e32ffp+1 got -0x1.ca180bfb6p-3 ulperr -8254993714905088.000 = -0x1.d53df8p+52 + -0x1.fff8d8p-2
src/math/special/fma.h:119: RN fmal(0x1.61490fcb44129p+0,0x1.0038ec4fc35c2p+0,0x1.df7436ed7a7b7p+0) want 0x1.a085ea68d05cfp+1 got -0x1.5ed2c690f7p+1 ulperr -13499301254660096.000 = -0x1.7fac58p+53 + -0x1.ffa84cp-2
src/math/special/fma.h:120: RN fmal(0x1.d41b98788502bp+0,0x1.1a7b77843aca6p+0,0x1.05be891837d36p+0) want 0x1.8523596ceced9p+1 got -0x1.48c8fc403cp-1 ulperr -8291801584631808.000 = -0x1.d75598p+52 + -0x1.ffeb74p-2
src/math/special/fma.h:121: RN fmal(0x1.3153cf6f69af9p+0,0x1.aaa947e38e57ap+0,0x1.8519f9b590645p+0) want 0x1.c0fcab7b46369p+1 got 0x1.25f4f4bd5p-3 ulperr -7575453653008384.000 = -0x1.ae9d5cp+52 + 0x1.fffb68p-2
src/math/special/fma.h:122: RN fmal(0x1.c25a1f73581aap+0,0x1.0a51ffca372ap+0,0x1.0c77e3ebac5f3p+0) want 0x1.707ce48c7d72dp+1 got -0x1.3261c9a0ep+1 ulperr -11872436362412032.000 = -0x1.516f58p+53 + -0x1.ffb368p-2
src/math/special/fma.h:123: RN fmal(0x1.829c2cde44b7p+0,0x1.f692e86d8cb36p+0,0x1.455e72d264bfp+0) want 0x1.0f16a3b8b3f97p+2 got -0x1.684386466p+0 ulperr -6353495191977984.000 = -0x1.692786p+52 + -0x1.ffe97cp-2
src/math/special/fma.h:124: RN fmal(0x1.94729588dcc69p+0,0x1.c3bb794c6edf8p+0,0x1.9da4e94d262d2p+0) want 0x1.19d4bd84d9fd3p+2 got 0x1.e1b9a2757p-1 ulperr -3898698849320960.000 = -0x1.bb3b12p+51 + 0x1.fff0f2p-2
src/math/special/fma.h:125: RN fmal(0x1.e6a5e7e39c3d5p+0,0x1.1b69af2bdd978p+0,0x1.e7ef1eafa119cp+0) want 0x1.00ac5b44c9f31p+2 got -0x1.6777d5d394p+1 ulperr -7677358731427840.000 = -0x1.b46846p+52 + -0x1.ffd312p-2
src/math/special/fma.h:126: RN fmal(0x1.bc9ba1320700cp-1022,0x1.981f2e1a451a8p-2,0x1.046144efc0ceap-1022) want 0x1.b594d0e4368efp-1022 got -0x1.9dedc9561p-1023 ulperr -11338968138252288.000 = -0x1.4245dap+53 + -0x1.ffcc42p-2
src/math/special/fma.h:127: RN fmal(0x1.022db53c98d14p-1022,0x1.21157eef74848p-2,0x1.2f880432b1bc1p-1022) want 0x1.786ad60a02b3dp-1022 got -0x1.150255ac98p-1022 ulperr -11495199721127936.000 = -0x1.46b696p+53 + -0x1.ffbacp-2
src/math/special/fma.h:128: RN fmal(0x1.805a491fa9597p-1022,0x1.e0f49d782ff87p-2,0x1.172a62346206p-1022) want 0x1.cbb085199a3f5p-1022 got -0x1.6ed115da2f8p-1023 ulperr -11313497908445184.000 = -0x1.418c88p+53 + -0x1.ffd226p-2
src/math/special/fma.h:129: RN fmal(0x1.adbc3a9d816dep-1022,0x1.e039d4431e3cdp-2,0x1.93ceef6fe18a2p-1022) want 0x1.2eabb7dc0e2f1p-1021 got 0x1.ef7b6794e3p-1023 ulperr -3145487481831424.000 = -0x1.6599bcp+51 + 0x1.ffe108p-2
src/math/special/fma.h:130: RN fmal(0x1.645aa5c2df3afp-1022,0x1.649edfcad854fp-2,0x1.8b43e0bbaeb01p-1022) want 0x1.03af571d2b505p-1021 got 0x1.0ce86163c02p-1021 ulperr 162249436037120.000 = 0x1.272148p+47 + 0x1.ffbcc6p-2
src/math/special/fma.h:131: RN fmal(0x1.133474a2c0fb1p-1022,0x1.72442bcbfa01dp-2,0x1.4a1a21971c5dbp-1022) want 0x1.ad9ce7fcefa3fp-1022 got -0x1.12bc4931e6p-1025 ulperr -8161980292530176.000 = -0x1.cff472p+52 + -0x1.fff76ap-2
src/math/special/fma.h:132: RN fmal(0x1.8ee3feb00c3e7p-1022,0x1.53bd9353313bcp-2,0x1.5501b57dc3b6fp-1022) want 0x1.d9598906f0bb3p-1022 got -0x1.4660b83f57p-1022 ulperr -14068955652030464.000 = -0x1.8fdd2p+53 + -0x1.ffae68p-2
src/math/special/fma.h:133: RN fmal(0x1.161225cfa61e2p-1022,0x1.b6dd69a0af5bp-2,0x1.924ffc3ead5c3p-1022) want 0x1.04be6fc25367bp-1021 got -0x1.f3ab56daa8p-1022 ulperr -8982192881401856.000 = -0x1.fe941cp+52 + -0x1.ffc18ap-2
src/math/special/fma.h:134: RN fmal(0x1.820f7faf219afp-1022,0x1.06717ae771f6dp-2,0x1.0dc5035f5e2afp-1022) want 0x1.70b6c3169f043p-1022 got -0x1.a779baefbe8p-1023 ulperr -10211413595258880.000 = -0x1.2239dp+53 + -0x1.ffcb1p-2
src/math/special/fma.h:135: RN fmal(0x1.ce0e2ea55040ep-1022,0x1.ce5a55fa3828dp-2,0x1.f2f444d50ce59p-1022) want 0x1.61ca36f5a8a79p-1021 got -0x1.173f0cea128p-1022 ulperr -8680214267691008.000 = -0x1.ed69bep+52 + -0x1.ffdd18p-2
src/math/special/fma.h:136: RN fmal(0x1.a7a271c67cdcfp-1022,0x1.1e979090e218p-2,0x1.b1f10b6e2177ap-1022) want 0x1.1440cf1c105ebp-1021 got -0x1.f88fda6p-1030 ulperr -4877233864835072.000 = -0x1.153d18p+52 + -0x1.ffffcp-2
src/math/special/fma.h:137: RN fmal(0x1.76df065829dc6p-1022,0x1.fb22ab1b86b8bp-2,0x1.6966267f317cp-1022) want 0x1.1186e1f77012dp-1021 got -0x1.2ffba526fcp-1025 ulperr -5146168610783232.000 = -0x1.24869cp+52 + -0x1.fffb4p-2
src/math/special/fma.h:138: RN fmal(0x1.8b004a28b70dbp-1022,0x1.48e5805a8b453p-2,0x1.0ea791f716557p-1022) want 0x1.8d86310bad175p-1022 got -0x1.1b755c367f8p-1023 ulperr -9486646453993472.000 = -0x1.0da07p+53 + -0x1.ffdc92p-2
src/math/special/fma.h:139: RN fmal(0x1.fb3391a4b1d23p-1022,0x1.4d8705b057caep-2,0x1.d026cb6dae73bp-1022) want 0x1.3aad18b424c67p-1021 got -0x1.0a1784c7c6cp-1021 ulperr -10216978799132672.000 = -0x1.22624ep+53 + -0x1.ffbd7ap-2
src/math/special/fma.h:140: RN fmal(0x1.a5ba39730e197p-1022,0x1.794df89b1cc49p-2,0x1.24a0a388d0b6bp-1022) want 0x1.c0048fd33a417p-1022 got -0x1.d026e457f1p-1024 ulperr -9922974329077760.000 = -0x1.1a0724p+53 + -0x1.ffe2fep-2
src/math/special/fma.h:141: RN fmal(0x1.aa9eff070281cp-1022,0x1.fab05661b48ebp-2,0x1.cbe2af6c69c6ep-1022) want 0x1.4f7ddbe122765p-1021 got 0x1.9e529858dap-1023 ulperr -4079821109854208.000 = -0x1.cfd26cp+51 + 0x1.ffe61ap-2
src/math/special/fma.h:142: RN fmal(0x1.758bbff0ec4bap-1022,0x1.a4a197f3fa424p-2,0x1.47761e8d142ddp-1022) want 0x1.e0e762ee2e7c5p-1022 got -0x1.e2fe0f96ecp-1023 ulperr -12708596701724672.000 = -0x1.693336p+53 + -0x1.ffc3ap-2
src/math/special/fma.h:143: RN fmal(0x1.4dab43918a9a8p-1022,0x1.ed667442b4751p-2,0x1.3f25f82e02e3ep-1022) want 0x1.dfec0ee732dcbp-1022 got 0x1.6a41c4d18ap-1022 ulperr -2069987942465536.000 = -0x1.d6a928p+50 + 0x1.ffa57p-2
src/math/special/fma.h:144: RN fmal(0x1.7943735951931p-1022,0x1.fa6a357c5c9ddp-2,0x1.0bed44b0b71b4p-1022) want 0x1.c6803a6059abfp-1022 got 0x1.0e970cce134p-1022 ulperr -3235394032238592.000 = -0x1.6fd25cp+51 + 0x1.ffbc5ap-2
src/math/special/fma.h:145: RN fmal(0x1.66c26bc29a5e8p-1022,0x1.3faed079f761ap-2,0x1.163ff906dd651p-1022) want 0x1.8640492c45959p-1022 got -0x1.3271a1b38p-1027 ulperr -7033839486500864.000 = -0x1.8fd3d6p+52 + -0x1.fffd9cp-2
src/math/special/fma.h:146: RN fmal(0x1.f52172c56bdf5p-1022,0x1.672b2de422734p-2,0x1.7bc5d708e5a34p-1022) want 0x1.15c5b95145cc7p-1021 got 0x1.3cf4f71d188p-1021 ulperr 689341647028224.000 = 0x1.3979eep+49 + 0x1.ffb0c2p-2
src/math/special/fma.h:147: RN fmal(0x1.2f94e89aa7558p-1022,0x1.dfa6d30835f5ep-2,0x1.59c6b0d504cf9p-1022) want 0x1.e7fa0dd76fbefp-1022 got -0x1.60a5d541bp-1024 ulperr -10135539776749568.000 = -0x1.2011c2p+53 + -0x1.ffe9f6p-2
src/math/special/fma.h:148: RN fmal(0x1.6159897ae533cp-1022,0x1.f3b8892e3a3c8p-2,0x1.09ca702b7759p-1022) want 0x1.b63a7f56fce1fp-1022 got -0x1.497a9bc52p-1024 ulperr -9158461560455168.000 = -0x1.044c94p+53 + -0x1.ffeb68p-2
src/math/special/fma.h:149: RN fmal(0x1.f73d5f4e81fd8p-1022,0x1.7ccff2642124ap-2,0x1.e7d836a0c8308p-1022) want 0x1.517f1763126d3p-1021 got -0x1.06939f3372p-1021 ulperr -10556597969354752.000 = -0x1.2c095cp+53 + -0x1.ffbe5cp-2
src/math/special/fma.h:150: RN fmal(0x1.b4328925969fbp-1022,0x1.8fa02832a22d5p-2,0x1.2084598e2f8c6p-1022) want 0x1.cabf43838dc51p-1022 got -0x1.7c61d65f0a4p-1022 ulperr -14762118276448256.000 = -0x1.a3908cp+53 + -0x1.ffa0e8p-2
src/math/special/fma.h:151: RN fmal(0x1.66ee60a92676fp-1022,0x1.eddd2e7681ce4p-2,0x1.b81d57daeb3a7p-1022) want 0x1.329c918ffb683p-1021 got 0x1.cd379885b8p-1025 ulperr -4886854591578112.000 = -0x1.15c918p+52 + 0x1.fff8ccp-2
src/math/special/fma.h:152: RN fmal(0x1.ff2737585895dp-1022,0x1.fb4bf3828ae4ap-2,0x1.4a866847740fp-1022) want 0x1.23e07e4dbbeabp-1021 got 0x1.46c53f7571p-1023 ulperr -3697601232764928.000 = -0x1.a45e5cp+51 + 0x1.ffeb94p-2
src/math/special/fma.h:153: RN fmal(0x1.5e2008d269a86p-1022,0x1.507bbbe4d78eep-2,0x1.6220c6f83f636p-1022) want 0x1.d52d9874f1c75p-1022 got 0x1.eda0503c4ap-1023 ulperr -3911886277967872.000 = -0x1.bcbaep+51 + 0x1.ffc24cp-2
src/math/special/fma.h:154: RN fmal(0x1.ce7e2e5812d86p-1022,0x1.0e6689d092e5fp-2,0x1.1e43fd55c3458p-1022) want 0x1.9864925e2fb0fp-1022 got -0x1.53ae580e8cp-1025 ulperr -7931489798848512.000 = -0x1.c2da5ep+52 + -0x1.fff562p-2
src/math/special/fma.h:155: RN fmal(0x1.7b353b81e793dp-1022,0x1.82b426f874c6dp-2,0x1.d92b19d21fd5cp-1022) want 0x1.342fb0c544a79p-1021 got 0x1.2af4c8aebe4p-1022 ulperr -2792024021401600.000 = -0x1.3d6a98p+51 + 0x1.ffdaa2p-2
src/math/special/fma.h:156: RN fmal(0x1.5be667823370ap-1022,0x1.a8a99b163869bp-2,0x1.95456b68dc3bcp-1022) want 0x1.12c638de03c71p-1021 got 0x1.49af7fc787p-1023 ulperr -3383908364189696.000 = -0x1.80b4b2p+51 + 0x1.ffeb66p-2
src/math/special/fma.h:157: RN fmal(0x1.17b0fc6c850e5p-1022,0x1.d1d0a4853c315p-2,0x1.36b79f7c0c24p-1022) want 0x1.b5f2baff5635dp-1022 got 0x1.6a19304724p-1026 ulperr -7306334223466496.000 = -0x1.9f5128p+52 + 0x1.fffa58p-2
src/math/special/fma.h:158: RN fmal(0x1.bd97819bacfd8p-1022,0x1.2c25f267ba4eep-2,0x1.804b5204a3f3ap-1022) want 0x1.01739c190fd97p-1021 got 0x1.b9e166e6b4p-1022 ulperr -642314707927040.000 = -0x1.241746p+49 + 0x1.ffc8c4p-2
src/math/special/fma.h:159: RN fmal(0x1.596577053873dp-1022,0x1.3562ab2d29949p-2,0x1.b3f1ee75db6e7p-1022) want 0x1.0e268a498009bp-1021 got 0x1.e8136bc1594p-1022 ulperr -459377991483392.000 = -0x1.a1cd46p+48 + 0x1.ffc2fep-2
src/math/special/fma.h:160: RN fmal(0x1.3c7a68cf0f7b3p-1022,0x1.9a55c15b167bdp-2,0x1.7635b7b163c07p-1022) want 0x1.f5073b93b7b81p-1022 got 0x1.75f9a972138p-1023 ulperr -5524660993130496.000 = -0x1.3a0a66p+52 + 0x1.ffd14p-2
src/math/special/fma.h:161: RN fmal(0x1.5825164bc4068p-1022,0x1.dcbb6e5ff3245p-2,0x1.52fc3be0e84dap-1022) want 0x1.f334771c2dcfbp-1022 got 0x1.2b86ba6b02p-1022 ulperr -3512784226615296.000 = -0x1.8f5b7ap+51 + 0x1.ffb51ep-2
src/math/special/fma.h:162: RN fmal(0x1.139ea77b760ecp+1022,0x1.9b25f2fd017eap+2,-0x1.bc16788922b6fp+1023) want 0x1.b93aac527380fp+1023 got 0x1.c3ec4f2eep+1022 ulperr -3787028625883136.000 = -0x1.ae890ap+51 + 0x1.ffc782p-2
src/math/special/fma.h:163: RN fmal(0x1.0e6f9c1657d7cp+1022,0x1.4d5c6b55ab5f1p+2,-0x1.e027dd5742e2cp+1023) want 0x1.c0538372b4bbfp+1022 got 0x1.54dede6dep+1021 ulperr -4888708943708160.000 = -0x1.15e414p+52 + 0x1.ffd564p-2
src/math/special/fma.h:164: RN fmal(0x1.1182524fa411cp+1022,0x1.a3dba56842d19p+2,-0x1.c1ad59474d71fp+1023) want 0x1.bf78969300a77p+1023 got 0x1.8651491efp+1022 ulperr -4438724683235328.000 = -0x1.f89fe4p+51 + 0x1.ffcf36p-2
src/math/special/fma.h:165: RN fmal(0x1.1cbf4fb8ec82p+1022,0x1.5e32019a84fbbp+2,-0x1.985af08f32edep+1023) want 0x1.72af6bbad4a29p+1023 got 0x1.a68c1c1ecp+1023 ulperr 912367152005120.000 = 0x1.9ee584p+49 + 0x1.ff965cp-2
src/math/special/fma.h:166: RN fmal(0x1.311e25c6db346p+1022,0x1.4e30db6c4b51dp+2,-0x1.7681f7a9786a7p+1023) want 0x1.a61d29434fc13p+1023 got -0x1.791d1989p+1017 ulperr -7529566759288832.000 = -0x1.ac019ep+52 + -0x1.fffe86p-2
src/math/special/fma.h:167: RN fmal(0x1.1201cf577052fp+1022,0x1.59730b2db7a16p+2,-0x1.56f1a64a078d5p+1023) want 0x1.8c8d801df34d9p+1023 got -0x1.3048609fd8p+1022 ulperr -inf = -inf + -0x1.ffd9f6p-2
src/math/special/fma.h:168: RN fmal(0x1.3e52335b76e81p+1022,0x1.4dbd56f857479p+2,-0x1.509340c11bd2ep+1023) want 0x1.ed6576837f653p+1023 got -0x1.e498d5441cp+1022 ulperr -inf = -inf + -0x1.ffc36cp-2
src/math/special/fma.h:169: RN fmal(0x1.18566b4f843cbp+1022,0x1.444fba10eaf29p+2,-0x1.f927beae57f0ap+1023) want 0x1.9a433b9796559p+1022 got 0x1.a048d2820cp+1022 ulperr 105937222238208.000 = 0x1.8165bap+46 + -0x1.ff6812p-2
src/math/special/fma.h:170: RN fmal(0x1.3fbe544fe1be8p+1022,0x1.2d2a5fda03639p+2,-0x1.007407dbfd03cp+1023) want 0x1.efdb644b613e5p+1023 got -0x1.e14223656p+1022 ulperr -inf = -inf + -0x1.ffc3d8p-2
src/math/special/fma.h:171: RN fmal(0x1.263a0d3bc2e4p+1022,0x1.4cc198adbc651p+2,-0x1.734b1c1f7fdb8p+1023) want 0x1.899878afc0fa3p+1023 got 0x1.a13620448p+1023 ulperr 415454233362432.000 = 0x1.79da7ap+48 + 0x1.ff97b2p-2
src/math/special/fma.h:172: RN fmal(0x1.5bf4aec8efc8ep+1022,0x1.555f0341516c9p+2,-0x1.c706408acd14cp+1023) want 0x1.d8f5e18b868bdp+1023 got 0x1.3e5679fdf8p+1022 ulperr -5520279589617664.000 = -0x1.39caa4p+52 + 0x1.ffd836p-2
src/math/special/fma.h:173: RN fmal(0x1.1e57f1af78279p+1022,0x1.34bc0c7f082b3p+2,-0x1.497b92c1365edp+1023) want 0x1.692cb7ec68a93p+1023 got -0x1.c0a1f29b28p+1021 ulperr -8326959113175040.000 = -0x1.d95534p+52 + -0x1.ffe3f6p-2
src/math/special/fma.h:174: RN fmal(0x1.1d9824cd73511p+1022,0x1.1d557ddfe47ffp+2,-0x1.556cdb1d20a72p+1023) want 0x1.2736a6b6e35f3p+1023 got 0x1.bc6f9c9778p+1021 ulperr -3238800478175232.000 = -0x1.70358p+51 + 0x1.ffe43ap-2
src/math/special/fma.h:175: RN fmal(0x1.1ff85a24aff31p+1022,0x1.39ab374b2680dp+2,-0x1.35e6b07b651b8p+1023) want 0x1.8bc7ce2087081p+1023 got 0x1.84b319bafap+1023 ulperr -124568119279616.000 = -0x1.c52d1ap+46 + 0x1.ff9ed4p-2
src/math/special/fma.h:176: RN fmal(0x1.0449b3965227ep+1022,0x1.4430d4441f9f2p+2,-0x1.a6966c96307ep+1023) want 0x1.d94eda8c81771p+1022 got -0x1.992ed6b72p+1021 ulperr -11925733685329920.000 = -0x1.52f322p+53 + -0x1.ffccdap-2
src/math/special/fma.h:177: RN fmal(0x1.3c91fa00fd0c7p+1022,0x1.1b6661c0b0303p+2,-0x1.f1f2846b64483p+1023) want 0x1.95eae0d2644d3p+1022 got 0x1.9985d8eaap+1019 ulperr -6240425882943488.000 = -0x1.62ba26p+52 + -0x1.ff0cccp-2
src/math/special/fma.h:178: RN fmal(0x1.0979b36d46534p+1022,0x1.12fa205f41f7fp+2,-0x1.a83ecf4544a63p+1023) want 0x1.2420f34e2aa3dp+1022 got -0x1.335a0fe68p+1019 ulperr -5815056616914944.000 = -0x1.4a8c36p+52 + 0x1.ff099ap-2
src/math/special/fma.h:179: RN fmal(0x1.4c89df582a599p+1022,0x1.55f3dc473ea8fp+2,-0x1.e35037292ddfp+1023) want 0x1.95109fdbc3771p+1023 got -0x1.afa3b29624p+1022 ulperr -inf = -inf + -0x1.ffca0cp-2
src/math/special/fma.h:180: RN fmal(0x1.35ee0a669c4fbp+1022,0x1.2263cb63f386ap+2,-0x1.449218ae35ac7p+1023) want 0x1.7a8ed977d817bp+1023 got 0x1.47da9ddfb8p+1022 ulperr -3775828961787904.000 = -0x1.ad4316p+51 + 0x1.ffd704p-2
src/math/special/fma.h:181: RN fmal(0x1.117cc860f61bcp+1022,0x1.440985b25d994p+2,-0x1.d7a7d82000449p+1023) want 0x1.b960b7088e74fp+1022 got 0x1.ddfba372cp+1022 ulperr 643964982001664.000 = 0x1.24d764p+49 + -0x1.ff777ep-2
src/math/special/fma.h:182: RN fmal(0x1.1e78a37be320fp+1022,0x1.0db0fce62287bp+2,-0x1.376337da5eb53p+1023) want 0x1.24326b9956dfbp+1023 got -0x1.d2881b3596p+1023 ulperr -inf = -inf + -0x1.ff8b5ep-2
src/math/special/fma.h:183: RN fmal(0x1.0c79b5c8331c2p+1022,0x1.0aba6ea746b5p+2,-0x1.c86f1fcaf0741p+1023) want 0x1.9c135bb2cff85p+1021 got -0x1.cc298bacp+1019 ulperr -9273126449840128.000 = -0x1.078eep+53 + 0x1.fe1cc2p-2
src/math/special/fma.h:184: RN fmal(0x1.556c4c072f272p+1022,0x1.347758d7d4eb5p+2,-0x1.c6fe4f24b248dp+1023) want 0x1.6fcc9f756df6dp+1023 got -0x1.f6f4c76598p+1022 ulperr -inf = -inf + -0x1.ffc122p-2
src/math/special/fma.h:185: RN fmal(-0x1.e8349b891b2fp-1,0x1.4a6dec9b72578p-1,0x1.3b6151ce809ddp-1) want 0x1.3a62fe330b355p-11 got -0x1.d97121p-11 ulperr -13859627535958016.000 = -0x1.89ea1p+53 + -0x1.ff89a4p-2
src/math/special/fma.h:186: RN fmal(0x1.2996632ac7d74p-1,-0x1.bb3c58b654d94p-1,0x1.01a6660e64a31p-1) want 0x1.ed045bb956a8ep-15 got -0x1.070d62p-15 ulperr -13300911346548736.000 = -0x1.7a08dep+53 + -0x1.eabe3cp-2
src/math/special/fma.h:187: RN fmal(-0x1.c602e894c1df8p-1,0x1.a1c980e7d3f94p-1,0x1.7271244b43386p-1) want -0x1.ba251fe026e5bp-15 got -0x1.af2b6cp-15 ulperr 193081294979072.000 = 0x1.5f367cp+47 + 0x1.fa6bcap-2
src/math/special/fma.h:188: RN fmal(-0x1.c84baf47e85cp-1,0x1.770b5149ef2ep-1,0x1.4d80f139320bap-1) want -0x1.79277433b9e23p-10 got 0x1.d4b6fp-11 ulperr 10757822555881472.000 = 0x1.31c176p+53 + 0x1.ffc56ap-2
src/math/special/fma.h:189: RN fmal(-0x1.36e667dcf9c6p-1,0x1.2591f82556b88p-1,0x1.2452a0f795f95p-1) want 0x1.c83c8e63c159fp-3 got -0x1.221cccp-12 ulperr -8036166204915712.000 = -0x1.c8cd9cp+52 + -0x1.ffffdcp-2
src/math/special/fma.h:190: RN fmal(0x1.88b2cede61e4cp-1,-0x1.71dcab5ad9e9p-3,0x1.32b27fea2ae97p-3) want 0x1.70461909b25e2p-7 got -0x1.affe57fffffffp-17 ulperr -6486162973655040.000 = -0x1.70b218p+52 + -0x1.ffffe6p-2
src/math/special/fma.h:191: RN fmal(0x1.8d1e44002c98p-3,-0x1.af9fdfb347834p-1,0x1.e280942fb4146p-4) want -0x1.761ac23896dfdp-5 got 0x1.0bec48p-14 ulperr 6590522089013248.000 = 0x1.76a0b8p+52 + 0x1.ffffdep-2
src/math/special/fma.h:192: RN fmal(0x1.236e8cb9492c8p-1,-0x1.d37443a57f1c4p-1,0x1.ca10df801aabcp-4) want -0x1.a1a2cdf0138f9p-2 got 0x1.f090cab7p-5 ulperr 8439088898113536.000 = 0x1.dfb4e8p+52 + 0x1.fff07cp-2
src/math/special/fma.h:193: RN fmal(-0x1.6ad943e610fb8p-1,-0x1.cef92a7bb18bcp-1,0x1.f28587d8fb0ep-4) want 0x1.866b5204b9aecp-1 got -0x1.8c9eb9a7p-5 ulperr -7304415983697920.000 = -0x1.9f353ep+52 + -0x1.fff9cep-2
src/math/special/fma.h:194: RN fmal(-0x1.60a8569a5d894p-1,-0x1.ca07e29dd171cp-1,0x1.b6c475ace09ecp-4) want 0x1.72549291e2f7ap-1 got -0x1.b6fd181e8p-5 ulperr -6997593720619008.000 = -0x1.8dc464p+52 + -0x1.fff924p-2
src/math/special/fma.h:195: RN fmal(0x1.d1962720d678cp-1,-0x1.4548ee45c4084p-1,0x1.f416ab193d75cp-4) want -0x1.d2929879dc853p-2 got 0x1.fc38e6f4p-8 ulperr 8347731722502144.000 = 0x1.da837cp+52 + 0x1.fffe04p-2
src/math/special/fma.h:196: RN fmal(-0x1.9ddcb295a7d64p-1,0x1.67fb3a2068a78p-1,0x1.da9cd4597fe0ap-4) want -0x1.cf4f6eb4fc5d8p-2 got 0x1.59da5512p-6 ulperr 8530909930192896.000 = 0x1.e4ed14p+52 + 0x1.fffa98p-2
src/math/special/fma.h:197: RN fmal(0x1.c00d16ed45b88p+0,0x1.c787eddda3664p+0,0x1.1e3e6f0cc1802p-5) want 0x1.931b8f379dcc3p+1 got -0x1.63fb63b8p-6 ulperr -7140470639558656.000 = -0x1.95e386p+52 + -0x1.ffff4ep-2
src/math/special/fma.h:198: RN fmal(0x1.19c2a2372c184p+0,-0x1.cb506961c19fp+0,0x1.db1abf3f7ba3ap-6) want -0x1.f21c0eab0bc18p+0 got 0x1.a29607ffffff8p-13 ulperr 8763735812341760.000 = 0x1.f22924p+52 + 0x1.fffffcp-2
src/math/special/fma.h:199: RN fmal(-0x1.3a263218ccd1cp+0,-0x1.e818d390df27cp+0,0x1.2a81ed71785f5p-5) want 0x1.3025ab0f63925p+1 got -0x1.bfdf0b9cp-6 ulperr -5412168283455488.000 = -0x1.33a56ap+52 + -0x1.ffff2p-2
src/math/special/fma.h:200: RN fmal(0x1.b0b041fbaca58p+0,-0x1.9d5f76d178e6p+0,0x1.0215c7bb84cf9p-6) want -0x1.5b52aec7ef4p+1 got 0x1.6be7a78p-7 ulperr 6135177709355008.000 = 0x1.5cbe96p+52 + 0x1.ffffa6p-2
src/math/special/fma.h:201: RN fmal(-0x1.377549d9a87f4p+0,-0x1.a13d4a03dd6d8p+0,0x1.f190388bc5cc6p-7) want 0x1.ff83bebbd6fe4p+0 got -0x1.e5a6a44p-9 ulperr -9015347881443328.000 = -0x1.003b4ap+53 + -0x1.ffffc4p-2
src/math/special/fma.h:202: RN fmal(0x1.6a726c0762ac8p-1,-0x1.d32f2d30e483cp+0,0x1.f953eb70fbde6p-7) want -0x1.46c61b3070332p+0 got 0x1.e556e47fffffep-11 ulperr 5752835425697792.000 = 0x1.4702c6p+52 + 0x1.fffffp-2
src/math/special/fma.h:203: RN fmal(0x1.94cf2509d40cp-1,0x1.721976af6dfbp+0,0x1.f51a456921c3ep-7) want 0x1.28880842acc6p+0 got -0x1.effe1ep-8 ulperr -5250719389057024.000 = -0x1.2a7806p+52 + -0x1.ffff84p-2
src/math/special/fma.h:204: RN fmal(0x1.b128eb0ad8728p-1,0x1.7682566a54268p+0,0x1.bd4122a074cafp-8) want 0x1.3e9469530e762p+0 got -0x1.6fe0c7cp-9 ulperr -5617154187591680.000 = -0x1.3f4c5ap+52 + -0x1.ffffd2p-2
src/math/special/fma.h:205: RN fmal(0x1.c4ae75976e35cp+0,-0x1.11c329dd1160cp+0,0x1.9993f5e13c9bdp-8) want -0x1.e27d925b07cf1p+0 got 0x1.198edf6p-9 ulperr 8497737213411328.000 = 0x1.e30a5ap+52 + 0x1.ffffdcp-2
src/math/special/fma.h:206: RN fmal(-0x1.85f81f88fa3c4p+0,-0x1.17648a494fa18p-1,0x1.37d305113b48p-10) want 0x1.aa367b7490e57p-1 got -0x1.7a59ecffffffep-12 ulperr -7501265072291840.000 = -0x1.aa65c6p+52 + -0x1.fffff4p-2
src/math/special/fma.h:207: RN fmal(-0x1.311f2b4319efcp+0,0x1.abbb5272e3d18p-1,0x1.35841b7bdbcfep-10) want -0x1.fd337f24b39ep-1 got 0x1.4cbc317ffffffp-11 ulperr 8963677814259712.000 = 0x1.fd86aep+52 + 0x1.ffffecp-2
src/math/special/fma.h:208: RN fmal(0x1.ab94369a9a0dp-1,0x1.9d1e0e0aa3bacp+0,0x1.0a63ca87cfa78p-11) want 0x1.592173ee296b6p+0 got -0x1.fd8043ffffff8p-13 ulperr -6072697209487360.000 = -0x1.59316p+52 + -0x1.fffffcp-2
src/math/special/fma.h:250: RZ fmal(0x1p+0,0x1p+0,-0x1p-1074) want 0x1.fffffffffffffp-1 got -0x1.fffffp-43 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p+0
src/math/special/fma.h:251: bad fp exception: RZ fmal(0x1p-1074,0x1p-1074,0x1.fffffffffffffp-1022)=0x1.fffffffffffffp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:251: RZ fmal(0x1p-1074,0x1p-1074,0x1.fffffffffffffp-1022) want 0x1.fffffffffffffp-1022 got 0x0p+0 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x0p+0
src/math/special/fma.h:252: bad fp exception: RZ fmal(0x1p-1074,-0x1p-1074,0x1.fffffffffffffp-1022)=0x1.ffffffffffffep-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:252: RZ fmal(0x1p-1074,-0x1p-1074,0x1.fffffffffffffp-1022) want 0x1.ffffffffffffep-1022 got -0x0p+0 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p+0
src/math/special/fma.h:253: bad fp exception: RZ fmal(0x1p-1074,-0x1p-1074,-0x1.fffffffffffffp-1022)=-0x1.fffffffffffffp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:253: RZ fmal(0x1p-1074,-0x1p-1074,-0x1.fffffffffffffp-1022) want -0x1.fffffffffffffp-1022 got -0x0p+0 ulperr 9007198717870080.000 = 0x1.fffffep+52 + 0x0p+0
src/math/special/fma.h:254: bad fp exception: RZ fmal(0x1p-1074,0x1p-1074,-0x1.fffffffffffffp-1022)=-0x1.ffffffffffffep-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:254: RZ fmal(0x1p-1074,0x1p-1074,-0x1.fffffffffffffp-1022) want -0x1.ffffffffffffep-1022 got 0x0p+0 ulperr 9007198717870080.000 = 0x1.fffffcp+52 + 0x1p+0
src/math/special/fma.h:255: RZ fmal(0x1p-1074,-0x1p-1074,0x1p-1074) want 0x0p+0 got -0x0p+0 ulperr inf = inf + -0x1p+0
src/math/special/fma.h:256: RZ fmal(0x1p-1074,-0x1p-1074,-0x1p-1074) want -0x1p-1074 got -0x0p+0 ulperr 1.000 = 0x1p+0 + 0x0p+0
src/math/special/fma.h:257: RZ fmal(0x1.0000000000001p+0,0x1p+0,0x1p+53) want 0x1p+53 got 0x1.000008p+12 ulperr -4503599358935040.000 = -0x1.fffffcp+51 + -0x1p-1
src/math/special/fma.h:258: RZ fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1p+53) want 0x1p+53 got 0x1.ffc02p+10 ulperr -4503599358935040.000 = -0x1.fffffcp+51 + -0x1p-1
src/math/special/fma.h:259: RZ fmal(0x1p+0,0x1.fffffffffffffp-1,0x1.fffffffffffffp+53) want 0x1.fffffffffffffp+53 got -0x1.ffffep+10 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:260: RZ fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffep+53) want 0x1.ffffffffffffep+53 got 0x1.ffc02p+10 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:261: RZ fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1p-52) want 0x1.0000000000001p+0 got -0x1.fffffp-42 ulperr -4503599627370496.000 = -0x1.fffffep+51 + -0x1p-1
src/math/special/fma.h:262: RZ fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.fffffffffffffp-53) want 0x1.0000000000001p+0 got -0x1.fffff8p-41 ulperr -4503599627370496.000 = -0x1.fffffep+51 + -0x1p-1
src/math/special/fma.h:263: RZ fmal(0x1.0000000000005p+0,0x1.ffffffffffffbp-1,0x1p-52) want 0x1.0000000000003p+0 got -0x1.8fffff8p-37 ulperr -4503599627370496.000 = -0x1.fffffep+51 + -0x1p-1
src/math/special/fma.h:264: RZ fmal(0x1.0000000000006p+0,0x1.ffffffffffffdp-1,0x1p-52) want 0x1.0000000000005p+0 got -0x1.1fffff8p-37 ulperr -4503599627370496.000 = -0x1.fffffep+51 + -0x1p-1
src/math/special/fma.h:283: RZ fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffbp-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffff4p+0 got 0x1.6800008p-37 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:284: RZ fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1p+0) want 0x1.ffffffffffff8p+0 got 0x1.b000008p-37 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:285: RZ fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1.ffffffffffffcp-1) want 0x1.ffffffffffff6p+0 got 0x1.b000008p-37 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:286: RZ fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1.ffffffffffff8p-1) want 0x1.ffffffffffff4p+0 got 0x1.b000008p-37 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:287: RZ fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff9p-1,0x1.ffffffffffffdp-1) want 0x1.ffffffffffff6p+0 got 0x1.f800008p-37 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:288: RZ fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff9p-1,0x1.ffffffffffff9p-1) want 0x1.ffffffffffff4p+0 got 0x1.f800008p-37 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:289: RZ fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff8p-1,0x1.ffffffffffffep-1) want 0x1.ffffffffffff6p+0 got 0x1.2000004p-36 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:290: RZ fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff8p-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffff4p+0 got 0x1.2000004p-36 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:291: RZ fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.fffffffffffffp-1) want 0x1.ffffffffffff6p+0 got 0x1.4400004p-36 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:292: RZ fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.ffffffffffffbp-1) want 0x1.ffffffffffff4p+0 got 0x1.4400004p-36 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:293: RZ fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffff2p+0 got 0x1.4400004p-36 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1p-1
src/math/special/fma.h:294: RZ fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffep-1) want 0x1.fffffffffffffp+0 got -0x1.fffffp-42 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:295: RZ fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffffdp+0 got -0x1.fffffp-42 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:296: RZ fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.fffffffffffffp-1) want 0x1.fffffffffffffp+0 got -0x1.fffff8p-41 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:297: RZ fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.ffffffffffffbp-1) want 0x1.ffffffffffffdp+0 got -0x1.fffff8p-41 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:298: RZ fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffffbp+0 got -0x1.fffff8p-41 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:299: RZ fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1p+0) want 0x1.fffffffffffffp+0 got -0x1.7ffffcp-40 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:300: RZ fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1.ffffffffffffcp-1) want 0x1.ffffffffffffdp+0 got -0x1.7ffffcp-40 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:301: RZ fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1.ffffffffffff8p-1) want 0x1.ffffffffffffbp+0 got -0x1.7ffffcp-40 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:302: RZ fmal(0x1.0000000000001p+0,0x1.ffffffffffffcp-1,0x1.ffffffffffffdp-1) want 0x1.ffffffffffffdp+0 got -0x1.fffffcp-40 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:303: RZ fmal(0x1.0000000000001p+0,0x1.ffffffffffffcp-1,0x1.ffffffffffff9p-1) want 0x1.ffffffffffffbp+0 got -0x1.fffffcp-40 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:304: RZ fmal(0x1.0000000000001p+0,0x1.ffffffffffffbp-1,0x1.ffffffffffffep-1) want 0x1.ffffffffffffdp+0 got -0x1.3ffffep-39 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:305: RZ fmal(0x1.0000000000001p+0,0x1.ffffffffffffbp-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffffbp+0 got -0x1.3ffffep-39 ulperr -9007199254740992.000 = -0x1.fffffep+52 + -0x1p-1
src/math/special/fma.h:306: RZ fmal(0x1.5872449b765b9p+0,0x1.c9acf91f8de2bp+0,0x1.9265607e4d168p+0) want 0x1.fd190c77c2a67p+1 got -0x1.b3fc37becffffp-4 ulperr -9195828849672192.000 = -0x1.055c74p+53 + -0x1.fffc98p-2
src/math/special/fma.h:307: RZ fmal(0x1.81d010b146d0ep+0,0x1.2d3c680dc9071p+0,0x1.a80b69538754cp+0) want 0x1.b7040b44973a6p+1 got 0x1.4d0cb20197p+1 ulperr -1864177136173056.000 = -0x1.a7dd62p+50 + -0x1.0029a2p-1
src/math/special/fma.h:308: RZ fmal(0x1.6a44f2252b6a2p+0,0x1.da452a378b832p+0,0x1.1fe2ce329104p+0) want 0x1.df842b6f48b12p+1 got 0x1.12e95c1ba4p+0 ulperr -6017591705337856.000 = -0x1.560f7ap+52 + -0x1.00112ep-1
src/math/special/fma.h:309: RZ fmal(0x1.096b1d26463eep+0,0x1.d846d3e34333p+0,0x1.721e3480922b8p+0) want 0x1.ade2909c0269fp+1 got -0x1.a139d9b2bffffp-1 ulperr -9397595675820032.000 = -0x1.0b188p+53 + -0x1.ffe5ecp-2
src/math/special/fma.h:310: RZ fmal(0x1.99bd3434c454bp+0,0x1.03cb8e4115bdep+0,0x1.109f107188b08p+0) want 0x1.5837a47d37faep+1 got 0x1.cfdec0c00ap+0 ulperr -1975290892910592.000 = -0x1.c1210ep+50 + -0x1.001cfep-1
src/math/special/fma.h:311: RZ fmal(0x1.ba930a0a78ed2p+0,0x1.8c24e8d67f636p+0,0x1.ac49dbfbf8affp+0) want 0x1.164947ae6a5d9p+2 got -0x1.33e3b04ecffffp-2 ulperr -5234191281160192.000 = -0x1.29878p+52 + -0x1.fffb3p-2
src/math/special/fma.h:312: RZ fmal(0x1.be224ad773191p+0,0x1.d96b77169731fp+0,0x1.662cfb75d8edep+0) want 0x1.27cd67e720f78p+2 got 0x1.e4711611c78p+1 ulperr -942615600037888.000 = -0x1.aca6e4p+49 + -0x1.001e48p-1
src/math/special/fma.h:313: RZ fmal(0x1.59e7a1b0bdb3cp+0,0x1.2decba4d46421p+0,0x1.88f4062e96df5p+0) want 0x1.90749e4794f79p+1 got -0x1.b3c84a9a87fffp-1 ulperr -8961479327875072.000 = -0x1.fd66aep+52 + -0x1.ffe4c4p-2
src/math/special/fma.h:314: RZ fmal(0x1.22edf4b4da9a7p+0,0x1.dfa8d65f506cdp+0,0x1.2799208da2fbap+0) want 0x1.a45a1e99ed7a8p+1 got 0x1.a0bdfb8976p-1 ulperr -5562059420860416.000 = -0x1.3c2a9cp+52 + -0x1.000d06p-1
src/math/special/fma.h:315: RZ fmal(0x1.ad5b991a2a279p+0,0x1.f02fd26706024p+0,0x1.831cdd5c8797cp+0) want 0x1.30d3a2ac90a6p+2 got 0x1.c7c15e1c82p+1 ulperr -1353701616779264.000 = -0x1.33cbccp+50 + -0x1.001c7cp-1
src/math/special/fma.h:316: RZ fmal(0x1.531f9620e764ap+0,0x1.cad61b54d4425p+0,0x1.df817cae8a9afp+0) want 0x1.0fd4e7f8671dcp+2 got 0x1.8e74e26059p+1 ulperr -1277252004216832.000 = -0x1.2269d8p+50 + -0x1.0018e8p-1
src/math/special/fma.h:317: RZ fmal(0x1.629a5ad79494fp+0,0x1.049e58693f4c4p+0,0x1.45b0109e4d00cp+0) want 0x1.5758154e14965p+1 got -0x1.01173c9c1ffffp-3 ulperr -6322846842224640.000 = -0x1.676986p+52 + -0x1.fffbfcp-2
src/math/special/fma.h:318: RZ fmal(0x1.2f52b53f9240ap+0,0x1.1d5c686dbb0dap+0,0x1.6da3e392a4fd4p+0) want 0x1.5fe03a6795912p+1 got 0x1.5bdb7d9084p+0 ulperr -3130480060792832.000 = -0x1.63e4f4p+51 + -0x1.0015bep-1
src/math/special/fma.h:319: RZ fmal(0x1.058667552b49ep+0,0x1.23307bacc1c42p+0,0x1.5b059b47cd8f5p+0) want 0x1.423f752486d13p+1 got -0x1.4bfb042743fffp+0 ulperr -8589175993401344.000 = -0x1.e83cf4p+52 + -0x1.ffd68p-2
src/math/special/fma.h:320: RZ fmal(0x1.a717d95337ed8p+0,0x1.2b1c37846aaadp+0,0x1.be65672f885b1p+0) want 0x1.d65e72303c075p+1 got -0x1.7e0573ec03fffp+1 ulperr -14995406941323264.000 = -0x1.aa31fp+53 + -0x1.ffa07ep-2
src/math/special/fma.h:321: RZ fmal(0x1.deb79287b3d32p+0,0x1.62776b829babap+0,0x1.67daf18bd2eb1p+0) want 0x1.ff5a0d45c69d6p+1 got 0x1.ad881652ap-3 ulperr -8523519902089216.000 = -0x1.e48188p+52 + -0x1.00035cp-1
src/math/special/fma.h:322: RZ fmal(0x1.fbf12d3a6de91p+0,0x1.879fe6124f11p+0,0x1.9f3f1247a8641p+0) want 0x1.2a126c6980018p+2 got 0x1.45e3d61a84p+2 ulperr 489379747332096.000 = 0x1.bd169ap+48 + -0x1.0028bcp-1
src/math/special/fma.h:323: RZ fmal(0x1.c589628460e01p+0,0x1.e1bec1c797533p+0,0x1.349f30cdb84bbp+0) want 0x1.2286118b6f6e5p+2 got -0x1.8e9d95e0667ffp+1 ulperr -8617206560587776.000 = -0x1.e9d4dap+52 + -0x1.ffce2cp-2
src/math/special/fma.h:324: RZ fmal(0x1.46fd6c2c924ebp+0,0x1.65e2f02e730a1p+0,0x1.37739d2751098p+0) want 0x1.804a71c1f1272p+1 got 0x1.855d7947cbp+0 ulperr -3335623268106240.000 = -0x1.7b3768p+51 + -0x1.001856p-1
src/math/special/fma.h:325: RZ fmal(0x1.f99e595ae11fdp+0,0x1.bd33d9a1d81bp+0,0x1.932a2a2e244c1p+0) want 0x1.409e34f8f2f89p+2 got -0x1.7a49668943fffp+2 ulperr -12295260860317696.000 = -0x1.5d73cap+53 + -0x1.ffa16ep-2
src/math/special/fma.h:326: RZ fmal(0x1.59ea1e56bfe55p+0,0x1.6f46b7d412a44p+0,0x1.80f2bc9a32cc3p+0) want 0x1.b89c7640e32ffp+1 got -0x1.ca180bfb5ffffp-3 ulperr -8254993178034176.000 = -0x1.d53df4p+52 + -0x1.fff8d8p-2
src/math/special/fma.h:327: RZ fmal(0x1.61490fcb44129p+0,0x1.0038ec4fc35c2p+0,0x1.df7436ed7a7b7p+0) want 0x1.a085ea68d05cfp+1 got -0x1.5ed2c690f6fffp+1 ulperr -13499301254660096.000 = -0x1.7fac56p+53 + -0x1.ffa84cp-2
src/math/special/fma.h:328: RZ fmal(0x1.d41b98788502bp+0,0x1.1a7b77843aca6p+0,0x1.05be891837d36p+0) want 0x1.8523596ceced9p+1 got -0x1.48c8fc403bfffp-1 ulperr -8291801584631808.000 = -0x1.d75596p+52 + -0x1.ffeb74p-2
src/math/special/fma.h:329: RZ fmal(0x1.3153cf6f69af9p+0,0x1.aaa947e38e57ap+0,0x1.8519f9b590645p+0) want 0x1.c0fcab7b46368p+1 got 0x1.25f4f4bd5p-3 ulperr -7575453653008384.000 = -0x1.ae9d5ap+52 + -0x1.00024cp-1
src/math/special/fma.h:330: RZ fmal(0x1.c25a1f73581aap+0,0x1.0a51ffca372ap+0,0x1.0c77e3ebac5f3p+0) want 0x1.707ce48c7d72dp+1 got -0x1.3261c9a0dffffp+1 ulperr -11872435288670208.000 = -0x1.516f54p+53 + -0x1.ffb368p-2
src/math/special/fma.h:331: RZ fmal(0x1.829c2cde44b7p+0,0x1.f692e86d8cb36p+0,0x1.455e72d264bfp+0) want 0x1.0f16a3b8b3f97p+2 got -0x1.684386465ffffp+0 ulperr -6353494655107072.000 = -0x1.692782p+52 + -0x1.ffe97cp-2
src/math/special/fma.h:332: RZ fmal(0x1.94729588dcc69p+0,0x1.c3bb794c6edf8p+0,0x1.9da4e94d262d2p+0) want 0x1.19d4bd84d9fd2p+2 got 0x1.e1b9a2757p-1 ulperr -3898698849320960.000 = -0x1.bb3b1p+51 + -0x1.000786p-1
src/math/special/fma.h:333: RZ fmal(0x1.e6a5e7e39c3d5p+0,0x1.1b69af2bdd978p+0,0x1.e7ef1eafa119cp+0) want 0x1.00ac5b44c9f31p+2 got -0x1.6777d5d393fffp+1 ulperr -7677358731427840.000 = -0x1.b46844p+52 + -0x1.ffd312p-2
src/math/special/fma.h:334: bad fp exception: RZ fmal(0x1.bc9ba1320700cp-1022,0x1.981f2e1a451a8p-2,0x1.046144efc0ceap-1022)=0x1.b594d0e4368efp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:334: RZ fmal(0x1.bc9ba1320700cp-1022,0x1.981f2e1a451a8p-2,0x1.046144efc0ceap-1022) want 0x1.b594d0e4368efp-1022 got -0x1.9dedc9560fffep-1023 ulperr -11338968138252288.000 = -0x1.4245d8p+53 + -0x1.ffcc42p-2
src/math/special/fma.h:335: RZ fmal(0x1.022db53c98d14p-1022,0x1.21157eef74848p-2,0x1.2f880432b1bc1p-1022) want 0x1.786ad60a02b3dp-1022 got -0x1.150255ac97fffp-1022 ulperr -11495198647386112.000 = -0x1.46b692p+53 + -0x1.ffbacp-2
src/math/special/fma.h:336: bad fp exception: RZ fmal(0x1.805a491fa9597p-1022,0x1.e0f49d782ff87p-2,0x1.172a62346206p-1022)=0x1.cbb085199a3f5p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:336: RZ fmal(0x1.805a491fa9597p-1022,0x1.e0f49d782ff87p-2,0x1.172a62346206p-1022) want 0x1.cbb085199a3f5p-1022 got -0x1.6ed115da2f7fep-1023 ulperr -11313497908445184.000 = -0x1.418c86p+53 + -0x1.ffd226p-2
src/math/special/fma.h:337: RZ fmal(0x1.adbc3a9d816dep-1022,0x1.e039d4431e3cdp-2,0x1.93ceef6fe18a2p-1022) want 0x1.2eabb7dc0e2fp-1021 got 0x1.ef7b6794e3p-1023 ulperr -3145487213395968.000 = -0x1.6599b8p+51 + -0x1.000f7cp-1
src/math/special/fma.h:338: RZ fmal(0x1.645aa5c2df3afp-1022,0x1.649edfcad854fp-2,0x1.8b43e0bbaeb01p-1022) want 0x1.03af571d2b504p-1021 got 0x1.0ce86163c02p-1021 ulperr 162249436037120.000 = 0x1.272148p+47 + -0x1.00219ep-1
src/math/special/fma.h:339: bad fp exception: RZ fmal(0x1.133474a2c0fb1p-1022,0x1.72442bcbfa01dp-2,0x1.4a1a21971c5dbp-1022)=0x1.ad9ce7fcefa3fp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:339: RZ fmal(0x1.133474a2c0fb1p-1022,0x1.72442bcbfa01dp-2,0x1.4a1a21971c5dbp-1022) want 0x1.ad9ce7fcefa3fp-1022 got -0x1.12bc4931e5ff8p-1025 ulperr -8161979755659264.000 = -0x1.cff46ep+52 + -0x1.fff76ap-2
src/math/special/fma.h:340: RZ fmal(0x1.8ee3feb00c3e7p-1022,0x1.53bd9353313bcp-2,0x1.5501b57dc3b6fp-1022) want 0x1.d9598906f0bb3p-1022 got -0x1.4660b83f56fffp-1022 ulperr -14068955652030464.000 = -0x1.8fdd1ep+53 + -0x1.ffae68p-2
src/math/special/fma.h:341: RZ fmal(0x1.161225cfa61e2p-1022,0x1.b6dd69a0af5bp-2,0x1.924ffc3ead5c3p-1022) want 0x1.04be6fc25367bp-1021 got -0x1.f3ab56daa7fffp-1022 ulperr -8982192344530944.000 = -0x1.fe9418p+52 + -0x1.ffc18ap-2
src/math/special/fma.h:342: bad fp exception: RZ fmal(0x1.820f7faf219afp-1022,0x1.06717ae771f6dp-2,0x1.0dc5035f5e2afp-1022)=0x1.70b6c3169f043p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:342: RZ fmal(0x1.820f7faf219afp-1022,0x1.06717ae771f6dp-2,0x1.0dc5035f5e2afp-1022) want 0x1.70b6c3169f043p-1022 got -0x1.a779baefbe7fep-1023 ulperr -10211413595258880.000 = -0x1.2239cep+53 + -0x1.ffcb1p-2
src/math/special/fma.h:343: RZ fmal(0x1.ce0e2ea55040ep-1022,0x1.ce5a55fa3828dp-2,0x1.f2f444d50ce59p-1022) want 0x1.61ca36f5a8a79p-1021 got -0x1.173f0cea127ffp-1022 ulperr -8680213730820096.000 = -0x1.ed69bap+52 + -0x1.ffdd18p-2
src/math/special/fma.h:344: bad fp exception: RZ fmal(0x1.a7a271c67cdcfp-1022,0x1.1e979090e218p-2,0x1.b1f10b6e2177ap-1022)=0x1.1440cf1c105ebp-1021, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:344: RZ fmal(0x1.a7a271c67cdcfp-1022,0x1.1e979090e218p-2,0x1.b1f10b6e2177ap-1022) want 0x1.1440cf1c105ebp-1021 got -0x1.f88fda5ffffp-1030 ulperr -4877233327964160.000 = -0x1.153d14p+52 + -0x1.ffffcp-2
src/math/special/fma.h:345: bad fp exception: RZ fmal(0x1.76df065829dc6p-1022,0x1.fb22ab1b86b8bp-2,0x1.6966267f317cp-1022)=0x1.1186e1f77012dp-1021, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:345: RZ fmal(0x1.76df065829dc6p-1022,0x1.fb22ab1b86b8bp-2,0x1.6966267f317cp-1022) want 0x1.1186e1f77012dp-1021 got -0x1.2ffba526fbff8p-1025 ulperr -5146168610783232.000 = -0x1.24869ap+52 + -0x1.fffb4p-2
src/math/special/fma.h:346: bad fp exception: RZ fmal(0x1.8b004a28b70dbp-1022,0x1.48e5805a8b453p-2,0x1.0ea791f716557p-1022)=0x1.8d86310bad175p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:346: RZ fmal(0x1.8b004a28b70dbp-1022,0x1.48e5805a8b453p-2,0x1.0ea791f716557p-1022) want 0x1.8d86310bad175p-1022 got -0x1.1b755c367f7fep-1023 ulperr -9486645380251648.000 = -0x1.0da06cp+53 + -0x1.ffdc92p-2
src/math/special/fma.h:347: RZ fmal(0x1.fb3391a4b1d23p-1022,0x1.4d8705b057caep-2,0x1.d026cb6dae73bp-1022) want 0x1.3aad18b424c67p-1021 got -0x1.0a1784c7c6bffp-1021 ulperr -10216978799132672.000 = -0x1.22624cp+53 + -0x1.ffbd7ap-2
src/math/special/fma.h:348: bad fp exception: RZ fmal(0x1.a5ba39730e197p-1022,0x1.794df89b1cc49p-2,0x1.24a0a388d0b6bp-1022)=0x1.c0048fd33a417p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:348: RZ fmal(0x1.a5ba39730e197p-1022,0x1.794df89b1cc49p-2,0x1.24a0a388d0b6bp-1022) want 0x1.c0048fd33a417p-1022 got -0x1.d026e457f0ffcp-1024 ulperr -9922974329077760.000 = -0x1.1a0722p+53 + -0x1.ffe2fep-2
src/math/special/fma.h:349: RZ fmal(0x1.aa9eff070281cp-1022,0x1.fab05661b48ebp-2,0x1.cbe2af6c69c6ep-1022) want 0x1.4f7ddbe122764p-1021 got 0x1.9e529858dap-1023 ulperr -4079820841418752.000 = -0x1.cfd268p+51 + -0x1.000cf2p-1
src/math/special/fma.h:350: bad fp exception: RZ fmal(0x1.758bbff0ec4bap-1022,0x1.a4a197f3fa424p-2,0x1.47761e8d142ddp-1022)=0x1.e0e762ee2e7c5p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:350: RZ fmal(0x1.758bbff0ec4bap-1022,0x1.a4a197f3fa424p-2,0x1.47761e8d142ddp-1022) want 0x1.e0e762ee2e7c5p-1022 got -0x1.e2fe0f96ebffep-1023 ulperr -12708595627982848.000 = -0x1.693332p+53 + -0x1.ffc3ap-2
src/math/special/fma.h:351: RZ fmal(0x1.4dab43918a9a8p-1022,0x1.ed667442b4751p-2,0x1.3f25f82e02e3ep-1022) want 0x1.dfec0ee732dcap-1022 got 0x1.6a41c4d18ap-1022 ulperr -2069987942465536.000 = -0x1.d6a926p+50 + -0x1.002d48p-1
src/math/special/fma.h:352: RZ fmal(0x1.7943735951931p-1022,0x1.fa6a357c5c9ddp-2,0x1.0bed44b0b71b4p-1022) want 0x1.c6803a6059abep-1022 got 0x1.0e970cce134p-1022 ulperr -3235393763803136.000 = -0x1.6fd258p+51 + -0x1.0021d2p-1
src/math/special/fma.h:353: bad fp exception: RZ fmal(0x1.66c26bc29a5e8p-1022,0x1.3faed079f761ap-2,0x1.163ff906dd651p-1022)=0x1.8640492c45959p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:353: RZ fmal(0x1.66c26bc29a5e8p-1022,0x1.3faed079f761ap-2,0x1.163ff906dd651p-1022) want 0x1.8640492c45959p-1022 got -0x1.3271a1b37ffep-1027 ulperr -7033839486500864.000 = -0x1.8fd3d4p+52 + -0x1.fffd9cp-2
src/math/special/fma.h:354: RZ fmal(0x1.f52172c56bdf5p-1022,0x1.672b2de422734p-2,0x1.7bc5d708e5a34p-1022) want 0x1.15c5b95145cc6p-1021 got 0x1.3cf4f71d188p-1021 ulperr 689341647028224.000 = 0x1.3979eep+49 + -0x1.00279ep-1
src/math/special/fma.h:355: bad fp exception: RZ fmal(0x1.2f94e89aa7558p-1022,0x1.dfa6d30835f5ep-2,0x1.59c6b0d504cf9p-1022)=0x1.e7fa0dd76fbefp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:355: RZ fmal(0x1.2f94e89aa7558p-1022,0x1.dfa6d30835f5ep-2,0x1.59c6b0d504cf9p-1022) want 0x1.e7fa0dd76fbefp-1022 got -0x1.60a5d541afffcp-1024 ulperr -10135538703007744.000 = -0x1.2011bep+53 + -0x1.ffe9f6p-2
src/math/special/fma.h:356: bad fp exception: RZ fmal(0x1.6159897ae533cp-1022,0x1.f3b8892e3a3c8p-2,0x1.09ca702b7759p-1022)=0x1.b63a7f56fce1fp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:356: RZ fmal(0x1.6159897ae533cp-1022,0x1.f3b8892e3a3c8p-2,0x1.09ca702b7759p-1022) want 0x1.b63a7f56fce1fp-1022 got -0x1.497a9bc51fffcp-1024 ulperr -9158460486713344.000 = -0x1.044c9p+53 + -0x1.ffeb68p-2
src/math/special/fma.h:357: RZ fmal(0x1.f73d5f4e81fd8p-1022,0x1.7ccff2642124ap-2,0x1.e7d836a0c8308p-1022) want 0x1.517f1763126d3p-1021 got -0x1.06939f3371fffp-1021 ulperr -10556596895612928.000 = -0x1.2c0958p+53 + -0x1.ffbe5cp-2
src/math/special/fma.h:358: RZ fmal(0x1.b4328925969fbp-1022,0x1.8fa02832a22d5p-2,0x1.2084598e2f8c6p-1022) want 0x1.cabf43838dc51p-1022 got -0x1.7c61d65f0a3ffp-1022 ulperr -14762118276448256.000 = -0x1.a3908ap+53 + -0x1.ffa0e8p-2
src/math/special/fma.h:359: RZ fmal(0x1.66ee60a92676fp-1022,0x1.eddd2e7681ce4p-2,0x1.b81d57daeb3a7p-1022) want 0x1.329c918ffb682p-1021 got 0x1.cd379885b8p-1025 ulperr -4886854591578112.000 = -0x1.15c916p+52 + -0x1.00039ap-1
src/math/special/fma.h:360: RZ fmal(0x1.ff2737585895dp-1022,0x1.fb4bf3828ae4ap-2,0x1.4a866847740fp-1022) want 0x1.23e07e4dbbeaap-1021 got 0x1.46c53f7571p-1023 ulperr -3697601232764928.000 = -0x1.a45e5ap+51 + -0x1.000a36p-1
src/math/special/fma.h:361: RZ fmal(0x1.5e2008d269a86p-1022,0x1.507bbbe4d78eep-2,0x1.6220c6f83f636p-1022) want 0x1.d52d9874f1c74p-1022 got 0x1.eda0503c4ap-1023 ulperr -3911886277967872.000 = -0x1.bcbadep+51 + -0x1.001edap-1
src/math/special/fma.h:362: bad fp exception: RZ fmal(0x1.ce7e2e5812d86p-1022,0x1.0e6689d092e5fp-2,0x1.1e43fd55c3458p-1022)=0x1.9864925e2fb0fp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:362: RZ fmal(0x1.ce7e2e5812d86p-1022,0x1.0e6689d092e5fp-2,0x1.1e43fd55c3458p-1022) want 0x1.9864925e2fb0fp-1022 got -0x1.53ae580e8bff8p-1025 ulperr -7931489261977600.000 = -0x1.c2da5ap+52 + -0x1.fff562p-2
src/math/special/fma.h:363: RZ fmal(0x1.7b353b81e793dp-1022,0x1.82b426f874c6dp-2,0x1.d92b19d21fd5cp-1022) want 0x1.342fb0c544a78p-1021 got 0x1.2af4c8aebe4p-1022 ulperr -2792024021401600.000 = -0x1.3d6a96p+51 + -0x1.0012bp-1
src/math/special/fma.h:364: RZ fmal(0x1.5be667823370ap-1022,0x1.a8a99b163869bp-2,0x1.95456b68dc3bcp-1022) want 0x1.12c638de03c7p-1021 got 0x1.49af7fc787p-1023 ulperr -3383908095754240.000 = -0x1.80b4aep+51 + -0x1.000a4ep-1
src/math/special/fma.h:365: RZ fmal(0x1.17b0fc6c850e5p-1022,0x1.d1d0a4853c315p-2,0x1.36b79f7c0c24p-1022) want 0x1.b5f2baff5635cp-1022 got 0x1.6a19304724p-1026 ulperr -7306333686595584.000 = -0x1.9f5124p+52 + -0x1.0002d4p-1
src/math/special/fma.h:366: RZ fmal(0x1.bd97819bacfd8p-1022,0x1.2c25f267ba4eep-2,0x1.804b5204a3f3ap-1022) want 0x1.01739c190fd96p-1021 got 0x1.b9e166e6b4p-1022 ulperr -642314640818176.000 = -0x1.241742p+49 + -0x1.001b9ep-1
src/math/special/fma.h:367: RZ fmal(0x1.596577053873dp-1022,0x1.3562ab2d29949p-2,0x1.b3f1ee75db6e7p-1022) want 0x1.0e268a498009ap-1021 got 0x1.e8136bc1594p-1022 ulperr -459377991483392.000 = -0x1.a1cd44p+48 + -0x1.001e82p-1
src/math/special/fma.h:368: RZ fmal(0x1.3c7a68cf0f7b3p-1022,0x1.9a55c15b167bdp-2,0x1.7635b7b163c07p-1022) want 0x1.f5073b93b7b8p-1022 got 0x1.75f9a972138p-1023 ulperr -5524660993130496.000 = -0x1.3a0a64p+52 + -0x1.00176p-1
src/math/special/fma.h:369: RZ fmal(0x1.5825164bc4068p-1022,0x1.dcbb6e5ff3245p-2,0x1.52fc3be0e84dap-1022) want 0x1.f334771c2dcfap-1022 got 0x1.2b86ba6b02p-1022 ulperr -3512783958179840.000 = -0x1.8f5b76p+51 + -0x1.00257p-1
src/math/special/fma.h:370: RZ fmal(0x1.139ea77b760ecp+1022,0x1.9b25f2fd017eap+2,-0x1.bc16788922b6fp+1023) want 0x1.b93aac527380ep+1023 got 0x1.c3ec4f2eep+1022 ulperr -3787028357447680.000 = -0x1.ae8906p+51 + -0x1.001c3ep-1
src/math/special/fma.h:371: RZ fmal(0x1.0e6f9c1657d7cp+1022,0x1.4d5c6b55ab5f1p+2,-0x1.e027dd5742e2cp+1023) want 0x1.c0538372b4bbep+1022 got 0x1.54dede6dep+1021 ulperr -4888708943708160.000 = -0x1.15e412p+52 + -0x1.00154ep-1
src/math/special/fma.h:372: RZ fmal(0x1.1182524fa411cp+1022,0x1.a3dba56842d19p+2,-0x1.c1ad59474d71fp+1023) want 0x1.bf78969300a76p+1023 got 0x1.8651491efp+1022 ulperr -4438724683235328.000 = -0x1.f89fe2p+51 + -0x1.001866p-1
src/math/special/fma.h:373: RZ fmal(0x1.1cbf4fb8ec82p+1022,0x1.5e32019a84fbbp+2,-0x1.985af08f32edep+1023) want 0x1.72af6bbad4a28p+1023 got 0x1.a68c1c1ecp+1023 ulperr 912367084896256.000 = 0x1.9ee582p+49 + -0x1.0034d2p-1
src/math/special/fma.h:374: RZ fmal(0x1.311e25c6db346p+1022,0x1.4e30db6c4b51dp+2,-0x1.7681f7a9786a7p+1023) want 0x1.a61d29434fc13p+1023 got -0x1.791d1988fffffp+1017 ulperr -7529566222417920.000 = -0x1.ac019ap+52 + -0x1.fffe86p-2
src/math/special/fma.h:375: RZ fmal(0x1.1201cf577052fp+1022,0x1.59730b2db7a16p+2,-0x1.56f1a64a078d5p+1023) want 0x1.8c8d801df34d9p+1023 got -0x1.3048609fd7fffp+1022 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1.ffd9f6p-2
src/math/special/fma.h:376: RZ fmal(0x1.3e52335b76e81p+1022,0x1.4dbd56f857479p+2,-0x1.509340c11bd2ep+1023) want 0x1.ed6576837f653p+1023 got -0x1.e498d5441bfffp+1022 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1.ffc36cp-2
src/math/special/fma.h:377: RZ fmal(0x1.18566b4f843cbp+1022,0x1.444fba10eaf29p+2,-0x1.f927beae57f0ap+1023) want 0x1.9a433b9796559p+1022 got 0x1.a048d2820cp+1022 ulperr 105937222238208.000 = 0x1.8165bap+46 + -0x1.ff6812p-2
src/math/special/fma.h:378: RZ fmal(0x1.3fbe544fe1be8p+1022,0x1.2d2a5fda03639p+2,-0x1.007407dbfd03cp+1023) want 0x1.efdb644b613e5p+1023 got -0x1.e14223655ffffp+1022 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1.ffc3d8p-2
src/math/special/fma.h:379: RZ fmal(0x1.263a0d3bc2e4p+1022,0x1.4cc198adbc651p+2,-0x1.734b1c1f7fdb8p+1023) want 0x1.899878afc0fa2p+1023 got 0x1.a13620448p+1023 ulperr 415454199808000.000 = 0x1.79da78p+48 + -0x1.003426p-1
src/math/special/fma.h:380: RZ fmal(0x1.5bf4aec8efc8ep+1022,0x1.555f0341516c9p+2,-0x1.c706408acd14cp+1023) want 0x1.d8f5e18b868bcp+1023 got 0x1.3e5679fdf8p+1022 ulperr -5520279589617664.000 = -0x1.39caa2p+52 + -0x1.0013e6p-1
src/math/special/fma.h:381: RZ fmal(0x1.1e57f1af78279p+1022,0x1.34bc0c7f082b3p+2,-0x1.497b92c1365edp+1023) want 0x1.692cb7ec68a93p+1023 got -0x1.c0a1f29b27fffp+1021 ulperr -8326959113175040.000 = -0x1.d95532p+52 + -0x1.ffe3f6p-2
src/math/special/fma.h:382: RZ fmal(0x1.1d9824cd73511p+1022,0x1.1d557ddfe47ffp+2,-0x1.556cdb1d20a72p+1023) want 0x1.2736a6b6e35f2p+1023 got 0x1.bc6f9c9778p+1021 ulperr -3238800209739776.000 = -0x1.70357cp+51 + -0x1.000de4p-1
src/math/special/fma.h:383: RZ fmal(0x1.1ff85a24aff31p+1022,0x1.39ab374b2680dp+2,-0x1.35e6b07b651b8p+1023) want 0x1.8bc7ce208708p+1023 got 0x1.84b319bafap+1023 ulperr -124568110891008.000 = -0x1.c52d16p+46 + -0x1.003096p-1
src/math/special/fma.h:384: RZ fmal(0x1.0449b3965227ep+1022,0x1.4430d4441f9f2p+2,-0x1.a6966c96307ep+1023) want 0x1.d94eda8c81771p+1022 got -0x1.992ed6b71ffffp+1021 ulperr -11925733685329920.000 = -0x1.52f32p+53 + -0x1.ffccdap-2
src/math/special/fma.h:385: RZ fmal(0x1.3c91fa00fd0c7p+1022,0x1.1b6661c0b0303p+2,-0x1.f1f2846b64483p+1023) want 0x1.95eae0d2644d3p+1022 got 0x1.9985d8eaap+1019 ulperr -6240425346072576.000 = -0x1.62ba22p+52 + -0x1.ff0cccp-2
src/math/special/fma.h:386: RZ fmal(0x1.0979b36d46534p+1022,0x1.12fa205f41f7fp+2,-0x1.a83ecf4544a63p+1023) want 0x1.2420f34e2aa3cp+1022 got -0x1.335a0fe67ffffp+1019 ulperr -5815056080044032.000 = -0x1.4a8c32p+52 + -0x1.007b32p-1
src/math/special/fma.h:387: RZ fmal(0x1.4c89df582a599p+1022,0x1.55f3dc473ea8fp+2,-0x1.e35037292ddfp+1023) want 0x1.95109fdbc3771p+1023 got -0x1.afa3b29623fffp+1022 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1.ffca0cp-2
src/math/special/fma.h:388: RZ fmal(0x1.35ee0a669c4fbp+1022,0x1.2263cb63f386ap+2,-0x1.449218ae35ac7p+1023) want 0x1.7a8ed977d817ap+1023 got 0x1.47da9ddfb8p+1022 ulperr -3775828693352448.000 = -0x1.ad4312p+51 + -0x1.00147ep-1
src/math/special/fma.h:389: RZ fmal(0x1.117cc860f61bcp+1022,0x1.440985b25d994p+2,-0x1.d7a7d82000449p+1023) want 0x1.b960b7088e74fp+1022 got 0x1.ddfba372cp+1022 ulperr 643964914892800.000 = 0x1.24d762p+49 + -0x1.ff777ep-2
src/math/special/fma.h:390: RZ fmal(0x1.1e78a37be320fp+1022,0x1.0db0fce62287bp+2,-0x1.376337da5eb53p+1023) want 0x1.24326b9956dfbp+1023 got -0x1.d2881b3595fffp+1023 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1.ff8b5ep-2
src/math/special/fma.h:391: RZ fmal(0x1.0c79b5c8331c2p+1022,0x1.0aba6ea746b5p+2,-0x1.c86f1fcaf0741p+1023) want 0x1.9c135bb2cff84p+1021 got -0x1.cc298babfffffp+1019 ulperr -9273125376098304.000 = -0x1.078edcp+53 + -0x1.00f19ep-1
src/math/special/fma.h:392: RZ fmal(0x1.556c4c072f272p+1022,0x1.347758d7d4eb5p+2,-0x1.c6fe4f24b248dp+1023) want 0x1.6fcc9f756df6dp+1023 got -0x1.f6f4c76597fffp+1022 ulperr -9007198717870080.000 = -0x1.fffffcp+52 + -0x1.ffc122p-2
src/math/special/fma.h:393: RZ fmal(-0x1.e8349b891b2fp-1,0x1.4a6dec9b72578p-1,0x1.3b6151ce809ddp-1) want 0x1.3a62fe330b355p-11 got -0x1.d97120fffffffp-11 ulperr -13859626462216192.000 = -0x1.89ea0cp+53 + -0x1.ff89a4p-2
src/math/special/fma.h:394: RZ fmal(0x1.2996632ac7d74p-1,-0x1.bb3c58b654d94p-1,0x1.01a6660e64a31p-1) want 0x1.ed045bb956a8ep-15 got -0x1.070d61fffffffp-15 ulperr -13300911346548736.000 = -0x1.7a08dcp+53 + -0x1.eabe3cp-2
src/math/special/fma.h:395: RZ fmal(-0x1.c602e894c1df8p-1,0x1.a1c980e7d3f94p-1,0x1.7271244b43386p-1) want -0x1.ba251fe026e5bp-15 got -0x1.af2b6cp-15 ulperr 193081294979072.000 = 0x1.5f367ap+47 + 0x1.fa6bcap-2
src/math/special/fma.h:396: RZ fmal(-0x1.c84baf47e85cp-1,0x1.770b5149ef2ep-1,0x1.4d80f139320bap-1) want -0x1.79277433b9e23p-10 got 0x1.d4b6effffffffp-11 ulperr 10757822555881472.000 = 0x1.31c174p+53 + 0x1.ffc56ap-2
src/math/special/fma.h:397: RZ fmal(-0x1.36e667dcf9c6p-1,0x1.2591f82556b88p-1,0x1.2452a0f795f95p-1) want 0x1.c83c8e63c159fp-3 got -0x1.221ccbfffffffp-12 ulperr -8036166204915712.000 = -0x1.c8cd9ap+52 + -0x1.ffffdcp-2
src/math/special/fma.h:398: RZ fmal(0x1.88b2cede61e4cp-1,-0x1.71dcab5ad9e9p-3,0x1.32b27fea2ae97p-3) want 0x1.70461909b25e2p-7 got -0x1.affe57fffffffp-17 ulperr -6486162973655040.000 = -0x1.70b216p+52 + -0x1.ffffe6p-2
src/math/special/fma.h:399: RZ fmal(0x1.8d1e44002c98p-3,-0x1.af9fdfb347834p-1,0x1.e280942fb4146p-4) want -0x1.761ac23896dfdp-5 got 0x1.0bec47fffffffp-14 ulperr 6590522089013248.000 = 0x1.76a0b6p+52 + 0x1.ffffdep-2
src/math/special/fma.h:400: RZ fmal(0x1.236e8cb9492c8p-1,-0x1.d37443a57f1c4p-1,0x1.ca10df801aabcp-4) want -0x1.a1a2cdf0138f9p-2 got 0x1.f090cab6fffffp-5 ulperr 8439088361242624.000 = 0x1.dfb4e4p+52 + 0x1.fff07cp-2
src/math/special/fma.h:401: RZ fmal(-0x1.6ad943e610fb8p-1,-0x1.cef92a7bb18bcp-1,0x1.f28587d8fb0ep-4) want 0x1.866b5204b9aecp-1 got -0x1.8c9eb9a6fffffp-5 ulperr -7304415446827008.000 = -0x1.9f353ap+52 + -0x1.fff9cep-2
src/math/special/fma.h:402: RZ fmal(-0x1.60a8569a5d894p-1,-0x1.ca07e29dd171cp-1,0x1.b6c475ace09ecp-4) want 0x1.72549291e2f7ap-1 got -0x1.b6fd181e7ffffp-5 ulperr -6997593720619008.000 = -0x1.8dc462p+52 + -0x1.fff924p-2
src/math/special/fma.h:403: RZ fmal(0x1.d1962720d678cp-1,-0x1.4548ee45c4084p-1,0x1.f416ab193d75cp-4) want -0x1.d2929879dc853p-2 got 0x1.fc38e6f3fffffp-8 ulperr 8347731722502144.000 = 0x1.da837ap+52 + 0x1.fffe04p-2
src/math/special/fma.h:404: RZ fmal(-0x1.9ddcb295a7d64p-1,0x1.67fb3a2068a78p-1,0x1.da9cd4597fe0ap-4) want -0x1.cf4f6eb4fc5d8p-2 got 0x1.59da5511fffffp-6 ulperr 8530909930192896.000 = 0x1.e4ed12p+52 + 0x1.fffa98p-2
src/math/special/fma.h:405: RZ fmal(0x1.c00d16ed45b88p+0,0x1.c787eddda3664p+0,0x1.1e3e6f0cc1802p-5) want 0x1.931b8f379dcc3p+1 got -0x1.63fb63b7fffffp-6 ulperr -7140470102687744.000 = -0x1.95e382p+52 + -0x1.ffff4ep-2
src/math/special/fma.h:406: RZ fmal(0x1.19c2a2372c184p+0,-0x1.cb506961c19fp+0,0x1.db1abf3f7ba3ap-6) want -0x1.f21c0eab0bc18p+0 got 0x1.a29607ffffff8p-13 ulperr 8763735275470848.000 = 0x1.f2292p+52 + 0x1.fffffcp-2
src/math/special/fma.h:407: RZ fmal(-0x1.3a263218ccd1cp+0,-0x1.e818d390df27cp+0,0x1.2a81ed71785f5p-5) want 0x1.3025ab0f63925p+1 got -0x1.bfdf0b9bfffffp-6 ulperr -5412167746584576.000 = -0x1.33a566p+52 + -0x1.ffff2p-2
src/math/special/fma.h:408: RZ fmal(0x1.b0b041fbaca58p+0,-0x1.9d5f76d178e6p+0,0x1.0215c7bb84cf9p-6) want -0x1.5b52aec7ef4p+1 got 0x1.6be7a77ffffffp-7 ulperr 6135177709355008.000 = 0x1.5cbe94p+52 + 0x1.ffffa6p-2
src/math/special/fma.h:409: RZ fmal(-0x1.377549d9a87f4p+0,-0x1.a13d4a03dd6d8p+0,0x1.f190388bc5cc6p-7) want 0x1.ff83bebbd6fe4p+0 got -0x1.e5a6a43ffffffp-9 ulperr -9015346807701504.000 = -0x1.003b46p+53 + -0x1.ffffc4p-2
src/math/special/fma.h:410: RZ fmal(0x1.6a726c0762ac8p-1,-0x1.d32f2d30e483cp+0,0x1.f953eb70fbde6p-7) want -0x1.46c61b3070332p+0 got 0x1.e556e47fffffep-11 ulperr 5752835425697792.000 = 0x1.4702c4p+52 + 0x1.fffffp-2
src/math/special/fma.h:411: RZ fmal(0x1.94cf2509d40cp-1,0x1.721976af6dfbp+0,0x1.f51a456921c3ep-7) want 0x1.28880842acc6p+0 got -0x1.effe1dfffffffp-8 ulperr -5250719389057024.000 = -0x1.2a7804p+52 + -0x1.ffff84p-2
src/math/special/fma.h:412: RZ fmal(0x1.b128eb0ad8728p-1,0x1.7682566a54268p+0,0x1.bd4122a074cafp-8) want 0x1.3e9469530e762p+0 got -0x1.6fe0c7bffffffp-9 ulperr -5617153650720768.000 = -0x1.3f4c56p+52 + -0x1.ffffd2p-2
src/math/special/fma.h:413: RZ fmal(0x1.c4ae75976e35cp+0,-0x1.11c329dd1160cp+0,0x1.9993f5e13c9bdp-8) want -0x1.e27d925b07cf1p+0 got 0x1.198edf5ffffffp-9 ulperr 8497736676540416.000 = 0x1.e30a56p+52 + 0x1.ffffdcp-2
src/math/special/fma.h:414: RZ fmal(-0x1.85f81f88fa3c4p+0,-0x1.17648a494fa18p-1,0x1.37d305113b48p-10) want 0x1.aa367b7490e57p-1 got -0x1.7a59ecffffffep-12 ulperr -7501265072291840.000 = -0x1.aa65c4p+52 + -0x1.fffff4p-2
src/math/special/fma.h:415: RZ fmal(-0x1.311f2b4319efcp+0,0x1.abbb5272e3d18p-1,0x1.35841b7bdbcfep-10) want -0x1.fd337f24b39ep-1 got 0x1.4cbc317ffffffp-11 ulperr 8963677814259712.000 = 0x1.fd86acp+52 + 0x1.ffffecp-2
src/math/special/fma.h:416: RZ fmal(0x1.ab94369a9a0dp-1,0x1.9d1e0e0aa3bacp+0,0x1.0a63ca87cfa78p-11) want 0x1.592173ee296b6p+0 got -0x1.fd8043ffffff8p-13 ulperr -6072696672616448.000 = -0x1.59315cp+52 + -0x1.fffffcp-2
src/math/special/fma.h:458: RD fmal(0x1p+0,0x1p+0,-0x1p-1074) want 0x1.fffffffffffffp-1 got -0x1.fffffp-43 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p+0
src/math/special/fma.h:459: bad fp exception: RD fmal(0x1p-1074,0x1p-1074,0x1.fffffffffffffp-1022)=0x1.fffffffffffffp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:459: RD fmal(0x1p-1074,0x1p-1074,0x1.fffffffffffffp-1022) want 0x1.fffffffffffffp-1022 got 0x0p+0 ulperr -9007199254740992.000 = -0x1p+53 + 0x0p+0
src/math/special/fma.h:460: bad fp exception: RD fmal(0x1p-1074,-0x1p-1074,0x1.fffffffffffffp-1022)=0x1.ffffffffffffep-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:460: RD fmal(0x1p-1074,-0x1p-1074,0x1.fffffffffffffp-1022) want 0x1.ffffffffffffep-1022 got -0x1p-1074 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p+0
src/math/special/fma.h:461: bad fp exception: RD fmal(0x1p-1074,-0x1p-1074,-0x1.fffffffffffffp-1022)=-0x1p-1021, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:461: RD fmal(0x1p-1074,-0x1p-1074,-0x1.fffffffffffffp-1022) want -0x1p-1021 got -0x1p-1074 ulperr 4503599358935040.000 = 0x1.fffffep+51 + -0x1p-1
src/math/special/fma.h:462: bad fp exception: RD fmal(0x1p-1074,0x1p-1074,-0x1.fffffffffffffp-1022)=-0x1.fffffffffffffp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:462: RD fmal(0x1p-1074,0x1p-1074,-0x1.fffffffffffffp-1022) want -0x1.fffffffffffffp-1022 got 0x0p+0 ulperr 9007198717870080.000 = 0x1.fffffep+52 + 0x0p+0
src/math/special/fma.h:463: RD fmal(0x1p-1074,-0x1p-1074,0x1p-1074) want 0x0p+0 got -0x1p-1074 ulperr -2.000 = -0x1p+0 + -0x1p+0
src/math/special/fma.h:464: RD fmal(0x1p-1074,-0x1p-1074,-0x1p-1074) want -0x1p-1073 got -0x1p-1074 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/special/fma.h:465: RD fmal(0x1.0000000000001p+0,0x1p+0,0x1p+53) want 0x1p+53 got 0x1.000008p+12 ulperr -4503599627370496.000 = -0x1p+52 + -0x1p-1
src/math/special/fma.h:466: RD fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1p+53) want 0x1p+53 got 0x1.ffc02p+10 ulperr -4503599627370496.000 = -0x1p+52 + -0x1p-1
src/math/special/fma.h:467: RD fmal(0x1p+0,0x1.fffffffffffffp-1,0x1.fffffffffffffp+53) want 0x1.fffffffffffffp+53 got -0x1.ffffep+10 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:468: RD fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffep+53) want 0x1.ffffffffffffep+53 got 0x1.ffc02p+10 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:469: RD fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1p-52) want 0x1.0000000000001p+0 got -0x1.fffffp-42 ulperr -4503600164241408.000 = -0x1.000002p+52 + -0x1p-1
src/math/special/fma.h:470: RD fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.fffffffffffffp-53) want 0x1.0000000000001p+0 got -0x1.fffff8p-41 ulperr -4503600164241408.000 = -0x1.000002p+52 + -0x1p-1
src/math/special/fma.h:471: RD fmal(0x1.0000000000005p+0,0x1.ffffffffffffbp-1,0x1p-52) want 0x1.0000000000003p+0 got -0x1.8fffff8p-37 ulperr -4503600164241408.000 = -0x1.000002p+52 + -0x1p-1
src/math/special/fma.h:472: RD fmal(0x1.0000000000006p+0,0x1.ffffffffffffdp-1,0x1p-52) want 0x1.0000000000005p+0 got -0x1.1fffff8p-37 ulperr -4503600164241408.000 = -0x1.000002p+52 + -0x1p-1
src/math/special/fma.h:491: RD fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffbp-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffff4p+0 got 0x1.6800008p-37 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:492: RD fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1p+0) want 0x1.ffffffffffff8p+0 got 0x1.b000008p-37 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:493: RD fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1.ffffffffffffcp-1) want 0x1.ffffffffffff6p+0 got 0x1.b000008p-37 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:494: RD fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1.ffffffffffff8p-1) want 0x1.ffffffffffff4p+0 got 0x1.b000008p-37 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:495: RD fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff9p-1,0x1.ffffffffffffdp-1) want 0x1.ffffffffffff6p+0 got 0x1.f800008p-37 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:496: RD fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff9p-1,0x1.ffffffffffff9p-1) want 0x1.ffffffffffff4p+0 got 0x1.f800008p-37 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:497: RD fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff8p-1,0x1.ffffffffffffep-1) want 0x1.ffffffffffff6p+0 got 0x1.2000004p-36 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:498: RD fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff8p-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffff4p+0 got 0x1.2000004p-36 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:499: RD fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.fffffffffffffp-1) want 0x1.ffffffffffff6p+0 got 0x1.4400004p-36 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:500: RD fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.ffffffffffffbp-1) want 0x1.ffffffffffff4p+0 got 0x1.4400004p-36 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:501: RD fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffff2p+0 got 0x1.4400004p-36 ulperr -9007199254740992.000 = -0x1p+53 + -0x1p-1
src/math/special/fma.h:502: RD fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffep-1) want 0x1.fffffffffffffp+0 got -0x1.fffffp-42 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:503: RD fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffffdp+0 got -0x1.fffffp-42 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:504: RD fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.fffffffffffffp-1) want 0x1.fffffffffffffp+0 got -0x1.fffff8p-41 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:505: RD fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.ffffffffffffbp-1) want 0x1.ffffffffffffdp+0 got -0x1.fffff8p-41 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:506: RD fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffffbp+0 got -0x1.fffff8p-41 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:507: RD fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1p+0) want 0x1.fffffffffffffp+0 got -0x1.7ffffcp-40 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:508: RD fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1.ffffffffffffcp-1) want 0x1.ffffffffffffdp+0 got -0x1.7ffffcp-40 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:509: RD fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1.ffffffffffff8p-1) want 0x1.ffffffffffffbp+0 got -0x1.7ffffcp-40 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:510: RD fmal(0x1.0000000000001p+0,0x1.ffffffffffffcp-1,0x1.ffffffffffffdp-1) want 0x1.ffffffffffffdp+0 got -0x1.fffffcp-40 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:511: RD fmal(0x1.0000000000001p+0,0x1.ffffffffffffcp-1,0x1.ffffffffffff9p-1) want 0x1.ffffffffffffbp+0 got -0x1.fffffcp-40 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:512: RD fmal(0x1.0000000000001p+0,0x1.ffffffffffffbp-1,0x1.ffffffffffffep-1) want 0x1.ffffffffffffdp+0 got -0x1.3ffffep-39 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:513: RD fmal(0x1.0000000000001p+0,0x1.ffffffffffffbp-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffffbp+0 got -0x1.3ffffep-39 ulperr -9007200328482816.000 = -0x1.000002p+53 + -0x1p-1
src/math/special/fma.h:514: RD fmal(0x1.5872449b765b9p+0,0x1.c9acf91f8de2bp+0,0x1.9265607e4d168p+0) want 0x1.fd190c77c2a67p+1 got -0x1.b3fc37bedp-4 ulperr -9195829923414016.000 = -0x1.055c78p+53 + -0x1.fffc98p-2
src/math/special/fma.h:515: RD fmal(0x1.81d010b146d0ep+0,0x1.2d3c680dc9071p+0,0x1.a80b69538754cp+0) want 0x1.b7040b44973a6p+1 got 0x1.4d0cb20197p+1 ulperr -1864177270390784.000 = -0x1.a7dd66p+50 + -0x1.0029a2p-1
src/math/special/fma.h:516: RD fmal(0x1.6a44f2252b6a2p+0,0x1.da452a378b832p+0,0x1.1fe2ce329104p+0) want 0x1.df842b6f48b12p+1 got 0x1.12e95c1ba4p+0 ulperr -6017592242208768.000 = -0x1.560f7ep+52 + -0x1.00112ep-1
src/math/special/fma.h:517: RD fmal(0x1.096b1d26463eep+0,0x1.d846d3e34333p+0,0x1.721e3480922b8p+0) want 0x1.ade2909c0269fp+1 got -0x1.a139d9b2cp-1 ulperr -9397596749561856.000 = -0x1.0b1884p+53 + -0x1.ffe5ecp-2
src/math/special/fma.h:518: RD fmal(0x1.99bd3434c454bp+0,0x1.03cb8e4115bdep+0,0x1.109f107188b08p+0) want 0x1.5837a47d37faep+1 got 0x1.cfdec0c00ap+0 ulperr -1975291027128320.000 = -0x1.c12112p+50 + -0x1.001cfep-1
src/math/special/fma.h:519: RD fmal(0x1.ba930a0a78ed2p+0,0x1.8c24e8d67f636p+0,0x1.ac49dbfbf8affp+0) want 0x1.164947ae6a5d9p+2 got -0x1.33e3b04edp-2 ulperr -5234191818031104.000 = -0x1.298784p+52 + -0x1.fffb3p-2
src/math/special/fma.h:520: RD fmal(0x1.be224ad773191p+0,0x1.d96b77169731fp+0,0x1.662cfb75d8edep+0) want 0x1.27cd67e720f78p+2 got 0x1.e4711611c78p+1 ulperr -942615667146752.000 = -0x1.aca6e8p+49 + -0x1.001e48p-1
src/math/special/fma.h:521: RD fmal(0x1.59e7a1b0bdb3cp+0,0x1.2decba4d46421p+0,0x1.88f4062e96df5p+0) want 0x1.90749e4794f79p+1 got -0x1.b3c84a9a88p-1 ulperr -8961479864745984.000 = -0x1.fd66b2p+52 + -0x1.ffe4c4p-2
src/math/special/fma.h:522: RD fmal(0x1.22edf4b4da9a7p+0,0x1.dfa8d65f506cdp+0,0x1.2799208da2fbap+0) want 0x1.a45a1e99ed7a8p+1 got 0x1.a0bdfb8976p-1 ulperr -5562059957731328.000 = -0x1.3c2aap+52 + -0x1.000d06p-1
src/math/special/fma.h:523: RD fmal(0x1.ad5b991a2a279p+0,0x1.f02fd26706024p+0,0x1.831cdd5c8797cp+0) want 0x1.30d3a2ac90a6p+2 got 0x1.c7c15e1c82p+1 ulperr -1353701750996992.000 = -0x1.33cbdp+50 + -0x1.001c7cp-1
src/math/special/fma.h:524: RD fmal(0x1.531f9620e764ap+0,0x1.cad61b54d4425p+0,0x1.df817cae8a9afp+0) want 0x1.0fd4e7f8671dcp+2 got 0x1.8e74e26059p+1 ulperr -1277252138434560.000 = -0x1.2269dcp+50 + -0x1.0018e8p-1
src/math/special/fma.h:525: RD fmal(0x1.629a5ad79494fp+0,0x1.049e58693f4c4p+0,0x1.45b0109e4d00cp+0) want 0x1.5758154e14965p+1 got -0x1.01173c9c2p-3 ulperr -6322847379095552.000 = -0x1.67698ap+52 + -0x1.fffbfcp-2
src/math/special/fma.h:526: RD fmal(0x1.2f52b53f9240ap+0,0x1.1d5c686dbb0dap+0,0x1.6da3e392a4fd4p+0) want 0x1.5fe03a6795912p+1 got 0x1.5bdb7d9084p+0 ulperr -3130480329228288.000 = -0x1.63e4f8p+51 + -0x1.0015bep-1
src/math/special/fma.h:527: RD fmal(0x1.058667552b49ep+0,0x1.23307bacc1c42p+0,0x1.5b059b47cd8f5p+0) want 0x1.423f752486d13p+1 got -0x1.4bfb042744p+0 ulperr -8589176530272256.000 = -0x1.e83cf8p+52 + -0x1.ffd68p-2
src/math/special/fma.h:528: RD fmal(0x1.a717d95337ed8p+0,0x1.2b1c37846aaadp+0,0x1.be65672f885b1p+0) want 0x1.d65e72303c075p+1 got -0x1.7e0573ec04p+1 ulperr -14995408015065088.000 = -0x1.aa31f4p+53 + -0x1.ffa07ep-2
src/math/special/fma.h:529: RD fmal(0x1.deb79287b3d32p+0,0x1.62776b829babap+0,0x1.67daf18bd2eb1p+0) want 0x1.ff5a0d45c69d6p+1 got 0x1.ad881652ap-3 ulperr -8523520438960128.000 = -0x1.e4818cp+52 + -0x1.00035cp-1
src/math/special/fma.h:530: RD fmal(0x1.fbf12d3a6de91p+0,0x1.879fe6124f11p+0,0x1.9f3f1247a8641p+0) want 0x1.2a126c6980018p+2 got 0x1.45e3d61a84p+2 ulperr 489379747332096.000 = 0x1.bd169ap+48 + -0x1.0028bcp-1
src/math/special/fma.h:531: RD fmal(0x1.c589628460e01p+0,0x1.e1bec1c797533p+0,0x1.349f30cdb84bbp+0) want 0x1.2286118b6f6e5p+2 got -0x1.8e9d95e0668p+1 ulperr -8617207097458688.000 = -0x1.e9d4dep+52 + -0x1.ffce2cp-2
src/math/special/fma.h:532: RD fmal(0x1.46fd6c2c924ebp+0,0x1.65e2f02e730a1p+0,0x1.37739d2751098p+0) want 0x1.804a71c1f1272p+1 got 0x1.855d7947cbp+0 ulperr -3335623536541696.000 = -0x1.7b376cp+51 + -0x1.001856p-1
src/math/special/fma.h:533: RD fmal(0x1.f99e595ae11fdp+0,0x1.bd33d9a1d81bp+0,0x1.932a2a2e244c1p+0) want 0x1.409e34f8f2f89p+2 got -0x1.7a49668944p+2 ulperr -12295261934059520.000 = -0x1.5d73cep+53 + -0x1.ffa16ep-2
src/math/special/fma.h:534: RD fmal(0x1.59ea1e56bfe55p+0,0x1.6f46b7d412a44p+0,0x1.80f2bc9a32cc3p+0) want 0x1.b89c7640e32ffp+1 got -0x1.ca180bfb6p-3 ulperr -8254993714905088.000 = -0x1.d53df8p+52 + -0x1.fff8d8p-2
src/math/special/fma.h:535: RD fmal(0x1.61490fcb44129p+0,0x1.0038ec4fc35c2p+0,0x1.df7436ed7a7b7p+0) want 0x1.a085ea68d05cfp+1 got -0x1.5ed2c690f7p+1 ulperr -13499302328401920.000 = -0x1.7fac5ap+53 + -0x1.ffa84cp-2
src/math/special/fma.h:536: RD fmal(0x1.d41b98788502bp+0,0x1.1a7b77843aca6p+0,0x1.05be891837d36p+0) want 0x1.8523596ceced9p+1 got -0x1.48c8fc403cp-1 ulperr -8291802121502720.000 = -0x1.d7559ap+52 + -0x1.ffeb74p-2
src/math/special/fma.h:537: RD fmal(0x1.3153cf6f69af9p+0,0x1.aaa947e38e57ap+0,0x1.8519f9b590645p+0) want 0x1.c0fcab7b46368p+1 got 0x1.25f4f4bd5p-3 ulperr -7575454189879296.000 = -0x1.ae9d5ep+52 + -0x1.00024cp-1
src/math/special/fma.h:538: RD fmal(0x1.c25a1f73581aap+0,0x1.0a51ffca372ap+0,0x1.0c77e3ebac5f3p+0) want 0x1.707ce48c7d72dp+1 got -0x1.3261c9a0ep+1 ulperr -11872436362412032.000 = -0x1.516f58p+53 + -0x1.ffb368p-2
src/math/special/fma.h:539: RD fmal(0x1.829c2cde44b7p+0,0x1.f692e86d8cb36p+0,0x1.455e72d264bfp+0) want 0x1.0f16a3b8b3f97p+2 got -0x1.684386466p+0 ulperr -6353495191977984.000 = -0x1.692786p+52 + -0x1.ffe97cp-2
src/math/special/fma.h:540: RD fmal(0x1.94729588dcc69p+0,0x1.c3bb794c6edf8p+0,0x1.9da4e94d262d2p+0) want 0x1.19d4bd84d9fd2p+2 got 0x1.e1b9a2757p-1 ulperr -3898699117756416.000 = -0x1.bb3b14p+51 + -0x1.000786p-1
src/math/special/fma.h:541: RD fmal(0x1.e6a5e7e39c3d5p+0,0x1.1b69af2bdd978p+0,0x1.e7ef1eafa119cp+0) want 0x1.00ac5b44c9f31p+2 got -0x1.6777d5d394p+1 ulperr -7677359268298752.000 = -0x1.b46848p+52 + -0x1.ffd312p-2
src/math/special/fma.h:542: RD fmal(0x1.bc9ba1320700cp-1022,0x1.981f2e1a451a8p-2,0x1.046144efc0ceap-1022) want 0x1.b594d0e4368efp-1022 got -0x1.9dedc9561p-1023 ulperr -11338969211994112.000 = -0x1.4245dcp+53 + -0x1.ffcc42p-2
src/math/special/fma.h:543: RD fmal(0x1.022db53c98d14p-1022,0x1.21157eef74848p-2,0x1.2f880432b1bc1p-1022) want 0x1.786ad60a02b3dp-1022 got -0x1.150255ac98p-1022 ulperr -11495199721127936.000 = -0x1.46b696p+53 + -0x1.ffbacp-2
src/math/special/fma.h:544: RD fmal(0x1.805a491fa9597p-1022,0x1.e0f49d782ff87p-2,0x1.172a62346206p-1022) want 0x1.cbb085199a3f5p-1022 got -0x1.6ed115da2f8p-1023 ulperr -11313498982187008.000 = -0x1.418c8ap+53 + -0x1.ffd226p-2
src/math/special/fma.h:545: RD fmal(0x1.adbc3a9d816dep-1022,0x1.e039d4431e3cdp-2,0x1.93ceef6fe18a2p-1022) want 0x1.2eabb7dc0e2fp-1021 got 0x1.ef7b6794e3p-1023 ulperr -3145487481831424.000 = -0x1.6599bcp+51 + -0x1.000f7cp-1
src/math/special/fma.h:546: RD fmal(0x1.645aa5c2df3afp-1022,0x1.649edfcad854fp-2,0x1.8b43e0bbaeb01p-1022) want 0x1.03af571d2b504p-1021 got 0x1.0ce86163c02p-1021 ulperr 162249436037120.000 = 0x1.272148p+47 + -0x1.00219ep-1
src/math/special/fma.h:547: RD fmal(0x1.133474a2c0fb1p-1022,0x1.72442bcbfa01dp-2,0x1.4a1a21971c5dbp-1022) want 0x1.ad9ce7fcefa3fp-1022 got -0x1.12bc4931e6p-1025 ulperr -8161980292530176.000 = -0x1.cff472p+52 + -0x1.fff76ap-2
src/math/special/fma.h:548: RD fmal(0x1.8ee3feb00c3e7p-1022,0x1.53bd9353313bcp-2,0x1.5501b57dc3b6fp-1022) want 0x1.d9598906f0bb3p-1022 got -0x1.4660b83f57p-1022 ulperr -14068956725772288.000 = -0x1.8fdd22p+53 + -0x1.ffae68p-2
src/math/special/fma.h:549: RD fmal(0x1.161225cfa61e2p-1022,0x1.b6dd69a0af5bp-2,0x1.924ffc3ead5c3p-1022) want 0x1.04be6fc25367bp-1021 got -0x1.f3ab56daa8p-1022 ulperr -8982192881401856.000 = -0x1.fe941cp+52 + -0x1.ffc18ap-2
src/math/special/fma.h:550: RD fmal(0x1.820f7faf219afp-1022,0x1.06717ae771f6dp-2,0x1.0dc5035f5e2afp-1022) want 0x1.70b6c3169f043p-1022 got -0x1.a779baefbe8p-1023 ulperr -10211414669000704.000 = -0x1.2239d2p+53 + -0x1.ffcb1p-2
src/math/special/fma.h:551: RD fmal(0x1.ce0e2ea55040ep-1022,0x1.ce5a55fa3828dp-2,0x1.f2f444d50ce59p-1022) want 0x1.61ca36f5a8a79p-1021 got -0x1.173f0cea128p-1022 ulperr -8680214267691008.000 = -0x1.ed69bep+52 + -0x1.ffdd18p-2
src/math/special/fma.h:552: RD fmal(0x1.a7a271c67cdcfp-1022,0x1.1e979090e218p-2,0x1.b1f10b6e2177ap-1022) want 0x1.1440cf1c105ebp-1021 got -0x1.f88fda6p-1030 ulperr -4877233864835072.000 = -0x1.153d18p+52 + -0x1.ffffcp-2
src/math/special/fma.h:553: RD fmal(0x1.76df065829dc6p-1022,0x1.fb22ab1b86b8bp-2,0x1.6966267f317cp-1022) want 0x1.1186e1f77012dp-1021 got -0x1.2ffba526fcp-1025 ulperr -5146169147654144.000 = -0x1.24869ep+52 + -0x1.fffb4p-2
src/math/special/fma.h:554: RD fmal(0x1.8b004a28b70dbp-1022,0x1.48e5805a8b453p-2,0x1.0ea791f716557p-1022) want 0x1.8d86310bad175p-1022 got -0x1.1b755c367f8p-1023 ulperr -9486646453993472.000 = -0x1.0da07p+53 + -0x1.ffdc92p-2
src/math/special/fma.h:555: RD fmal(0x1.fb3391a4b1d23p-1022,0x1.4d8705b057caep-2,0x1.d026cb6dae73bp-1022) want 0x1.3aad18b424c67p-1021 got -0x1.0a1784c7c6cp-1021 ulperr -10216979872874496.000 = -0x1.22625p+53 + -0x1.ffbd7ap-2
src/math/special/fma.h:556: RD fmal(0x1.a5ba39730e197p-1022,0x1.794df89b1cc49p-2,0x1.24a0a388d0b6bp-1022) want 0x1.c0048fd33a417p-1022 got -0x1.d026e457f1p-1024 ulperr -9922975402819584.000 = -0x1.1a0726p+53 + -0x1.ffe2fep-2
src/math/special/fma.h:557: RD fmal(0x1.aa9eff070281cp-1022,0x1.fab05661b48ebp-2,0x1.cbe2af6c69c6ep-1022) want 0x1.4f7ddbe122764p-1021 got 0x1.9e529858dap-1023 ulperr -4079821109854208.000 = -0x1.cfd26cp+51 + -0x1.000cf2p-1
src/math/special/fma.h:558: RD fmal(0x1.758bbff0ec4bap-1022,0x1.a4a197f3fa424p-2,0x1.47761e8d142ddp-1022) want 0x1.e0e762ee2e7c5p-1022 got -0x1.e2fe0f96ecp-1023 ulperr -12708596701724672.000 = -0x1.693336p+53 + -0x1.ffc3ap-2
src/math/special/fma.h:559: RD fmal(0x1.4dab43918a9a8p-1022,0x1.ed667442b4751p-2,0x1.3f25f82e02e3ep-1022) want 0x1.dfec0ee732dcap-1022 got 0x1.6a41c4d18ap-1022 ulperr -2069988076683264.000 = -0x1.d6a92ap+50 + -0x1.002d48p-1
src/math/special/fma.h:560: RD fmal(0x1.7943735951931p-1022,0x1.fa6a357c5c9ddp-2,0x1.0bed44b0b71b4p-1022) want 0x1.c6803a6059abep-1022 got 0x1.0e970cce134p-1022 ulperr -3235394032238592.000 = -0x1.6fd25cp+51 + -0x1.0021d2p-1
src/math/special/fma.h:561: RD fmal(0x1.66c26bc29a5e8p-1022,0x1.3faed079f761ap-2,0x1.163ff906dd651p-1022) want 0x1.8640492c45959p-1022 got -0x1.3271a1b38p-1027 ulperr -7033840023371776.000 = -0x1.8fd3d8p+52 + -0x1.fffd9cp-2
src/math/special/fma.h:562: RD fmal(0x1.f52172c56bdf5p-1022,0x1.672b2de422734p-2,0x1.7bc5d708e5a34p-1022) want 0x1.15c5b95145cc6p-1021 got 0x1.3cf4f71d188p-1021 ulperr 689341647028224.000 = 0x1.3979eep+49 + -0x1.00279ep-1
src/math/special/fma.h:563: RD fmal(0x1.2f94e89aa7558p-1022,0x1.dfa6d30835f5ep-2,0x1.59c6b0d504cf9p-1022) want 0x1.e7fa0dd76fbefp-1022 got -0x1.60a5d541bp-1024 ulperr -10135539776749568.000 = -0x1.2011c2p+53 + -0x1.ffe9f6p-2
src/math/special/fma.h:564: RD fmal(0x1.6159897ae533cp-1022,0x1.f3b8892e3a3c8p-2,0x1.09ca702b7759p-1022) want 0x1.b63a7f56fce1fp-1022 got -0x1.497a9bc52p-1024 ulperr -9158461560455168.000 = -0x1.044c94p+53 + -0x1.ffeb68p-2
src/math/special/fma.h:565: RD fmal(0x1.f73d5f4e81fd8p-1022,0x1.7ccff2642124ap-2,0x1.e7d836a0c8308p-1022) want 0x1.517f1763126d3p-1021 got -0x1.06939f3372p-1021 ulperr -10556597969354752.000 = -0x1.2c095cp+53 + -0x1.ffbe5cp-2
src/math/special/fma.h:566: RD fmal(0x1.b4328925969fbp-1022,0x1.8fa02832a22d5p-2,0x1.2084598e2f8c6p-1022) want 0x1.cabf43838dc51p-1022 got -0x1.7c61d65f0a4p-1022 ulperr -14762119350190080.000 = -0x1.a3908ep+53 + -0x1.ffa0e8p-2
src/math/special/fma.h:567: RD fmal(0x1.66ee60a92676fp-1022,0x1.eddd2e7681ce4p-2,0x1.b81d57daeb3a7p-1022) want 0x1.329c918ffb682p-1021 got 0x1.cd379885b8p-1025 ulperr -4886855128449024.000 = -0x1.15c91ap+52 + -0x1.00039ap-1
src/math/special/fma.h:568: RD fmal(0x1.ff2737585895dp-1022,0x1.fb4bf3828ae4ap-2,0x1.4a866847740fp-1022) want 0x1.23e07e4dbbeaap-1021 got 0x1.46c53f7571p-1023 ulperr -3697601501200384.000 = -0x1.a45e5ep+51 + -0x1.000a36p-1
src/math/special/fma.h:569: RD fmal(0x1.5e2008d269a86p-1022,0x1.507bbbe4d78eep-2,0x1.6220c6f83f636p-1022) want 0x1.d52d9874f1c74p-1022 got 0x1.eda0503c4ap-1023 ulperr -3911886546403328.000 = -0x1.bcbae2p+51 + -0x1.001edap-1
src/math/special/fma.h:570: RD fmal(0x1.ce7e2e5812d86p-1022,0x1.0e6689d092e5fp-2,0x1.1e43fd55c3458p-1022) want 0x1.9864925e2fb0fp-1022 got -0x1.53ae580e8cp-1025 ulperr -7931489798848512.000 = -0x1.c2da5ep+52 + -0x1.fff562p-2
src/math/special/fma.h:571: RD fmal(0x1.7b353b81e793dp-1022,0x1.82b426f874c6dp-2,0x1.d92b19d21fd5cp-1022) want 0x1.342fb0c544a78p-1021 got 0x1.2af4c8aebe4p-1022 ulperr -2792024289837056.000 = -0x1.3d6a9ap+51 + -0x1.0012bp-1
src/math/special/fma.h:572: RD fmal(0x1.5be667823370ap-1022,0x1.a8a99b163869bp-2,0x1.95456b68dc3bcp-1022) want 0x1.12c638de03c7p-1021 got 0x1.49af7fc787p-1023 ulperr -3383908364189696.000 = -0x1.80b4b2p+51 + -0x1.000a4ep-1
src/math/special/fma.h:573: RD fmal(0x1.17b0fc6c850e5p-1022,0x1.d1d0a4853c315p-2,0x1.36b79f7c0c24p-1022) want 0x1.b5f2baff5635cp-1022 got 0x1.6a19304724p-1026 ulperr -7306334223466496.000 = -0x1.9f5128p+52 + -0x1.0002d4p-1
src/math/special/fma.h:574: RD fmal(0x1.bd97819bacfd8p-1022,0x1.2c25f267ba4eep-2,0x1.804b5204a3f3ap-1022) want 0x1.01739c190fd96p-1021 got 0x1.b9e166e6b4p-1022 ulperr -642314707927040.000 = -0x1.241746p+49 + -0x1.001b9ep-1
src/math/special/fma.h:575: RD fmal(0x1.596577053873dp-1022,0x1.3562ab2d29949p-2,0x1.b3f1ee75db6e7p-1022) want 0x1.0e268a498009ap-1021 got 0x1.e8136bc1594p-1022 ulperr -459378025037824.000 = -0x1.a1cd48p+48 + -0x1.001e82p-1
src/math/special/fma.h:576: RD fmal(0x1.3c7a68cf0f7b3p-1022,0x1.9a55c15b167bdp-2,0x1.7635b7b163c07p-1022) want 0x1.f5073b93b7b8p-1022 got 0x1.75f9a972138p-1023 ulperr -5524661530001408.000 = -0x1.3a0a68p+52 + -0x1.00176p-1
src/math/special/fma.h:577: RD fmal(0x1.5825164bc4068p-1022,0x1.dcbb6e5ff3245p-2,0x1.52fc3be0e84dap-1022) want 0x1.f334771c2dcfap-1022 got 0x1.2b86ba6b02p-1022 ulperr -3512784226615296.000 = -0x1.8f5b7ap+51 + -0x1.00257p-1
src/math/special/fma.h:578: RD fmal(0x1.139ea77b760ecp+1022,0x1.9b25f2fd017eap+2,-0x1.bc16788922b6fp+1023) want 0x1.b93aac527380ep+1023 got 0x1.c3ec4f2eep+1022 ulperr -3787028625883136.000 = -0x1.ae890ap+51 + -0x1.001c3ep-1
src/math/special/fma.h:579: RD fmal(0x1.0e6f9c1657d7cp+1022,0x1.4d5c6b55ab5f1p+2,-0x1.e027dd5742e2cp+1023) want 0x1.c0538372b4bbep+1022 got 0x1.54dede6dep+1021 ulperr -4888709480579072.000 = -0x1.15e416p+52 + -0x1.00154ep-1
src/math/special/fma.h:580: RD fmal(0x1.1182524fa411cp+1022,0x1.a3dba56842d19p+2,-0x1.c1ad59474d71fp+1023) want 0x1.bf78969300a76p+1023 got 0x1.8651491efp+1022 ulperr -4438724951670784.000 = -0x1.f89fe6p+51 + -0x1.001866p-1
src/math/special/fma.h:581: RD fmal(0x1.1cbf4fb8ec82p+1022,0x1.5e32019a84fbbp+2,-0x1.985af08f32edep+1023) want 0x1.72af6bbad4a28p+1023 got 0x1.a68c1c1ecp+1023 ulperr 912367084896256.000 = 0x1.9ee582p+49 + -0x1.0034d2p-1
src/math/special/fma.h:582: RD fmal(0x1.311e25c6db346p+1022,0x1.4e30db6c4b51dp+2,-0x1.7681f7a9786a7p+1023) want 0x1.a61d29434fc13p+1023 got -0x1.791d1989p+1017 ulperr -7529566759288832.000 = -0x1.ac019ep+52 + -0x1.fffe86p-2
src/math/special/fma.h:583: RD fmal(0x1.1201cf577052fp+1022,0x1.59730b2db7a16p+2,-0x1.56f1a64a078d5p+1023) want 0x1.8c8d801df34d9p+1023 got -0x1.3048609fd8p+1022 ulperr -inf = -inf + -0x1.ffd9f6p-2
src/math/special/fma.h:584: RD fmal(0x1.3e52335b76e81p+1022,0x1.4dbd56f857479p+2,-0x1.509340c11bd2ep+1023) want 0x1.ed6576837f653p+1023 got -0x1.e498d5441cp+1022 ulperr -inf = -inf + -0x1.ffc36cp-2
src/math/special/fma.h:585: RD fmal(0x1.18566b4f843cbp+1022,0x1.444fba10eaf29p+2,-0x1.f927beae57f0ap+1023) want 0x1.9a433b9796559p+1022 got 0x1.a048d2820cp+1022 ulperr 105937222238208.000 = 0x1.8165bap+46 + -0x1.ff6812p-2
src/math/special/fma.h:586: RD fmal(0x1.3fbe544fe1be8p+1022,0x1.2d2a5fda03639p+2,-0x1.007407dbfd03cp+1023) want 0x1.efdb644b613e5p+1023 got -0x1.e14223656p+1022 ulperr -inf = -inf + -0x1.ffc3d8p-2
src/math/special/fma.h:587: RD fmal(0x1.263a0d3bc2e4p+1022,0x1.4cc198adbc651p+2,-0x1.734b1c1f7fdb8p+1023) want 0x1.899878afc0fa2p+1023 got 0x1.a13620448p+1023 ulperr 415454199808000.000 = 0x1.79da78p+48 + -0x1.003426p-1
src/math/special/fma.h:588: RD fmal(0x1.5bf4aec8efc8ep+1022,0x1.555f0341516c9p+2,-0x1.c706408acd14cp+1023) want 0x1.d8f5e18b868bcp+1023 got 0x1.3e5679fdf8p+1022 ulperr -5520280126488576.000 = -0x1.39caa6p+52 + -0x1.0013e6p-1
src/math/special/fma.h:589: RD fmal(0x1.1e57f1af78279p+1022,0x1.34bc0c7f082b3p+2,-0x1.497b92c1365edp+1023) want 0x1.692cb7ec68a93p+1023 got -0x1.c0a1f29b28p+1021 ulperr -8326959650045952.000 = -0x1.d95536p+52 + -0x1.ffe3f6p-2
src/math/special/fma.h:590: RD fmal(0x1.1d9824cd73511p+1022,0x1.1d557ddfe47ffp+2,-0x1.556cdb1d20a72p+1023) want 0x1.2736a6b6e35f2p+1023 got 0x1.bc6f9c9778p+1021 ulperr -3238800478175232.000 = -0x1.70358p+51 + -0x1.000de4p-1
src/math/special/fma.h:591: RD fmal(0x1.1ff85a24aff31p+1022,0x1.39ab374b2680dp+2,-0x1.35e6b07b651b8p+1023) want 0x1.8bc7ce208708p+1023 got 0x1.84b319bafap+1023 ulperr -124568119279616.000 = -0x1.c52d1ap+46 + -0x1.003096p-1
src/math/special/fma.h:592: RD fmal(0x1.0449b3965227ep+1022,0x1.4430d4441f9f2p+2,-0x1.a6966c96307ep+1023) want 0x1.d94eda8c81771p+1022 got -0x1.992ed6b72p+1021 ulperr -11925734759071744.000 = -0x1.52f324p+53 + -0x1.ffccdap-2
src/math/special/fma.h:593: RD fmal(0x1.3c91fa00fd0c7p+1022,0x1.1b6661c0b0303p+2,-0x1.f1f2846b64483p+1023) want 0x1.95eae0d2644d3p+1022 got 0x1.9985d8eaap+1019 ulperr -6240425882943488.000 = -0x1.62ba26p+52 + -0x1.ff0cccp-2
src/math/special/fma.h:594: RD fmal(0x1.0979b36d46534p+1022,0x1.12fa205f41f7fp+2,-0x1.a83ecf4544a63p+1023) want 0x1.2420f34e2aa3cp+1022 got -0x1.335a0fe68p+1019 ulperr -5815056616914944.000 = -0x1.4a8c36p+52 + -0x1.007b32p-1
src/math/special/fma.h:595: RD fmal(0x1.4c89df582a599p+1022,0x1.55f3dc473ea8fp+2,-0x1.e35037292ddfp+1023) want 0x1.95109fdbc3771p+1023 got -0x1.afa3b29624p+1022 ulperr -inf = -inf + -0x1.ffca0cp-2
src/math/special/fma.h:596: RD fmal(0x1.35ee0a669c4fbp+1022,0x1.2263cb63f386ap+2,-0x1.449218ae35ac7p+1023) want 0x1.7a8ed977d817ap+1023 got 0x1.47da9ddfb8p+1022 ulperr -3775828961787904.000 = -0x1.ad4316p+51 + -0x1.00147ep-1
src/math/special/fma.h:597: RD fmal(0x1.117cc860f61bcp+1022,0x1.440985b25d994p+2,-0x1.d7a7d82000449p+1023) want 0x1.b960b7088e74fp+1022 got 0x1.ddfba372cp+1022 ulperr 643964914892800.000 = 0x1.24d762p+49 + -0x1.ff777ep-2
src/math/special/fma.h:598: RD fmal(0x1.1e78a37be320fp+1022,0x1.0db0fce62287bp+2,-0x1.376337da5eb53p+1023) want 0x1.24326b9956dfbp+1023 got -0x1.d2881b3596p+1023 ulperr -inf = -inf + -0x1.ff8b5ep-2
src/math/special/fma.h:599: RD fmal(0x1.0c79b5c8331c2p+1022,0x1.0aba6ea746b5p+2,-0x1.c86f1fcaf0741p+1023) want 0x1.9c135bb2cff84p+1021 got -0x1.cc298bacp+1019 ulperr -9273126449840128.000 = -0x1.078eep+53 + -0x1.00f19ep-1
src/math/special/fma.h:600: RD fmal(0x1.556c4c072f272p+1022,0x1.347758d7d4eb5p+2,-0x1.c6fe4f24b248dp+1023) want 0x1.6fcc9f756df6dp+1023 got -0x1.f6f4c76598p+1022 ulperr -inf = -inf + -0x1.ffc122p-2
src/math/special/fma.h:601: RD fmal(-0x1.e8349b891b2fp-1,0x1.4a6dec9b72578p-1,0x1.3b6151ce809ddp-1) want 0x1.3a62fe330b355p-11 got -0x1.d97121p-11 ulperr -13859627535958016.000 = -0x1.89ea1p+53 + -0x1.ff89a4p-2
src/math/special/fma.h:602: RD fmal(0x1.2996632ac7d74p-1,-0x1.bb3c58b654d94p-1,0x1.01a6660e64a31p-1) want 0x1.ed045bb956a8ep-15 got -0x1.070d62p-15 ulperr -13300912420290560.000 = -0x1.7a08ep+53 + -0x1.eabe3cp-2
src/math/special/fma.h:603: RD fmal(-0x1.c602e894c1df8p-1,0x1.a1c980e7d3f94p-1,0x1.7271244b43386p-1) want -0x1.ba251fe026e5cp-15 got -0x1.af2b6c0000001p-15 ulperr 193081294979072.000 = 0x1.5f367cp+47 + -0x1.02ca1ap-1
src/math/special/fma.h:604: RD fmal(-0x1.c84baf47e85cp-1,0x1.770b5149ef2ep-1,0x1.4d80f139320bap-1) want -0x1.79277433b9e24p-10 got 0x1.d4b6effffffffp-11 ulperr 10757822555881472.000 = 0x1.31c176p+53 + -0x1.001d4cp-1
src/math/special/fma.h:605: RD fmal(-0x1.36e667dcf9c6p-1,0x1.2591f82556b88p-1,0x1.2452a0f795f95p-1) want 0x1.c83c8e63c159fp-3 got -0x1.221cccp-12 ulperr -8036166741786624.000 = -0x1.c8cd9ep+52 + -0x1.ffffdcp-2
src/math/special/fma.h:606: RD fmal(0x1.88b2cede61e4cp-1,-0x1.71dcab5ad9e9p-3,0x1.32b27fea2ae97p-3) want 0x1.70461909b25e2p-7 got -0x1.affe57fffffffp-17 ulperr -6486163510525952.000 = -0x1.70b21ap+52 + -0x1.ffffe6p-2
src/math/special/fma.h:607: RD fmal(0x1.8d1e44002c98p-3,-0x1.af9fdfb347834p-1,0x1.e280942fb4146p-4) want -0x1.761ac23896dfep-5 got 0x1.0bec47fffffffp-14 ulperr 6590522089013248.000 = 0x1.76a0b8p+52 + -0x1.00001p-1
src/math/special/fma.h:608: RD fmal(0x1.236e8cb9492c8p-1,-0x1.d37443a57f1c4p-1,0x1.ca10df801aabcp-4) want -0x1.a1a2cdf0138fap-2 got 0x1.f090cab6fffffp-5 ulperr 8439088361242624.000 = 0x1.dfb4e6p+52 + -0x1.0007c2p-1
src/math/special/fma.h:609: RD fmal(-0x1.6ad943e610fb8p-1,-0x1.cef92a7bb18bcp-1,0x1.f28587d8fb0ep-4) want 0x1.866b5204b9aecp-1 got -0x1.8c9eb9a7p-5 ulperr -7304415983697920.000 = -0x1.9f353ep+52 + -0x1.fff9cep-2
src/math/special/fma.h:610: RD fmal(-0x1.60a8569a5d894p-1,-0x1.ca07e29dd171cp-1,0x1.b6c475ace09ecp-4) want 0x1.72549291e2f7ap-1 got -0x1.b6fd181e8p-5 ulperr -6997594257489920.000 = -0x1.8dc466p+52 + -0x1.fff924p-2
src/math/special/fma.h:611: RD fmal(0x1.d1962720d678cp-1,-0x1.4548ee45c4084p-1,0x1.f416ab193d75cp-4) want -0x1.d2929879dc854p-2 got 0x1.fc38e6f3fffffp-8 ulperr 8347731722502144.000 = 0x1.da837cp+52 + -0x1.0000fep-1
src/math/special/fma.h:612: RD fmal(-0x1.9ddcb295a7d64p-1,0x1.67fb3a2068a78p-1,0x1.da9cd4597fe0ap-4) want -0x1.cf4f6eb4fc5d9p-2 got 0x1.59da5511fffffp-6 ulperr 8530909930192896.000 = 0x1.e4ed14p+52 + -0x1.0002b4p-1
src/math/special/fma.h:613: RD fmal(0x1.c00d16ed45b88p+0,0x1.c787eddda3664p+0,0x1.1e3e6f0cc1802p-5) want 0x1.931b8f379dcc3p+1 got -0x1.63fb63b8p-6 ulperr -7140470639558656.000 = -0x1.95e386p+52 + -0x1.ffff4ep-2
src/math/special/fma.h:614: RD fmal(0x1.19c2a2372c184p+0,-0x1.cb506961c19fp+0,0x1.db1abf3f7ba3ap-6) want -0x1.f21c0eab0bc19p+0 got 0x1.a29607ffffff8p-13 ulperr 8763735275470848.000 = 0x1.f22922p+52 + -0x1.000002p-1
src/math/special/fma.h:615: RD fmal(-0x1.3a263218ccd1cp+0,-0x1.e818d390df27cp+0,0x1.2a81ed71785f5p-5) want 0x1.3025ab0f63925p+1 got -0x1.bfdf0b9cp-6 ulperr -5412168283455488.000 = -0x1.33a56ap+52 + -0x1.ffff2p-2
src/math/special/fma.h:616: RD fmal(0x1.b0b041fbaca58p+0,-0x1.9d5f76d178e6p+0,0x1.0215c7bb84cf9p-6) want -0x1.5b52aec7ef401p+1 got 0x1.6be7a77ffffffp-7 ulperr 6135177709355008.000 = 0x1.5cbe96p+52 + -0x1.00002ep-1
src/math/special/fma.h:617: RD fmal(-0x1.377549d9a87f4p+0,-0x1.a13d4a03dd6d8p+0,0x1.f190388bc5cc6p-7) want 0x1.ff83bebbd6fe4p+0 got -0x1.e5a6a44p-9 ulperr -9015347881443328.000 = -0x1.003b4ap+53 + -0x1.ffffc4p-2
src/math/special/fma.h:618: RD fmal(0x1.6a726c0762ac8p-1,-0x1.d32f2d30e483cp+0,0x1.f953eb70fbde6p-7) want -0x1.46c61b3070333p+0 got 0x1.e556e47fffffep-11 ulperr 5752835425697792.000 = 0x1.4702c6p+52 + -0x1.000008p-1
src/math/special/fma.h:619: RD fmal(0x1.94cf2509d40cp-1,0x1.721976af6dfbp+0,0x1.f51a456921c3ep-7) want 0x1.28880842acc6p+0 got -0x1.effe1ep-8 ulperr -5250719925927936.000 = -0x1.2a7808p+52 + -0x1.ffff84p-2
src/math/special/fma.h:620: RD fmal(0x1.b128eb0ad8728p-1,0x1.7682566a54268p+0,0x1.bd4122a074cafp-8) want 0x1.3e9469530e762p+0 got -0x1.6fe0c7cp-9 ulperr -5617154187591680.000 = -0x1.3f4c5ap+52 + -0x1.ffffd2p-2
src/math/special/fma.h:621: RD fmal(0x1.c4ae75976e35cp+0,-0x1.11c329dd1160cp+0,0x1.9993f5e13c9bdp-8) want -0x1.e27d925b07cf2p+0 got 0x1.198edf5ffffffp-9 ulperr 8497736676540416.000 = 0x1.e30a58p+52 + -0x1.000012p-1
src/math/special/fma.h:622: RD fmal(-0x1.85f81f88fa3c4p+0,-0x1.17648a494fa18p-1,0x1.37d305113b48p-10) want 0x1.aa367b7490e57p-1 got -0x1.7a59ecffffffep-12 ulperr -7501265609162752.000 = -0x1.aa65c8p+52 + -0x1.fffff4p-2
src/math/special/fma.h:623: RD fmal(-0x1.311f2b4319efcp+0,0x1.abbb5272e3d18p-1,0x1.35841b7bdbcfep-10) want -0x1.fd337f24b39e1p-1 got 0x1.4cbc317ffffffp-11 ulperr 8963677814259712.000 = 0x1.fd86aep+52 + -0x1.00000ap-1
src/math/special/fma.h:624: RD fmal(0x1.ab94369a9a0dp-1,0x1.9d1e0e0aa3bacp+0,0x1.0a63ca87cfa78p-11) want 0x1.592173ee296b6p+0 got -0x1.fd8043ffffff8p-13 ulperr -6072697209487360.000 = -0x1.59316p+52 + -0x1.fffffcp-2
src/math/special/fma.h:666: RU fmal(0x1p+0,0x1p+0,-0x1p-1074) want 0x1p+0 got -0x1.fffffp-43 ulperr -4503599627370496.000 = -0x1p+52 + 0x0p+0
src/math/special/fma.h:667: bad fp exception: RU fmal(0x1p-1074,0x1p-1074,0x1.fffffffffffffp-1022)=0x1p-1021, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:667: RU fmal(0x1p-1074,0x1p-1074,0x1.fffffffffffffp-1022) want 0x1p-1021 got 0x1p-1074 ulperr -4503599358935040.000 = -0x1.fffffep+51 + 0x1p-1
src/math/special/fma.h:668: bad fp exception: RU fmal(0x1p-1074,-0x1p-1074,0x1.fffffffffffffp-1022)=0x1.fffffffffffffp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:668: RU fmal(0x1p-1074,-0x1p-1074,0x1.fffffffffffffp-1022) want 0x1.fffffffffffffp-1022 got -0x0p+0 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x0p+0
src/math/special/fma.h:669: bad fp exception: RU fmal(0x1p-1074,-0x1p-1074,-0x1.fffffffffffffp-1022)=-0x1.fffffffffffffp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:669: RU fmal(0x1p-1074,-0x1p-1074,-0x1.fffffffffffffp-1022) want -0x1.fffffffffffffp-1022 got -0x0p+0 ulperr 9007199254740992.000 = 0x1p+53 + 0x0p+0
src/math/special/fma.h:670: bad fp exception: RU fmal(0x1p-1074,0x1p-1074,-0x1.fffffffffffffp-1022)=-0x1.ffffffffffffep-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:670: RU fmal(0x1p-1074,0x1p-1074,-0x1.fffffffffffffp-1022) want -0x1.ffffffffffffep-1022 got 0x1p-1074 ulperr 9007199254740992.000 = 0x1p+53 + 0x1p+0
src/math/special/fma.h:671: RU fmal(0x1p-1074,-0x1p-1074,0x1p-1074) want 0x1p-1074 got -0x0p+0 ulperr -1.000 = -0x1p+0 + 0x0p+0
src/math/special/fma.h:672: RU fmal(0x1p-1074,-0x1p-1074,-0x1p-1074) want -0x1p-1074 got -0x0p+0 ulperr 1.000 = 0x1p+0 + 0x0p+0
src/math/special/fma.h:673: RU fmal(0x1.0000000000001p+0,0x1p+0,0x1p+53) want 0x1.0000000000001p+53 got 0x1.000008p+12 ulperr -4503599358935040.000 = -0x1.fffffep+51 + 0x1p-1
src/math/special/fma.h:674: RU fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1p+53) want 0x1.0000000000001p+53 got 0x1.ffc02p+10 ulperr -4503599358935040.000 = -0x1.fffffep+51 + 0x1p-1
src/math/special/fma.h:675: RU fmal(0x1p+0,0x1.fffffffffffffp-1,0x1.fffffffffffffp+53) want 0x1p+54 got -0x1.ffffep+10 ulperr -4503599627370496.000 = -0x1p+52 + 0x1p-2
src/math/special/fma.h:676: RU fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffep+53) want 0x1.fffffffffffffp+53 got 0x1.ffc02p+10 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:677: RU fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1p-52) want 0x1.0000000000002p+0 got -0x1.fffffp-42 ulperr -4503599627370496.000 = -0x1p+52 + 0x1p-1
src/math/special/fma.h:678: RU fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.fffffffffffffp-53) want 0x1.0000000000002p+0 got -0x1.fffff8p-41 ulperr -4503599627370496.000 = -0x1p+52 + 0x1p-1
src/math/special/fma.h:679: RU fmal(0x1.0000000000005p+0,0x1.ffffffffffffbp-1,0x1p-52) want 0x1.0000000000004p+0 got -0x1.8fffff8p-37 ulperr -4503599627370496.000 = -0x1p+52 + 0x1p-1
src/math/special/fma.h:680: RU fmal(0x1.0000000000006p+0,0x1.ffffffffffffdp-1,0x1p-52) want 0x1.0000000000006p+0 got -0x1.1fffff8p-37 ulperr -4503599627370496.000 = -0x1p+52 + 0x1p-1
src/math/special/fma.h:699: RU fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffbp-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffff5p+0 got 0x1.6800008p-37 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:700: RU fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1p+0) want 0x1.ffffffffffff9p+0 got 0x1.b000008p-37 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:701: RU fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1.ffffffffffffcp-1) want 0x1.ffffffffffff7p+0 got 0x1.b000008p-37 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:702: RU fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffffap-1,0x1.ffffffffffff8p-1) want 0x1.ffffffffffff5p+0 got 0x1.b000008p-37 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:703: RU fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff9p-1,0x1.ffffffffffffdp-1) want 0x1.ffffffffffff7p+0 got 0x1.f800008p-37 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:704: RU fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff9p-1,0x1.ffffffffffff9p-1) want 0x1.ffffffffffff5p+0 got 0x1.f800008p-37 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:705: RU fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff8p-1,0x1.ffffffffffffep-1) want 0x1.ffffffffffff7p+0 got 0x1.2000004p-36 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:706: RU fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff8p-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffff5p+0 got 0x1.2000004p-36 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:707: RU fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.fffffffffffffp-1) want 0x1.ffffffffffff7p+0 got 0x1.4400004p-36 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:708: RU fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.ffffffffffffbp-1) want 0x1.ffffffffffff5p+0 got 0x1.4400004p-36 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:709: RU fmal(0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffff3p+0 got 0x1.4400004p-36 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1p-1
src/math/special/fma.h:710: RU fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffep-1) want 0x1p+1 got -0x1.fffffp-42 ulperr -4503599627370496.000 = -0x1p+52 + 0x1p-2
src/math/special/fma.h:711: RU fmal(0x1.0000000000001p+0,0x1.fffffffffffffp-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffffep+0 got -0x1.fffffp-42 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:712: RU fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.fffffffffffffp-1) want 0x1p+1 got -0x1.fffff8p-41 ulperr -4503599627370496.000 = -0x1p+52 + 0x1p-2
src/math/special/fma.h:713: RU fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.ffffffffffffbp-1) want 0x1.ffffffffffffep+0 got -0x1.fffff8p-41 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:714: RU fmal(0x1.0000000000001p+0,0x1.ffffffffffffep-1,0x1.ffffffffffff7p-1) want 0x1.ffffffffffffcp+0 got -0x1.fffff8p-41 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:715: RU fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1p+0) want 0x1p+1 got -0x1.7ffffcp-40 ulperr -4503599627370496.000 = -0x1p+52 + 0x1p-2
src/math/special/fma.h:716: RU fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1.ffffffffffffcp-1) want 0x1.ffffffffffffep+0 got -0x1.7ffffcp-40 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:717: RU fmal(0x1.0000000000001p+0,0x1.ffffffffffffdp-1,0x1.ffffffffffff8p-1) want 0x1.ffffffffffffcp+0 got -0x1.7ffffcp-40 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:718: RU fmal(0x1.0000000000001p+0,0x1.ffffffffffffcp-1,0x1.ffffffffffffdp-1) want 0x1.ffffffffffffep+0 got -0x1.fffffcp-40 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:719: RU fmal(0x1.0000000000001p+0,0x1.ffffffffffffcp-1,0x1.ffffffffffff9p-1) want 0x1.ffffffffffffcp+0 got -0x1.fffffcp-40 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:720: RU fmal(0x1.0000000000001p+0,0x1.ffffffffffffbp-1,0x1.ffffffffffffep-1) want 0x1.ffffffffffffep+0 got -0x1.3ffffep-39 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:721: RU fmal(0x1.0000000000001p+0,0x1.ffffffffffffbp-1,0x1.ffffffffffffap-1) want 0x1.ffffffffffffcp+0 got -0x1.3ffffep-39 ulperr -9007199254740992.000 = -0x1p+53 + 0x1p-1
src/math/special/fma.h:722: RU fmal(0x1.5872449b765b9p+0,0x1.c9acf91f8de2bp+0,0x1.9265607e4d168p+0) want 0x1.fd190c77c2a68p+1 got -0x1.b3fc37becffffp-4 ulperr -9195828849672192.000 = -0x1.055c76p+53 + 0x1.0001b4p-1
src/math/special/fma.h:723: RU fmal(0x1.81d010b146d0ep+0,0x1.2d3c680dc9071p+0,0x1.a80b69538754cp+0) want 0x1.b7040b44973a7p+1 got 0x1.4d0cb20197001p+1 ulperr -1864177136173056.000 = -0x1.a7dd64p+50 + 0x1.ffacbcp-2
src/math/special/fma.h:724: RU fmal(0x1.6a44f2252b6a2p+0,0x1.da452a378b832p+0,0x1.1fe2ce329104p+0) want 0x1.df842b6f48b13p+1 got 0x1.12e95c1ba4001p+0 ulperr -6017591705337856.000 = -0x1.560f7cp+52 + 0x1.ffdda2p-2
src/math/special/fma.h:725: RU fmal(0x1.096b1d26463eep+0,0x1.d846d3e34333p+0,0x1.721e3480922b8p+0) want 0x1.ade2909c026ap+1 got -0x1.a139d9b2bffffp-1 ulperr -9397595675820032.000 = -0x1.0b1882p+53 + 0x1.000d0ap-1
src/math/special/fma.h:726: RU fmal(0x1.99bd3434c454bp+0,0x1.03cb8e4115bdep+0,0x1.109f107188b08p+0) want 0x1.5837a47d37fafp+1 got 0x1.cfdec0c00a001p+0 ulperr -1975290892910592.000 = -0x1.c1211p+50 + 0x1.ffc604p-2
src/math/special/fma.h:727: RU fmal(0x1.ba930a0a78ed2p+0,0x1.8c24e8d67f636p+0,0x1.ac49dbfbf8affp+0) want 0x1.164947ae6a5dap+2 got -0x1.33e3b04ecffffp-2 ulperr -5234191281160192.000 = -0x1.298782p+52 + 0x1.000268p-1
src/math/special/fma.h:728: RU fmal(0x1.be224ad773191p+0,0x1.d96b77169731fp+0,0x1.662cfb75d8edep+0) want 0x1.27cd67e720f79p+2 got 0x1.e4711611c7801p+1 ulperr -942615600037888.000 = -0x1.aca6e6p+49 + 0x1.ffc372p-2
src/math/special/fma.h:729: RU fmal(0x1.59e7a1b0bdb3cp+0,0x1.2decba4d46421p+0,0x1.88f4062e96df5p+0) want 0x1.90749e4794f7ap+1 got -0x1.b3c84a9a87fffp-1 ulperr -8961479327875072.000 = -0x1.fd66bp+52 + 0x1.000d9ep-1
src/math/special/fma.h:730: RU fmal(0x1.22edf4b4da9a7p+0,0x1.dfa8d65f506cdp+0,0x1.2799208da2fbap+0) want 0x1.a45a1e99ed7a9p+1 got 0x1.a0bdfb8976001p-1 ulperr -5562059420860416.000 = -0x1.3c2a9ep+52 + 0x1.ffe5f4p-2
src/math/special/fma.h:731: RU fmal(0x1.ad5b991a2a279p+0,0x1.f02fd26706024p+0,0x1.831cdd5c8797cp+0) want 0x1.30d3a2ac90a61p+2 got 0x1.c7c15e1c82001p+1 ulperr -1353701616779264.000 = -0x1.33cbcep+50 + 0x1.ffc708p-2
src/math/special/fma.h:732: RU fmal(0x1.531f9620e764ap+0,0x1.cad61b54d4425p+0,0x1.df817cae8a9afp+0) want 0x1.0fd4e7f8671ddp+2 got 0x1.8e74e26059001p+1 ulperr -1277252004216832.000 = -0x1.2269dap+50 + 0x1.ffce32p-2
src/math/special/fma.h:733: RU fmal(0x1.629a5ad79494fp+0,0x1.049e58693f4c4p+0,0x1.45b0109e4d00cp+0) want 0x1.5758154e14966p+1 got -0x1.01173c9c1ffffp-3 ulperr -6322846842224640.000 = -0x1.676988p+52 + 0x1.000202p-1
src/math/special/fma.h:734: RU fmal(0x1.2f52b53f9240ap+0,0x1.1d5c686dbb0dap+0,0x1.6da3e392a4fd4p+0) want 0x1.5fe03a6795913p+1 got 0x1.5bdb7d9084001p+0 ulperr -3130480060792832.000 = -0x1.63e4f6p+51 + 0x1.ffd484p-2
src/math/special/fma.h:735: RU fmal(0x1.058667552b49ep+0,0x1.23307bacc1c42p+0,0x1.5b059b47cd8f5p+0) want 0x1.423f752486d14p+1 got -0x1.4bfb042743fffp+0 ulperr -8589175993401344.000 = -0x1.e83cf6p+52 + 0x1.0014cp-1
src/math/special/fma.h:736: RU fmal(0x1.a717d95337ed8p+0,0x1.2b1c37846aaadp+0,0x1.be65672f885b1p+0) want 0x1.d65e72303c076p+1 got -0x1.7e0573ec03fffp+1 ulperr -14995406941323264.000 = -0x1.aa31f2p+53 + 0x1.002fcp-1
src/math/special/fma.h:737: RU fmal(0x1.deb79287b3d32p+0,0x1.62776b829babap+0,0x1.67daf18bd2eb1p+0) want 0x1.ff5a0d45c69d7p+1 got 0x1.ad881652a0001p-3 ulperr -8523519902089216.000 = -0x1.e4818ap+52 + 0x1.fff94ap-2
src/math/special/fma.h:738: RU fmal(0x1.fbf12d3a6de91p+0,0x1.879fe6124f11p+0,0x1.9f3f1247a8641p+0) want 0x1.2a126c6980019p+2 got 0x1.45e3d61a84001p+2 ulperr 489379780886528.000 = 0x1.bd169cp+48 + 0x1.ffae88p-2
src/math/special/fma.h:739: RU fmal(0x1.c589628460e01p+0,0x1.e1bec1c797533p+0,0x1.349f30cdb84bbp+0) want 0x1.2286118b6f6e6p+2 got -0x1.8e9d95e0667ffp+1 ulperr -8617206560587776.000 = -0x1.e9d4dcp+52 + 0x1.0018eap-1
src/math/special/fma.h:740: RU fmal(0x1.46fd6c2c924ebp+0,0x1.65e2f02e730a1p+0,0x1.37739d2751098p+0) want 0x1.804a71c1f1273p+1 got 0x1.855d7947cb001p+0 ulperr -3335623268106240.000 = -0x1.7b376ap+51 + 0x1.ffcf54p-2
src/math/special/fma.h:741: RU fmal(0x1.f99e595ae11fdp+0,0x1.bd33d9a1d81bp+0,0x1.932a2a2e244c1p+0) want 0x1.409e34f8f2f8ap+2 got -0x1.7a49668943fffp+2 ulperr -12295260860317696.000 = -0x1.5d73ccp+53 + 0x1.002f4ap-1
src/math/special/fma.h:742: RU fmal(0x1.59ea1e56bfe55p+0,0x1.6f46b7d412a44p+0,0x1.80f2bc9a32cc3p+0) want 0x1.b89c7640e33p+1 got -0x1.ca180bfb5ffffp-3 ulperr -8254993178034176.000 = -0x1.d53df6p+52 + 0x1.000394p-1
src/math/special/fma.h:743: RU fmal(0x1.61490fcb44129p+0,0x1.0038ec4fc35c2p+0,0x1.df7436ed7a7b7p+0) want 0x1.a085ea68d05dp+1 got -0x1.5ed2c690f6fffp+1 ulperr -13499301254660096.000 = -0x1.7fac58p+53 + 0x1.002bdap-1
src/math/special/fma.h:744: RU fmal(0x1.d41b98788502bp+0,0x1.1a7b77843aca6p+0,0x1.05be891837d36p+0) want 0x1.8523596cecedap+1 got -0x1.48c8fc403bfffp-1 ulperr -8291801584631808.000 = -0x1.d75598p+52 + 0x1.000a46p-1
src/math/special/fma.h:745: RU fmal(0x1.3153cf6f69af9p+0,0x1.aaa947e38e57ap+0,0x1.8519f9b590645p+0) want 0x1.c0fcab7b46369p+1 got 0x1.25f4f4bd50001p-3 ulperr -7575453653008384.000 = -0x1.ae9d5cp+52 + 0x1.fffb68p-2
src/math/special/fma.h:746: RU fmal(0x1.c25a1f73581aap+0,0x1.0a51ffca372ap+0,0x1.0c77e3ebac5f3p+0) want 0x1.707ce48c7d72ep+1 got -0x1.3261c9a0dffffp+1 ulperr -11872435288670208.000 = -0x1.516f56p+53 + 0x1.00264cp-1
src/math/special/fma.h:747: RU fmal(0x1.829c2cde44b7p+0,0x1.f692e86d8cb36p+0,0x1.455e72d264bfp+0) want 0x1.0f16a3b8b3f98p+2 got -0x1.684386465ffffp+0 ulperr -6353494655107072.000 = -0x1.692784p+52 + 0x1.000b42p-1
src/math/special/fma.h:748: RU fmal(0x1.94729588dcc69p+0,0x1.c3bb794c6edf8p+0,0x1.9da4e94d262d2p+0) want 0x1.19d4bd84d9fd3p+2 got 0x1.e1b9a27570001p-1 ulperr -3898698849320960.000 = -0x1.bb3b12p+51 + 0x1.fff0f2p-2
src/math/special/fma.h:749: RU fmal(0x1.e6a5e7e39c3d5p+0,0x1.1b69af2bdd978p+0,0x1.e7ef1eafa119cp+0) want 0x1.00ac5b44c9f32p+2 got -0x1.6777d5d393fffp+1 ulperr -7677358731427840.000 = -0x1.b46846p+52 + 0x1.001678p-1
src/math/special/fma.h:750: bad fp exception: RU fmal(0x1.bc9ba1320700cp-1022,0x1.981f2e1a451a8p-2,0x1.046144efc0ceap-1022)=0x1.b594d0e4368fp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:750: RU fmal(0x1.bc9ba1320700cp-1022,0x1.981f2e1a451a8p-2,0x1.046144efc0ceap-1022) want 0x1.b594d0e4368fp-1022 got -0x1.9dedc9560fffep-1023 ulperr -11338968138252288.000 = -0x1.4245dap+53 + 0x1.0019dep-1
src/math/special/fma.h:751: RU fmal(0x1.022db53c98d14p-1022,0x1.21157eef74848p-2,0x1.2f880432b1bc1p-1022) want 0x1.786ad60a02b3ep-1022 got -0x1.150255ac97fffp-1022 ulperr -11495198647386112.000 = -0x1.46b694p+53 + 0x1.0022ap-1
src/math/special/fma.h:752: bad fp exception: RU fmal(0x1.805a491fa9597p-1022,0x1.e0f49d782ff87p-2,0x1.172a62346206p-1022)=0x1.cbb085199a3f6p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:752: RU fmal(0x1.805a491fa9597p-1022,0x1.e0f49d782ff87p-2,0x1.172a62346206p-1022) want 0x1.cbb085199a3f6p-1022 got -0x1.6ed115da2f7fep-1023 ulperr -11313497908445184.000 = -0x1.418c88p+53 + 0x1.0016eep-1
src/math/special/fma.h:753: bad fp exception: RU fmal(0x1.adbc3a9d816dep-1022,0x1.e039d4431e3cdp-2,0x1.93ceef6fe18a2p-1022)=0x1.2eabb7dc0e2f1p-1021, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:753: RU fmal(0x1.adbc3a9d816dep-1022,0x1.e039d4431e3cdp-2,0x1.93ceef6fe18a2p-1022) want 0x1.2eabb7dc0e2f1p-1021 got 0x1.ef7b6794e3002p-1023 ulperr -3145487213395968.000 = -0x1.6599bap+51 + 0x1.ffe108p-2
src/math/special/fma.h:754: RU fmal(0x1.645aa5c2df3afp-1022,0x1.649edfcad854fp-2,0x1.8b43e0bbaeb01p-1022) want 0x1.03af571d2b505p-1021 got 0x1.0ce86163c0201p-1021 ulperr 162249452814336.000 = 0x1.27214ap+47 + 0x1.ffbcc6p-2
src/math/special/fma.h:755: bad fp exception: RU fmal(0x1.133474a2c0fb1p-1022,0x1.72442bcbfa01dp-2,0x1.4a1a21971c5dbp-1022)=0x1.ad9ce7fcefa4p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:755: RU fmal(0x1.133474a2c0fb1p-1022,0x1.72442bcbfa01dp-2,0x1.4a1a21971c5dbp-1022) want 0x1.ad9ce7fcefa4p-1022 got -0x1.12bc4931e5ff8p-1025 ulperr -8161979755659264.000 = -0x1.cff47p+52 + 0x1.00044ap-1
src/math/special/fma.h:756: RU fmal(0x1.8ee3feb00c3e7p-1022,0x1.53bd9353313bcp-2,0x1.5501b57dc3b6fp-1022) want 0x1.d9598906f0bb4p-1022 got -0x1.4660b83f56fffp-1022 ulperr -14068955652030464.000 = -0x1.8fdd2p+53 + 0x1.0028ccp-1
src/math/special/fma.h:757: RU fmal(0x1.161225cfa61e2p-1022,0x1.b6dd69a0af5bp-2,0x1.924ffc3ead5c3p-1022) want 0x1.04be6fc25367cp-1021 got -0x1.f3ab56daa7fffp-1022 ulperr -8982192344530944.000 = -0x1.fe941ap+52 + 0x1.001f3ap-1
src/math/special/fma.h:758: bad fp exception: RU fmal(0x1.820f7faf219afp-1022,0x1.06717ae771f6dp-2,0x1.0dc5035f5e2afp-1022)=0x1.70b6c3169f044p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:758: RU fmal(0x1.820f7faf219afp-1022,0x1.06717ae771f6dp-2,0x1.0dc5035f5e2afp-1022) want 0x1.70b6c3169f044p-1022 got -0x1.a779baefbe7fep-1023 ulperr -10211413595258880.000 = -0x1.2239dp+53 + 0x1.001a78p-1
src/math/special/fma.h:759: RU fmal(0x1.ce0e2ea55040ep-1022,0x1.ce5a55fa3828dp-2,0x1.f2f444d50ce59p-1022) want 0x1.61ca36f5a8a7ap-1021 got -0x1.173f0cea127ffp-1022 ulperr -8680213730820096.000 = -0x1.ed69bcp+52 + 0x1.001174p-1
src/math/special/fma.h:760: bad fp exception: RU fmal(0x1.a7a271c67cdcfp-1022,0x1.1e979090e218p-2,0x1.b1f10b6e2177ap-1022)=0x1.1440cf1c105ecp-1021, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:760: RU fmal(0x1.a7a271c67cdcfp-1022,0x1.1e979090e218p-2,0x1.b1f10b6e2177ap-1022) want 0x1.1440cf1c105ecp-1021 got -0x1.f88fda5ffffp-1030 ulperr -4877233327964160.000 = -0x1.153d16p+52 + 0x1.00002p-1
src/math/special/fma.h:761: bad fp exception: RU fmal(0x1.76df065829dc6p-1022,0x1.fb22ab1b86b8bp-2,0x1.6966267f317cp-1022)=0x1.1186e1f77012ep-1021, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:761: RU fmal(0x1.76df065829dc6p-1022,0x1.fb22ab1b86b8bp-2,0x1.6966267f317cp-1022) want 0x1.1186e1f77012ep-1021 got -0x1.2ffba526fbff8p-1025 ulperr -5146168610783232.000 = -0x1.24869cp+52 + 0x1.00026p-1
src/math/special/fma.h:762: bad fp exception: RU fmal(0x1.8b004a28b70dbp-1022,0x1.48e5805a8b453p-2,0x1.0ea791f716557p-1022)=0x1.8d86310bad176p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:762: RU fmal(0x1.8b004a28b70dbp-1022,0x1.48e5805a8b453p-2,0x1.0ea791f716557p-1022) want 0x1.8d86310bad176p-1022 got -0x1.1b755c367f7fep-1023 ulperr -9486645380251648.000 = -0x1.0da06ep+53 + 0x1.0011b8p-1
src/math/special/fma.h:763: RU fmal(0x1.fb3391a4b1d23p-1022,0x1.4d8705b057caep-2,0x1.d026cb6dae73bp-1022) want 0x1.3aad18b424c68p-1021 got -0x1.0a1784c7c6bffp-1021 ulperr -10216978799132672.000 = -0x1.22624ep+53 + 0x1.002142p-1
src/math/special/fma.h:764: bad fp exception: RU fmal(0x1.a5ba39730e197p-1022,0x1.794df89b1cc49p-2,0x1.24a0a388d0b6bp-1022)=0x1.c0048fd33a418p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:764: RU fmal(0x1.a5ba39730e197p-1022,0x1.794df89b1cc49p-2,0x1.24a0a388d0b6bp-1022) want 0x1.c0048fd33a418p-1022 got -0x1.d026e457f0ffcp-1024 ulperr -9922974329077760.000 = -0x1.1a0724p+53 + 0x1.000e82p-1
src/math/special/fma.h:765: bad fp exception: RU fmal(0x1.aa9eff070281cp-1022,0x1.fab05661b48ebp-2,0x1.cbe2af6c69c6ep-1022)=0x1.4f7ddbe122765p-1021, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:765: RU fmal(0x1.aa9eff070281cp-1022,0x1.fab05661b48ebp-2,0x1.cbe2af6c69c6ep-1022) want 0x1.4f7ddbe122765p-1021 got 0x1.9e529858da002p-1023 ulperr -4079820841418752.000 = -0x1.cfd26ap+51 + 0x1.ffe61ap-2
src/math/special/fma.h:766: bad fp exception: RU fmal(0x1.758bbff0ec4bap-1022,0x1.a4a197f3fa424p-2,0x1.47761e8d142ddp-1022)=0x1.e0e762ee2e7c6p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:766: RU fmal(0x1.758bbff0ec4bap-1022,0x1.a4a197f3fa424p-2,0x1.47761e8d142ddp-1022) want 0x1.e0e762ee2e7c6p-1022 got -0x1.e2fe0f96ebffep-1023 ulperr -12708595627982848.000 = -0x1.693334p+53 + 0x1.001e3p-1
src/math/special/fma.h:767: RU fmal(0x1.4dab43918a9a8p-1022,0x1.ed667442b4751p-2,0x1.3f25f82e02e3ep-1022) want 0x1.dfec0ee732dcbp-1022 got 0x1.6a41c4d18a001p-1022 ulperr -2069987942465536.000 = -0x1.d6a928p+50 + 0x1.ffa57p-2
src/math/special/fma.h:768: RU fmal(0x1.7943735951931p-1022,0x1.fa6a357c5c9ddp-2,0x1.0bed44b0b71b4p-1022) want 0x1.c6803a6059abfp-1022 got 0x1.0e970cce13401p-1022 ulperr -3235393763803136.000 = -0x1.6fd25ap+51 + 0x1.ffbc5ap-2
src/math/special/fma.h:769: bad fp exception: RU fmal(0x1.66c26bc29a5e8p-1022,0x1.3faed079f761ap-2,0x1.163ff906dd651p-1022)=0x1.8640492c4595ap-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:769: RU fmal(0x1.66c26bc29a5e8p-1022,0x1.3faed079f761ap-2,0x1.163ff906dd651p-1022) want 0x1.8640492c4595ap-1022 got -0x1.3271a1b37ffep-1027 ulperr -7033839486500864.000 = -0x1.8fd3d6p+52 + 0x1.000132p-1
src/math/special/fma.h:770: RU fmal(0x1.f52172c56bdf5p-1022,0x1.672b2de422734p-2,0x1.7bc5d708e5a34p-1022) want 0x1.15c5b95145cc7p-1021 got 0x1.3cf4f71d18801p-1021 ulperr 689341714137088.000 = 0x1.3979fp+49 + 0x1.ffb0c2p-2
src/math/special/fma.h:771: bad fp exception: RU fmal(0x1.2f94e89aa7558p-1022,0x1.dfa6d30835f5ep-2,0x1.59c6b0d504cf9p-1022)=0x1.e7fa0dd76fbfp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:771: RU fmal(0x1.2f94e89aa7558p-1022,0x1.dfa6d30835f5ep-2,0x1.59c6b0d504cf9p-1022) want 0x1.e7fa0dd76fbfp-1022 got -0x1.60a5d541afffcp-1024 ulperr -10135538703007744.000 = -0x1.2011cp+53 + 0x1.000b06p-1
src/math/special/fma.h:772: bad fp exception: RU fmal(0x1.6159897ae533cp-1022,0x1.f3b8892e3a3c8p-2,0x1.09ca702b7759p-1022)=0x1.b63a7f56fce2p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:772: RU fmal(0x1.6159897ae533cp-1022,0x1.f3b8892e3a3c8p-2,0x1.09ca702b7759p-1022) want 0x1.b63a7f56fce2p-1022 got -0x1.497a9bc51fffcp-1024 ulperr -9158460486713344.000 = -0x1.044c92p+53 + 0x1.000a4cp-1
src/math/special/fma.h:773: RU fmal(0x1.f73d5f4e81fd8p-1022,0x1.7ccff2642124ap-2,0x1.e7d836a0c8308p-1022) want 0x1.517f1763126d4p-1021 got -0x1.06939f3371fffp-1021 ulperr -10556596895612928.000 = -0x1.2c095ap+53 + 0x1.0020d2p-1
src/math/special/fma.h:774: RU fmal(0x1.b4328925969fbp-1022,0x1.8fa02832a22d5p-2,0x1.2084598e2f8c6p-1022) want 0x1.cabf43838dc52p-1022 got -0x1.7c61d65f0a3ffp-1022 ulperr -14762118276448256.000 = -0x1.a3908cp+53 + 0x1.002f8cp-1
src/math/special/fma.h:775: bad fp exception: RU fmal(0x1.66ee60a92676fp-1022,0x1.eddd2e7681ce4p-2,0x1.b81d57daeb3a7p-1022)=0x1.329c918ffb683p-1021, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:775: RU fmal(0x1.66ee60a92676fp-1022,0x1.eddd2e7681ce4p-2,0x1.b81d57daeb3a7p-1022) want 0x1.329c918ffb683p-1021 got 0x1.cd379885b8008p-1025 ulperr -4886854591578112.000 = -0x1.15c918p+52 + 0x1.fff8ccp-2
src/math/special/fma.h:776: bad fp exception: RU fmal(0x1.ff2737585895dp-1022,0x1.fb4bf3828ae4ap-2,0x1.4a866847740fp-1022)=0x1.23e07e4dbbeabp-1021, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:776: RU fmal(0x1.ff2737585895dp-1022,0x1.fb4bf3828ae4ap-2,0x1.4a866847740fp-1022) want 0x1.23e07e4dbbeabp-1021 got 0x1.46c53f7571002p-1023 ulperr -3697601232764928.000 = -0x1.a45e5cp+51 + 0x1.ffeb94p-2
src/math/special/fma.h:777: bad fp exception: RU fmal(0x1.5e2008d269a86p-1022,0x1.507bbbe4d78eep-2,0x1.6220c6f83f636p-1022)=0x1.d52d9874f1c75p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:777: RU fmal(0x1.5e2008d269a86p-1022,0x1.507bbbe4d78eep-2,0x1.6220c6f83f636p-1022) want 0x1.d52d9874f1c75p-1022 got 0x1.eda0503c4a002p-1023 ulperr -3911886277967872.000 = -0x1.bcbaep+51 + 0x1.ffc24cp-2
src/math/special/fma.h:778: bad fp exception: RU fmal(0x1.ce7e2e5812d86p-1022,0x1.0e6689d092e5fp-2,0x1.1e43fd55c3458p-1022)=0x1.9864925e2fb1p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:778: RU fmal(0x1.ce7e2e5812d86p-1022,0x1.0e6689d092e5fp-2,0x1.1e43fd55c3458p-1022) want 0x1.9864925e2fb1p-1022 got -0x1.53ae580e8bff8p-1025 ulperr -7931489261977600.000 = -0x1.c2da5cp+52 + 0x1.00054ep-1
src/math/special/fma.h:779: RU fmal(0x1.7b353b81e793dp-1022,0x1.82b426f874c6dp-2,0x1.d92b19d21fd5cp-1022) want 0x1.342fb0c544a79p-1021 got 0x1.2af4c8aebe401p-1022 ulperr -2792024021401600.000 = -0x1.3d6a98p+51 + 0x1.ffdaa2p-2
src/math/special/fma.h:780: bad fp exception: RU fmal(0x1.5be667823370ap-1022,0x1.a8a99b163869bp-2,0x1.95456b68dc3bcp-1022)=0x1.12c638de03c71p-1021, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:780: RU fmal(0x1.5be667823370ap-1022,0x1.a8a99b163869bp-2,0x1.95456b68dc3bcp-1022) want 0x1.12c638de03c71p-1021 got 0x1.49af7fc787002p-1023 ulperr -3383908095754240.000 = -0x1.80b4bp+51 + 0x1.ffeb66p-2
src/math/special/fma.h:781: bad fp exception: RU fmal(0x1.17b0fc6c850e5p-1022,0x1.d1d0a4853c315p-2,0x1.36b79f7c0c24p-1022)=0x1.b5f2baff5635dp-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:781: RU fmal(0x1.17b0fc6c850e5p-1022,0x1.d1d0a4853c315p-2,0x1.36b79f7c0c24p-1022) want 0x1.b5f2baff5635dp-1022 got 0x1.6a1930472401p-1026 ulperr -7306333686595584.000 = -0x1.9f5126p+52 + 0x1.fffa58p-2
src/math/special/fma.h:782: RU fmal(0x1.bd97819bacfd8p-1022,0x1.2c25f267ba4eep-2,0x1.804b5204a3f3ap-1022) want 0x1.01739c190fd97p-1021 got 0x1.b9e166e6b4001p-1022 ulperr -642314640818176.000 = -0x1.241744p+49 + 0x1.ffc8c4p-2
src/math/special/fma.h:783: RU fmal(0x1.596577053873dp-1022,0x1.3562ab2d29949p-2,0x1.b3f1ee75db6e7p-1022) want 0x1.0e268a498009bp-1021 got 0x1.e8136bc159401p-1022 ulperr -459377991483392.000 = -0x1.a1cd46p+48 + 0x1.ffc2fep-2
src/math/special/fma.h:784: bad fp exception: RU fmal(0x1.3c7a68cf0f7b3p-1022,0x1.9a55c15b167bdp-2,0x1.7635b7b163c07p-1022)=0x1.f5073b93b7b81p-1022, want INEXACT got INEXACT|UNDERFLOW
src/math/special/fma.h:784: RU fmal(0x1.3c7a68cf0f7b3p-1022,0x1.9a55c15b167bdp-2,0x1.7635b7b163c07p-1022) want 0x1.f5073b93b7b81p-1022 got 0x1.75f9a97213802p-1023 ulperr -5524660993130496.000 = -0x1.3a0a66p+52 + 0x1.ffd14p-2
src/math/special/fma.h:785: RU fmal(0x1.5825164bc4068p-1022,0x1.dcbb6e5ff3245p-2,0x1.52fc3be0e84dap-1022) want 0x1.f334771c2dcfbp-1022 got 0x1.2b86ba6b02001p-1022 ulperr -3512783958179840.000 = -0x1.8f5b78p+51 + 0x1.ffb51ep-2
src/math/special/fma.h:786: RU fmal(0x1.139ea77b760ecp+1022,0x1.9b25f2fd017eap+2,-0x1.bc16788922b6fp+1023) want 0x1.b93aac527380fp+1023 got 0x1.c3ec4f2ee0001p+1022 ulperr -3787028357447680.000 = -0x1.ae8908p+51 + 0x1.ffc782p-2
src/math/special/fma.h:787: RU fmal(0x1.0e6f9c1657d7cp+1022,0x1.4d5c6b55ab5f1p+2,-0x1.e027dd5742e2cp+1023) want 0x1.c0538372b4bbfp+1022 got 0x1.54dede6de0001p+1021 ulperr -4888708943708160.000 = -0x1.15e414p+52 + 0x1.ffd564p-2
src/math/special/fma.h:788: RU fmal(0x1.1182524fa411cp+1022,0x1.a3dba56842d19p+2,-0x1.c1ad59474d71fp+1023) want 0x1.bf78969300a77p+1023 got 0x1.8651491ef0001p+1022 ulperr -4438724683235328.000 = -0x1.f89fe4p+51 + 0x1.ffcf36p-2
src/math/special/fma.h:789: RU fmal(0x1.1cbf4fb8ec82p+1022,0x1.5e32019a84fbbp+2,-0x1.985af08f32edep+1023) want 0x1.72af6bbad4a29p+1023 got 0x1.a68c1c1ec0001p+1023 ulperr 912367152005120.000 = 0x1.9ee584p+49 + 0x1.ff965cp-2
src/math/special/fma.h:790: RU fmal(0x1.311e25c6db346p+1022,0x1.4e30db6c4b51dp+2,-0x1.7681f7a9786a7p+1023) want 0x1.a61d29434fc14p+1023 got -0x1.791d1988fffffp+1017 ulperr -7529566222417920.000 = -0x1.ac019cp+52 + 0x1.0000bcp-1
src/math/special/fma.h:791: RU fmal(0x1.1201cf577052fp+1022,0x1.59730b2db7a16p+2,-0x1.56f1a64a078d5p+1023) want 0x1.8c8d801df34dap+1023 got -0x1.3048609fd7fffp+1022 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1.001304p-1
src/math/special/fma.h:792: RU fmal(0x1.3e52335b76e81p+1022,0x1.4dbd56f857479p+2,-0x1.509340c11bd2ep+1023) want 0x1.ed6576837f654p+1023 got -0x1.e498d5441bfffp+1022 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1.001e4ap-1
src/math/special/fma.h:793: RU fmal(0x1.18566b4f843cbp+1022,0x1.444fba10eaf29p+2,-0x1.f927beae57f0ap+1023) want 0x1.9a433b979655ap+1022 got 0x1.a048d2820c001p+1022 ulperr 105937230626816.000 = 0x1.8165bcp+46 + 0x1.004bf6p-1
src/math/special/fma.h:794: RU fmal(0x1.3fbe544fe1be8p+1022,0x1.2d2a5fda03639p+2,-0x1.007407dbfd03cp+1023) want 0x1.efdb644b613e6p+1023 got -0x1.e14223655ffffp+1022 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1.001e14p-1
src/math/special/fma.h:795: RU fmal(0x1.263a0d3bc2e4p+1022,0x1.4cc198adbc651p+2,-0x1.734b1c1f7fdb8p+1023) want 0x1.899878afc0fa3p+1023 got 0x1.a136204480001p+1023 ulperr 415454233362432.000 = 0x1.79da7ap+48 + 0x1.ff97b2p-2
src/math/special/fma.h:796: RU fmal(0x1.5bf4aec8efc8ep+1022,0x1.555f0341516c9p+2,-0x1.c706408acd14cp+1023) want 0x1.d8f5e18b868bdp+1023 got 0x1.3e5679fdf8001p+1022 ulperr -5520279589617664.000 = -0x1.39caa4p+52 + 0x1.ffd836p-2
src/math/special/fma.h:797: RU fmal(0x1.1e57f1af78279p+1022,0x1.34bc0c7f082b3p+2,-0x1.497b92c1365edp+1023) want 0x1.692cb7ec68a94p+1023 got -0x1.c0a1f29b27fffp+1021 ulperr -8326959113175040.000 = -0x1.d95534p+52 + 0x1.000e06p-1
src/math/special/fma.h:798: RU fmal(0x1.1d9824cd73511p+1022,0x1.1d557ddfe47ffp+2,-0x1.556cdb1d20a72p+1023) want 0x1.2736a6b6e35f3p+1023 got 0x1.bc6f9c9778001p+1021 ulperr -3238800209739776.000 = -0x1.70357ep+51 + 0x1.ffe43ap-2
src/math/special/fma.h:799: RU fmal(0x1.1ff85a24aff31p+1022,0x1.39ab374b2680dp+2,-0x1.35e6b07b651b8p+1023) want 0x1.8bc7ce2087081p+1023 got 0x1.84b319bafa001p+1023 ulperr -124568110891008.000 = -0x1.c52d18p+46 + 0x1.ff9ed4p-2
src/math/special/fma.h:800: RU fmal(0x1.0449b3965227ep+1022,0x1.4430d4441f9f2p+2,-0x1.a6966c96307ep+1023) want 0x1.d94eda8c81772p+1022 got -0x1.992ed6b71ffffp+1021 ulperr -11925733685329920.000 = -0x1.52f322p+53 + 0x1.001992p-1
src/math/special/fma.h:801: RU fmal(0x1.3c91fa00fd0c7p+1022,0x1.1b6661c0b0303p+2,-0x1.f1f2846b64483p+1023) want 0x1.95eae0d2644d4p+1022 got 0x1.9985d8eaa0001p+1019 ulperr -6240425346072576.000 = -0x1.62ba24p+52 + 0x1.00799ap-1
src/math/special/fma.h:802: RU fmal(0x1.0979b36d46534p+1022,0x1.12fa205f41f7fp+2,-0x1.a83ecf4544a63p+1023) want 0x1.2420f34e2aa3dp+1022 got -0x1.335a0fe67ffffp+1019 ulperr -5815056080044032.000 = -0x1.4a8c34p+52 + 0x1.ff099ap-2
src/math/special/fma.h:803: RU fmal(0x1.4c89df582a599p+1022,0x1.55f3dc473ea8fp+2,-0x1.e35037292ddfp+1023) want 0x1.95109fdbc3772p+1023 got -0x1.afa3b29623fffp+1022 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1.001afap-1
src/math/special/fma.h:804: RU fmal(0x1.35ee0a669c4fbp+1022,0x1.2263cb63f386ap+2,-0x1.449218ae35ac7p+1023) want 0x1.7a8ed977d817bp+1023 got 0x1.47da9ddfb8001p+1022 ulperr -3775828693352448.000 = -0x1.ad4314p+51 + 0x1.ffd704p-2
src/math/special/fma.h:805: RU fmal(0x1.117cc860f61bcp+1022,0x1.440985b25d994p+2,-0x1.d7a7d82000449p+1023) want 0x1.b960b7088e75p+1022 got 0x1.ddfba372c0001p+1022 ulperr 643964982001664.000 = 0x1.24d764p+49 + 0x1.00444p-1
src/math/special/fma.h:806: RU fmal(0x1.1e78a37be320fp+1022,0x1.0db0fce62287bp+2,-0x1.376337da5eb53p+1023) want 0x1.24326b9956dfcp+1023 got -0x1.d2881b3595fffp+1023 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1.003a52p-1
src/math/special/fma.h:807: RU fmal(0x1.0c79b5c8331c2p+1022,0x1.0aba6ea746b5p+2,-0x1.c86f1fcaf0741p+1023) want 0x1.9c135bb2cff85p+1021 got -0x1.cc298babfffffp+1019 ulperr -9273125376098304.000 = -0x1.078edep+53 + 0x1.fe1cc2p-2
src/math/special/fma.h:808: RU fmal(0x1.556c4c072f272p+1022,0x1.347758d7d4eb5p+2,-0x1.c6fe4f24b248dp+1023) want 0x1.6fcc9f756df6ep+1023 got -0x1.f6f4c76597fffp+1022 ulperr -9007198717870080.000 = -0x1.fffffep+52 + 0x1.001f7p-1
src/math/special/fma.h:809: RU fmal(-0x1.e8349b891b2fp-1,0x1.4a6dec9b72578p-1,0x1.3b6151ce809ddp-1) want 0x1.3a62fe330b356p-11 got -0x1.d97120fffffffp-11 ulperr -13859626462216192.000 = -0x1.89ea0ep+53 + 0x1.003b2ep-1
src/math/special/fma.h:810: RU fmal(0x1.2996632ac7d74p-1,-0x1.bb3c58b654d94p-1,0x1.01a6660e64a31p-1) want 0x1.ed045bb956a8fp-15 got -0x1.070d61fffffffp-15 ulperr -13300911346548736.000 = -0x1.7a08dep+53 + 0x1.0aa0e2p-1
src/math/special/fma.h:811: RU fmal(-0x1.c602e894c1df8p-1,0x1.a1c980e7d3f94p-1,0x1.7271244b43386p-1) want -0x1.ba251fe026e5bp-15 got -0x1.af2b6cp-15 ulperr 193081311756288.000 = 0x1.5f367ep+47 + 0x1.fa6bcap-2
src/math/special/fma.h:812: RU fmal(-0x1.c84baf47e85cp-1,0x1.770b5149ef2ep-1,0x1.4d80f139320bap-1) want -0x1.79277433b9e23p-10 got 0x1.d4b6fp-11 ulperr 10757823629623296.000 = 0x1.31c178p+53 + 0x1.ffc56ap-2
src/math/special/fma.h:813: RU fmal(-0x1.36e667dcf9c6p-1,0x1.2591f82556b88p-1,0x1.2452a0f795f95p-1) want 0x1.c83c8e63c15ap-3 got -0x1.221ccbfffffffp-12 ulperr -8036166204915712.000 = -0x1.c8cd9cp+52 + 0x1.000012p-1
src/math/special/fma.h:814: RU fmal(0x1.88b2cede61e4cp-1,-0x1.71dcab5ad9e9p-3,0x1.32b27fea2ae97p-3) want 0x1.70461909b25e3p-7 got -0x1.affe57fffffffp-17 ulperr -6486162973655040.000 = -0x1.70b218p+52 + 0x1.00000ep-1
src/math/special/fma.h:815: RU fmal(0x1.8d1e44002c98p-3,-0x1.af9fdfb347834p-1,0x1.e280942fb4146p-4) want -0x1.761ac23896dfdp-5 got 0x1.0bec48p-14 ulperr 6590522625884160.000 = 0x1.76a0bap+52 + 0x1.ffffdep-2
src/math/special/fma.h:816: RU fmal(0x1.236e8cb9492c8p-1,-0x1.d37443a57f1c4p-1,0x1.ca10df801aabcp-4) want -0x1.a1a2cdf0138f9p-2 got 0x1.f090cab7p-5 ulperr 8439088898113536.000 = 0x1.dfb4e8p+52 + 0x1.fff07cp-2
src/math/special/fma.h:817: RU fmal(-0x1.6ad943e610fb8p-1,-0x1.cef92a7bb18bcp-1,0x1.f28587d8fb0ep-4) want 0x1.866b5204b9aedp-1 got -0x1.8c9eb9a6fffffp-5 ulperr -7304415446827008.000 = -0x1.9f353cp+52 + 0x1.00031ap-1
src/math/special/fma.h:818: RU fmal(-0x1.60a8569a5d894p-1,-0x1.ca07e29dd171cp-1,0x1.b6c475ace09ecp-4) want 0x1.72549291e2f7bp-1 got -0x1.b6fd181e7ffffp-5 ulperr -6997593720619008.000 = -0x1.8dc464p+52 + 0x1.00036ep-1
src/math/special/fma.h:819: RU fmal(0x1.d1962720d678cp-1,-0x1.4548ee45c4084p-1,0x1.f416ab193d75cp-4) want -0x1.d2929879dc853p-2 got 0x1.fc38e6f4p-8 ulperr 8347732259373056.000 = 0x1.da837ep+52 + 0x1.fffe04p-2
src/math/special/fma.h:820: RU fmal(-0x1.9ddcb295a7d64p-1,0x1.67fb3a2068a78p-1,0x1.da9cd4597fe0ap-4) want -0x1.cf4f6eb4fc5d8p-2 got 0x1.59da5512p-6 ulperr 8530910467063808.000 = 0x1.e4ed16p+52 + 0x1.fffa98p-2
src/math/special/fma.h:821: RU fmal(0x1.c00d16ed45b88p+0,0x1.c787eddda3664p+0,0x1.1e3e6f0cc1802p-5) want 0x1.931b8f379dcc4p+1 got -0x1.63fb63b7fffffp-6 ulperr -7140470102687744.000 = -0x1.95e384p+52 + 0x1.000058p-1
src/math/special/fma.h:822: RU fmal(0x1.19c2a2372c184p+0,-0x1.cb506961c19fp+0,0x1.db1abf3f7ba3ap-6) want -0x1.f21c0eab0bc18p+0 got 0x1.a29607ffffff8p-13 ulperr 8763735812341760.000 = 0x1.f22924p+52 + 0x1.fffffcp-2
src/math/special/fma.h:823: RU fmal(-0x1.3a263218ccd1cp+0,-0x1.e818d390df27cp+0,0x1.2a81ed71785f5p-5) want 0x1.3025ab0f63926p+1 got -0x1.bfdf0b9bfffffp-6 ulperr -5412167746584576.000 = -0x1.33a568p+52 + 0x1.00007p-1
src/math/special/fma.h:824: RU fmal(0x1.b0b041fbaca58p+0,-0x1.9d5f76d178e6p+0,0x1.0215c7bb84cf9p-6) want -0x1.5b52aec7ef4p+1 got 0x1.6be7a78p-7 ulperr 6135178246225920.000 = 0x1.5cbe98p+52 + 0x1.ffffa6p-2
src/math/special/fma.h:825: RU fmal(-0x1.377549d9a87f4p+0,-0x1.a13d4a03dd6d8p+0,0x1.f190388bc5cc6p-7) want 0x1.ff83bebbd6fe5p+0 got -0x1.e5a6a43ffffffp-9 ulperr -9015346807701504.000 = -0x1.003b48p+53 + 0x1.00001ep-1
src/math/special/fma.h:826: RU fmal(0x1.6a726c0762ac8p-1,-0x1.d32f2d30e483cp+0,0x1.f953eb70fbde6p-7) want -0x1.46c61b3070332p+0 got 0x1.e556e47fffffep-11 ulperr 5752835962568704.000 = 0x1.4702c8p+52 + 0x1.fffffp-2
src/math/special/fma.h:827: RU fmal(0x1.94cf2509d40cp-1,0x1.721976af6dfbp+0,0x1.f51a456921c3ep-7) want 0x1.28880842acc61p+0 got -0x1.effe1dfffffffp-8 ulperr -5250719389057024.000 = -0x1.2a7806p+52 + 0x1.00003ep-1
src/math/special/fma.h:828: RU fmal(0x1.b128eb0ad8728p-1,0x1.7682566a54268p+0,0x1.bd4122a074cafp-8) want 0x1.3e9469530e763p+0 got -0x1.6fe0c7bffffffp-9 ulperr -5617153650720768.000 = -0x1.3f4c58p+52 + 0x1.000016p-1
src/math/special/fma.h:829: RU fmal(0x1.c4ae75976e35cp+0,-0x1.11c329dd1160cp+0,0x1.9993f5e13c9bdp-8) want -0x1.e27d925b07cf1p+0 got 0x1.198edf6p-9 ulperr 8497737213411328.000 = 0x1.e30a5ap+52 + 0x1.ffffdcp-2
src/math/special/fma.h:830: RU fmal(-0x1.85f81f88fa3c4p+0,-0x1.17648a494fa18p-1,0x1.37d305113b48p-10) want 0x1.aa367b7490e58p-1 got -0x1.7a59ecffffffep-12 ulperr -7501265072291840.000 = -0x1.aa65c6p+52 + 0x1.000006p-1
src/math/special/fma.h:831: RU fmal(-0x1.311f2b4319efcp+0,0x1.abbb5272e3d18p-1,0x1.35841b7bdbcfep-10) want -0x1.fd337f24b39ep-1 got 0x1.4cbc317ffffffp-11 ulperr 8963678351130624.000 = 0x1.fd86bp+52 + 0x1.ffffecp-2
src/math/special/fma.h:832: RU fmal(0x1.ab94369a9a0dp-1,0x1.9d1e0e0aa3bacp+0,0x1.0a63ca87cfa78p-11) want 0x1.592173ee296b7p+0 got -0x1.fd8043ffffff8p-13 ulperr -6072696672616448.000 = -0x1.59315ep+52 + 0x1.000002p-1
src/math/special/fma.h:833: RN fmal(0x1.000000001p-1000,0x1.000000001p-30,-0x1p-1066) want 0x1.000000001p-1030 got 0x1p-1038 ulperr -17523466567680.000 = -0x1.fep+43 + -0x1p-28
src/math/special/fma.h:834: RN fmal(-0x1.000000001p-1000,0x1.000000001p-30,-0x1p-1066) want -0x1.000000003p-1030 got -0x1p-1038 ulperr 17523466567680.000 = 0x1.fep+43 + 0x1p-28
src/math/special/fma.h:835: RD fmal(0x1.000000001p-1000,0x1.000000001p-30,-0x1p-1066) want 0x1.000000001p-1030 got 0x1p-1038 ulperr -17523467616256.000 = -0x1.fe0002p+43 + -0x1p-28
src/math/special/fma.h:836: RD fmal(-0x1.000000001p-1000,0x1.000000001p-30,-0x1p-1066) want -0x1.00000000301p-1030 got -0x1.000000001p-1038 ulperr 17523466567680.000 = 0x1.fep+43 + -0x1p+0
src/math/special/fma.h:837: RU fmal(0x1.000000001p-1000,0x1.000000001p-30,-0x1p-1066) want 0x1.00000000101p-1030 got 0x1.000000001p-1038 ulperr -17523466567680.000 = -0x1.fep+43 + 0x1p+0
src/math/special/fma.h:838: RU fmal(-0x1.000000001p-1000,0x1.000000001p-30,-0x1p-1066) want -0x1.000000003p-1030 got -0x1p-1038 ulperr 17523467616256.000 = 0x1.fe0002p+43 + 0x1p-28
src/math/special/fma.h:839: RZ fmal(0x1.000000001p-1000,0x1.000000001p-30,-0x1p-1066) want 0x1.000000001p-1030 got 0x1p-1038 ulperr -17523466567680.000 = -0x1.fdfffep+43 + -0x1p-28
src/math/special/fma.h:840: RZ fmal(-0x1.000000001p-1000,0x1.000000001p-30,-0x1p-1066) want -0x1.000000003p-1030 got -0x1p-1038 ulperr 17523466567680.000 = 0x1.fdfffep+43 + 0x1p-28
src/math/special/fma.h:841: RN fmal(-0x1p-1000,0x1.000001p-74,0x1p-1022) want 0x1.ffffffffffffep-1023 got 0x1.ffep-1023 ulperr -1099511627776.000 = -0x1p+40 + 0x1p-24
src/math/special/fma.h:842: RU fmal(-0x1p-1000,0x1.000001p-74,0x1p-1022) want 0x1.ffffffffffffep-1023 got 0x1.ffe0000000002p-1023 ulperr -1099511562240.000 = -0x1.fffffep+39 + 0x1p-24
src/math/special/fma.h:843: RD fmal(-0x1p-1000,0x1.000001p-74,0x1p-1022) want 0x1.ffffffffffffcp-1023 got 0x1.ffep-1023 ulperr -1099511627776.000 = -0x1p+40 + -0x1.fffffep-1
src/math/special/fma.h:844: RZ fmal(-0x1p-1000,0x1.000001p-74,0x1p-1022) want 0x1.ffffffffffffcp-1023 got 0x1.ffep-1023 ulperr -1099511562240.000 = -0x1.fffffcp+39 + -0x1.fffffep-1
FAIL src/math/fmal.exe [status 1]
src/math/special/ilogb.h:1: bad fp exception: RN ilogb(0x0p+0)=-2147483648, want INVALID got 0
src/math/special/ilogb.h:2: bad fp exception: RN ilogb(-0x0p+0)=-2147483648, want INVALID got 0
src/math/special/ilogb.h:6: bad fp exception: RN ilogb(inf)=2147483647, want INVALID got 0
src/math/special/ilogb.h:7: bad fp exception: RN ilogb(-inf)=2147483647, want INVALID got 0
src/math/special/ilogb.h:8: bad fp exception: RN ilogb(nan)=-2147483648, want INVALID got 0
FAIL src/math/ilogb.exe [status 1]
src/math/special/ilogbf.h:1: bad fp exception: RN ilogbf(0x0p+0)=-2147483648, want INVALID got 0
src/math/special/ilogbf.h:2: bad fp exception: RN ilogbf(-0x0p+0)=-2147483648, want INVALID got 0
src/math/special/ilogbf.h:6: bad fp exception: RN ilogbf(inf)=2147483647, want INVALID got 0
src/math/special/ilogbf.h:7: bad fp exception: RN ilogbf(-inf)=2147483647, want INVALID got 0
src/math/special/ilogbf.h:8: bad fp exception: RN ilogbf(-nan)=-2147483648, want INVALID got 0
FAIL src/math/ilogbf.exe [status 1]
src/math/special/ilogb.h:1: bad fp exception: RN ilogbl(0x0p+0)=-2147483648, want INVALID got 0
src/math/special/ilogb.h:2: bad fp exception: RN ilogbl(-0x0p+0)=-2147483648, want INVALID got 0
src/math/special/ilogb.h:6: bad fp exception: RN ilogbl(inf)=2147483647, want INVALID got 0
src/math/special/ilogb.h:7: bad fp exception: RN ilogbl(-inf)=2147483647, want INVALID got 0
src/math/special/ilogb.h:8: bad fp exception: RN ilogbl(nan)=-2147483648, want INVALID got 0
FAIL src/math/ilogbl.exe [status 1]
X src/math/special/j0.h:7: RN j0(-0x1.33d132fd04a92p+1) want 0x1.092b2a541a68ep-19 got 0x1.092b2a541b1ap-19 ulperr 2833.704 = 0x1.624p+11 + -0x1.2ebdbp-2
X src/math/special/j0.h:8: RN j0(-0x1.33d15297be06fp+1) want 0x1.5352913be3275p-26 got 0x1.5352913ddb41bp-26 ulperr 2064806.000 = 0x1.f81a6p+20 + 0x1.c281e2p-7
X src/math/special/j0.h:9: RN j0(0x1.33d152e971b4p+1) want -0x1.19b7921f03c8ep-54 got -0x1.00209921727cbp-54 ulperr 450179413049344.000 = 0x1.996f9p+48 + 0x1.ece5dp-5
X src/math/special/j0.h:10: RN j0(0x1.6148f5b2c2e45p+2) want -0x1.fbb40985f6e34p-56 got -0x1.ebcb069d486ccp-56 ulperr 279895217274880.000 = 0x1.fd205ep+47 + -0x1.1ac8a8p-2
X src/math/special/j0.h:11: RN j0(0x1.14eb56cccdecap+3) want -0x1.6e8eeb22e5818p-54 got -0x1.6d2a820627412p-54 ulperr 24492348801024.000 = 0x1.64691cp+44 + -0x1.63ab44p-2
X src/math/special/j0.h:12: RN j0(0x1.c071b22fbbafap+1023) want -0x1.a348b1f34dd1ap-526 got -0x1.a348b1f34d33dp-526 ulperr 2525.019 = 0x1.3bap+11 + 0x1.3153c2p-6
X src/math/special/j0.h:13: RN j0(0x1.f7350b1701ef7p+0) want 0x1.f32b3a3640292p-3 got 0x1.f32b3a3640296p-3 ulperr 3.947 = 0x1p+2 + -0x1.b3bad8p-5
X src/math/sanity/jn.h:8: RN jn(5, 0x1.1f9ef934745cbp-1) want 0x1.e274364abf2d5p-17 got 0x1.e274364abf2d2p-17, ulperr -2.504 = -0x1.8p+1 + 0x1.fbe5c8p-2
X src/math/sanity/jnf.h:1: RN jnf(-2, -0x1.0223ap+3) want -0x1.863726p-4 got -0x1.86372ap-4, ulperr -2.009 = -0x1p+1 + -0x1.28885p-7
X src/math/sanity/jnf.h:8: RN jnf(5, 0x1.1f9efap-1) want 0x1.e2743cp-17 got 0x1.e27442p-17, ulperr 2.537 = 0x1.8p+1 + -0x1.d9c372p-2
X src/math/sanity/jnf.h:10: RN jnf(7, -0x1.5b86eap-1) want -0x1.b39a9cp-24 got -0x1.b39a98p-24, ulperr 1.621 = 0x1p+1 + -0x1.83c12p-2
X src/math/special/lgamma.h:145: RN lgamma(-0x1.4p+1) want -0x1.ccbf9f5ed0f16p-5,-1 got -0x1.ccbf9f5ed0f2p-5,-1 ulperr -10.465 = -0x1.4p+3 + -0x1.dc4f24p-2
X src/math/sanity/lgammaf.h:3: RN lgammaf(-0x1.0c34b4p+3) want -0x1.46d732p+3,-1 got -0x1.46d736p+3,-1 ulperr -1.621 = -0x1p+1 + 0x1.83dafep-2
X src/math/sanity/lgammaf_r.h:3: RN lgammaf_r(-0x1.0c34b4p+3) want -0x1.46d732p+3,-1 got -0x1.46d736p+3,-1 ulperr -1.621 = -0x1p+1 + 0x1.83dafep-2
src/math/special/lgamma.h:145: RN lgammal(-0x1.4p+1) want -0x1.ccbf9f5ed0f16p-5,-1 got -0x1.ccbf9f5ed0f2p-5,-1 ulperr -10.465 = -0x1.4p+3 + -0x1.dc4f24p-2
FAIL src/math/lgammal.exe [status 1]
X src/math/crlibm/pow.h:13: bad fp exception: RN pow(0x1p+1,-0x1.0c8p+10)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:72: bad fp exception: RN pow(0x1p-1074,0x1p+0)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:73: bad fp exception: RN pow(0x1p-1042,0x1p+0)=0x1p-1042, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:75: bad fp exception: RN pow(-0x1p-1074,0x1p+0)=-0x1p-1074, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:76: bad fp exception: RN pow(-0x1p-1042,0x1p+0)=-0x1p-1042, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:284: bad fp exception: RN pow(0x1p-1073,0x1p+0)=0x1p-1073, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:300: bad fp exception: RN pow(0x1p-1024,0x1p+0)=0x1p-1024, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:304: bad fp exception: RN pow(0x1p-1023,0x1p+0)=0x1p-1023, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:310: bad fp exception: RN pow(0x1.ffffffffffffcp-1023,0x1p+0)=0x1.ffffffffffffcp-1023, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:313: bad fp exception: RN pow(0x1.ffffffffffffep-1023,0x1p+0)=0x1.ffffffffffffep-1023, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:338: bad fp exception: RN pow(0x1p-537,0x1p+1)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:437: bad fp exception: RN pow(0x1p+1,-0x1.0c8p+10)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:498: bad fp exception: RN pow(0x1p+350,-0x1.8p+1)=0x1p-1050, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:499: bad fp exception: RN pow(0x1p+700,-0x1.8p+0)=0x1p-1050, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:516: bad fp exception: RN pow(0x1p+1023,-0x1p+0)=0x1p-1023, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:544: bad fp exception: RN pow(-0x1p-1073,0x1p+0)=-0x1p-1073, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:548: bad fp exception: RN pow(-0x1p-1024,0x1p+0)=-0x1p-1024, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:551: bad fp exception: RN pow(-0x1p-1023,0x1p+0)=-0x1p-1023, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:557: bad fp exception: RN pow(-0x1.ffffffffffffcp-1023,0x1p+0)=-0x1.ffffffffffffcp-1023, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:560: bad fp exception: RN pow(-0x1.ffffffffffffep-1023,0x1p+0)=-0x1.ffffffffffffep-1023, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:581: bad fp exception: RN pow(-0x1p-537,0x1p+1)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:655: bad fp exception: RN pow(-0x1p+1,-0x1.0c8p+10)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:695: bad fp exception: RN pow(-0x1p+350,-0x1.8p+1)=-0x1p-1050, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/pow.h:708: bad fp exception: RN pow(-0x1p+1023,-0x1p+0)=-0x1p-1023, want 0 got INEXACT|UNDERFLOW
src/math/ucb/powf.h:103: bad fp exception: RU powf(0x1.fffffep+127,0x1p+0)=0x1.fffffep+127, want 0 got INEXACT|OVERFLOW
X src/math/ucb/powf.h:530: bad fp exception: RN powf(0x1.fffff8p-127,0x1p+0)=0x1.fffff8p-127, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/powf.h:533: bad fp exception: RN powf(0x1.fffffcp-127,0x1p+0)=0x1.fffffcp-127, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/powf.h:719: bad fp exception: RN powf(-0x1.fffff8p-127,0x1p+0)=-0x1.fffff8p-127, want 0 got INEXACT|UNDERFLOW
X src/math/ucb/powf.h:722: bad fp exception: RN powf(-0x1.fffffcp-127,0x1p+0)=-0x1.fffffcp-127, want 0 got INEXACT|UNDERFLOW
FAIL src/math/powf.exe [status 1]
src/math/crlibm/pow.h:13: bad fp exception: RN powl(0x1p+1,-0x1.0c8p+10)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:72: bad fp exception: RN powl(0x1p-1074,0x1p+0)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:73: bad fp exception: RN powl(0x1p-1042,0x1p+0)=0x1p-1042, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:75: bad fp exception: RN powl(-0x1p-1074,0x1p+0)=-0x1p-1074, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:76: bad fp exception: RN powl(-0x1p-1042,0x1p+0)=-0x1p-1042, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:284: bad fp exception: RN powl(0x1p-1073,0x1p+0)=0x1p-1073, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:300: bad fp exception: RN powl(0x1p-1024,0x1p+0)=0x1p-1024, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:304: bad fp exception: RN powl(0x1p-1023,0x1p+0)=0x1p-1023, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:310: bad fp exception: RN powl(0x1.ffffffffffffcp-1023,0x1p+0)=0x1.ffffffffffffcp-1023, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:313: bad fp exception: RN powl(0x1.ffffffffffffep-1023,0x1p+0)=0x1.ffffffffffffep-1023, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:338: bad fp exception: RN powl(0x1p-537,0x1p+1)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:437: bad fp exception: RN powl(0x1p+1,-0x1.0c8p+10)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:498: bad fp exception: RN powl(0x1p+350,-0x1.8p+1)=0x1p-1050, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:499: bad fp exception: RN powl(0x1p+700,-0x1.8p+0)=0x1p-1050, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:516: bad fp exception: RN powl(0x1p+1023,-0x1p+0)=0x1p-1023, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:544: bad fp exception: RN powl(-0x1p-1073,0x1p+0)=-0x1p-1073, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:548: bad fp exception: RN powl(-0x1p-1024,0x1p+0)=-0x1p-1024, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:551: bad fp exception: RN powl(-0x1p-1023,0x1p+0)=-0x1p-1023, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:557: bad fp exception: RN powl(-0x1.ffffffffffffcp-1023,0x1p+0)=-0x1.ffffffffffffcp-1023, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:560: bad fp exception: RN powl(-0x1.ffffffffffffep-1023,0x1p+0)=-0x1.ffffffffffffep-1023, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:581: bad fp exception: RN powl(-0x1p-537,0x1p+1)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:655: bad fp exception: RN powl(-0x1p+1,-0x1.0c8p+10)=0x1p-1074, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:695: bad fp exception: RN powl(-0x1p+350,-0x1.8p+1)=-0x1p-1050, want 0 got INEXACT|UNDERFLOW
src/math/ucb/pow.h:708: bad fp exception: RN powl(-0x1p+1023,-0x1p+0)=-0x1p-1023, want 0 got INEXACT|UNDERFLOW
FAIL src/math/powl.exe [status 1]
X src/math/crlibm/sinh.h:84: RN sinh(0x1.d3e0d2f5d98d6p-2) want 0x1.e45428082fb8cp-2 got 0x1.e45428082fb8ap-2 ulperr -1.500 = -0x1p+1 + 0x1p-1
X src/math/crlibm/sinh.h:84: RN sinhl(0x1.d3e0d2f5d98d6p-2) want 0x1.e45428082fb8cp-2 got 0x1.e45428082fb8ap-2 ulperr -1.500 = -0x1p+1 + 0x1p-1
src/math/ucb/sqrt.h:47: bad fp exception: RN sqrt(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT got 0
src/math/ucb/sqrt.h:48: bad fp exception: RZ sqrt(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT got 0
src/math/ucb/sqrt.h:49: bad fp exception: RU sqrt(0x1.fffffffffffffp+1023)=0x1p+512, want INEXACT got 0
src/math/ucb/sqrt.h:49: RU sqrt(0x1.fffffffffffffp+1023) want 0x1p+512 got 0x1.fffffffffffffp+511 ulperr -0.250 = -0x1p-1 + 0x1p-2
src/math/ucb/sqrt.h:50: bad fp exception: RD sqrt(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT got 0
src/math/ucb/sqrt.h:67: bad fp exception: RN sqrt(0x1.0000000000001p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:69: bad fp exception: RN sqrt(0x1.fffffffffffffp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:70: bad fp exception: RZ sqrt(0x1.0000000000001p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:72: bad fp exception: RZ sqrt(0x1.fffffffffffffp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:73: bad fp exception: RU sqrt(0x1.0000000000001p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:73: RU sqrt(0x1.0000000000001p+0) want 0x1.0000000000001p+0 got 0x1p+0 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:75: bad fp exception: RU sqrt(0x1.fffffffffffffp-1)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:75: RU sqrt(0x1.fffffffffffffp-1) want 0x1p+0 got 0x1.fffffffffffffp-1 ulperr -0.250 = -0x1p-1 + 0x1p-2
src/math/ucb/sqrt.h:76: bad fp exception: RD sqrt(0x1.0000000000001p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:78: bad fp exception: RD sqrt(0x1.fffffffffffffp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:89: bad fp exception: RN sqrt(0x1.766bdb2b5006dp+1)=0x1.b5d6fec392e7dp+0, want INEXACT got 0
src/math/ucb/sqrt.h:90: bad fp exception: RN sqrt(0x1.b6546fb825911p+2)=0x1.4efb330ef0b43p+1, want INEXACT got 0
src/math/ucb/sqrt.h:91: bad fp exception: RN sqrt(0x1.e165309de7505p+2)=0x1.5f0d324d38bdp+1, want INEXACT got 0
src/math/ucb/sqrt.h:92: bad fp exception: RN sqrt(0x1.541dcfba96889p+0)=0x1.271370ec508dp+0, want INEXACT got 0
src/math/ucb/sqrt.h:93: bad fp exception: RN sqrt(0x1.754c3e27084ddp+1)=0x1.b52eb45df30b2p+0, want INEXACT got 0
src/math/ucb/sqrt.h:94: bad fp exception: RN sqrt(0x1.ebe1e1b093c41p+1)=0x1.f5d722e54e976p+0, want INEXACT got 0
src/math/ucb/sqrt.h:95: bad fp exception: RN sqrt(0x1.940d8d18455f5p+2)=0x1.419df976f692dp+1, want INEXACT got 0
src/math/ucb/sqrt.h:96: bad fp exception: RN sqrt(0x1.dae714a51b239p+2)=0x1.5cad1a5584b9ap+1, want INEXACT got 0
src/math/ucb/sqrt.h:97: bad fp exception: RN sqrt(0x1.a9f2d1079de4dp+1)=0x1.d2ff13bff7b67p+0, want INEXACT got 0
src/math/ucb/sqrt.h:98: bad fp exception: RN sqrt(0x1.57dd33103b871p-3)=0x1.a397d7b1e31f2p-2, want INEXACT got 0
src/math/ucb/sqrt.h:135: bad fp exception: RD sqrt(0x1.ffffffffffffep-1023)=0x1.ffffffffffffep-512, want INEXACT got 0
src/math/ucb/sqrt.h:135: RD sqrt(0x1.ffffffffffffep-1023) want 0x1.ffffffffffffep-512 got 0x1.fffffffffffffp-512 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:136: bad fp exception: RD sqrt(0x1.0000000000002p-1022)=0x1p-511, want INEXACT got 0
src/math/ucb/sqrt.h:136: RD sqrt(0x1.0000000000002p-1022) want 0x1p-511 got 0x1.0000000000001p-511 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:137: bad fp exception: RD sqrt(0x1.ffffffffffff7p-1)=0x1.ffffffffffffbp-1, want INEXACT got 0
src/math/ucb/sqrt.h:138: bad fp exception: RD sqrt(0x1.ffffffffffff8p-1)=0x1.ffffffffffffbp-1, want INEXACT got 0
src/math/ucb/sqrt.h:138: RD sqrt(0x1.ffffffffffff8p-1) want 0x1.ffffffffffffbp-1 got 0x1.ffffffffffffcp-1 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:139: bad fp exception: RD sqrt(0x1.ffffffffffff9p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:140: bad fp exception: RD sqrt(0x1.ffffffffffffap-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:140: RD sqrt(0x1.ffffffffffffap-1) want 0x1.ffffffffffffcp-1 got 0x1.ffffffffffffdp-1 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:141: bad fp exception: RD sqrt(0x1.ffffffffffffbp-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:142: bad fp exception: RD sqrt(0x1.ffffffffffffcp-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:142: RD sqrt(0x1.ffffffffffffcp-1) want 0x1.ffffffffffffdp-1 got 0x1.ffffffffffffep-1 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:143: bad fp exception: RD sqrt(0x1.ffffffffffffdp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:144: bad fp exception: RD sqrt(0x1.ffffffffffffep-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:144: RD sqrt(0x1.ffffffffffffep-1) want 0x1.ffffffffffffep-1 got 0x1.fffffffffffffp-1 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:145: bad fp exception: RD sqrt(0x1.0000000000002p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:145: RD sqrt(0x1.0000000000002p+0) want 0x1p+0 got 0x1.0000000000001p+0 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:146: bad fp exception: RD sqrt(0x1.0000000000003p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:147: bad fp exception: RD sqrt(0x1.0000000000004p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:147: RD sqrt(0x1.0000000000004p+0) want 0x1.0000000000001p+0 got 0x1.0000000000002p+0 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:148: bad fp exception: RD sqrt(0x1.0000000000005p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:149: bad fp exception: RD sqrt(0x1.0000000000006p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:149: RD sqrt(0x1.0000000000006p+0) want 0x1.0000000000002p+0 got 0x1.0000000000003p+0 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:150: bad fp exception: RD sqrt(0x1.0000000000007p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:151: bad fp exception: RD sqrt(0x1.ffffffffffffep+1021)=0x1.ffffffffffffep+510, want INEXACT got 0
src/math/ucb/sqrt.h:151: RD sqrt(0x1.ffffffffffffep+1021) want 0x1.ffffffffffffep+510 got 0x1.fffffffffffffp+510 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:152: bad fp exception: RD sqrt(0x1.0000000000002p+1022)=0x1p+511, want INEXACT got 0
src/math/ucb/sqrt.h:152: RD sqrt(0x1.0000000000002p+1022) want 0x1p+511 got 0x1.0000000000001p+511 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:206: bad fp exception: RN sqrt(0x1.ffffffffffffep-1023)=0x1.fffffffffffffp-512, want INEXACT got 0
src/math/ucb/sqrt.h:207: bad fp exception: RN sqrt(0x1.0000000000002p-1022)=0x1.0000000000001p-511, want INEXACT got 0
src/math/ucb/sqrt.h:208: bad fp exception: RN sqrt(0x1.ffffffffffff7p-1)=0x1.ffffffffffffbp-1, want INEXACT got 0
src/math/ucb/sqrt.h:209: bad fp exception: RN sqrt(0x1.ffffffffffff8p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:210: bad fp exception: RN sqrt(0x1.ffffffffffff9p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:211: bad fp exception: RN sqrt(0x1.ffffffffffffap-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:212: bad fp exception: RN sqrt(0x1.ffffffffffffbp-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:213: bad fp exception: RN sqrt(0x1.ffffffffffffcp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:214: bad fp exception: RN sqrt(0x1.ffffffffffffdp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:215: bad fp exception: RN sqrt(0x1.ffffffffffffep-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:216: bad fp exception: RN sqrt(0x1.0000000000002p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:217: bad fp exception: RN sqrt(0x1.0000000000003p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:218: bad fp exception: RN sqrt(0x1.0000000000004p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:219: bad fp exception: RN sqrt(0x1.0000000000005p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:220: bad fp exception: RN sqrt(0x1.0000000000006p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:221: bad fp exception: RN sqrt(0x1.0000000000007p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:222: bad fp exception: RN sqrt(0x1.ffffffffffffep+1021)=0x1.fffffffffffffp+510, want INEXACT got 0
src/math/ucb/sqrt.h:223: bad fp exception: RN sqrt(0x1.0000000000002p+1022)=0x1.0000000000001p+511, want INEXACT got 0
src/math/ucb/sqrt.h:273: bad fp exception: RU sqrt(0x1.ffffffffffffep-1023)=0x1.fffffffffffffp-512, want INEXACT got 0
src/math/ucb/sqrt.h:274: bad fp exception: RU sqrt(0x1.0000000000002p-1022)=0x1.0000000000001p-511, want INEXACT got 0
src/math/ucb/sqrt.h:275: bad fp exception: RU sqrt(0x1.ffffffffffff7p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:275: RU sqrt(0x1.ffffffffffff7p-1) want 0x1.ffffffffffffcp-1 got 0x1.ffffffffffffbp-1 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:276: bad fp exception: RU sqrt(0x1.ffffffffffff8p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:277: bad fp exception: RU sqrt(0x1.ffffffffffff9p-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:277: RU sqrt(0x1.ffffffffffff9p-1) want 0x1.ffffffffffffdp-1 got 0x1.ffffffffffffcp-1 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:278: bad fp exception: RU sqrt(0x1.ffffffffffffap-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:279: bad fp exception: RU sqrt(0x1.ffffffffffffbp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:279: RU sqrt(0x1.ffffffffffffbp-1) want 0x1.ffffffffffffep-1 got 0x1.ffffffffffffdp-1 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:280: bad fp exception: RU sqrt(0x1.ffffffffffffcp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:281: bad fp exception: RU sqrt(0x1.ffffffffffffdp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:281: RU sqrt(0x1.ffffffffffffdp-1) want 0x1.fffffffffffffp-1 got 0x1.ffffffffffffep-1 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:282: bad fp exception: RU sqrt(0x1.ffffffffffffep-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:283: bad fp exception: RU sqrt(0x1.0000000000002p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:284: bad fp exception: RU sqrt(0x1.0000000000003p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:284: RU sqrt(0x1.0000000000003p+0) want 0x1.0000000000002p+0 got 0x1.0000000000001p+0 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:285: bad fp exception: RU sqrt(0x1.0000000000004p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:286: bad fp exception: RU sqrt(0x1.0000000000005p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:286: RU sqrt(0x1.0000000000005p+0) want 0x1.0000000000003p+0 got 0x1.0000000000002p+0 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:287: bad fp exception: RU sqrt(0x1.0000000000006p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:288: bad fp exception: RU sqrt(0x1.0000000000007p+0)=0x1.0000000000004p+0, want INEXACT got 0
src/math/ucb/sqrt.h:288: RU sqrt(0x1.0000000000007p+0) want 0x1.0000000000004p+0 got 0x1.0000000000003p+0 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:289: bad fp exception: RU sqrt(0x1.ffffffffffffep+1021)=0x1.fffffffffffffp+510, want INEXACT got 0
src/math/ucb/sqrt.h:290: bad fp exception: RU sqrt(0x1.0000000000002p+1022)=0x1.0000000000001p+511, want INEXACT got 0
src/math/ucb/sqrt.h:344: bad fp exception: RZ sqrt(0x1.ffffffffffffep-1023)=0x1.ffffffffffffep-512, want INEXACT got 0
src/math/ucb/sqrt.h:344: RZ sqrt(0x1.ffffffffffffep-1023) want 0x1.ffffffffffffep-512 got 0x1.fffffffffffffp-512 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:345: bad fp exception: RZ sqrt(0x1.0000000000002p-1022)=0x1p-511, want INEXACT got 0
src/math/ucb/sqrt.h:345: RZ sqrt(0x1.0000000000002p-1022) want 0x1p-511 got 0x1.0000000000001p-511 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:346: bad fp exception: RZ sqrt(0x1.ffffffffffff7p-1)=0x1.ffffffffffffbp-1, want INEXACT got 0
src/math/ucb/sqrt.h:347: bad fp exception: RZ sqrt(0x1.ffffffffffff8p-1)=0x1.ffffffffffffbp-1, want INEXACT got 0
src/math/ucb/sqrt.h:347: RZ sqrt(0x1.ffffffffffff8p-1) want 0x1.ffffffffffffbp-1 got 0x1.ffffffffffffcp-1 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:348: bad fp exception: RZ sqrt(0x1.ffffffffffff9p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:349: bad fp exception: RZ sqrt(0x1.ffffffffffffap-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:349: RZ sqrt(0x1.ffffffffffffap-1) want 0x1.ffffffffffffcp-1 got 0x1.ffffffffffffdp-1 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:350: bad fp exception: RZ sqrt(0x1.ffffffffffffbp-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:351: bad fp exception: RZ sqrt(0x1.ffffffffffffcp-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:351: RZ sqrt(0x1.ffffffffffffcp-1) want 0x1.ffffffffffffdp-1 got 0x1.ffffffffffffep-1 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:352: bad fp exception: RZ sqrt(0x1.ffffffffffffdp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:353: bad fp exception: RZ sqrt(0x1.ffffffffffffep-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:353: RZ sqrt(0x1.ffffffffffffep-1) want 0x1.ffffffffffffep-1 got 0x1.fffffffffffffp-1 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:354: bad fp exception: RZ sqrt(0x1.0000000000002p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:354: RZ sqrt(0x1.0000000000002p+0) want 0x1p+0 got 0x1.0000000000001p+0 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:355: bad fp exception: RZ sqrt(0x1.0000000000003p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:356: bad fp exception: RZ sqrt(0x1.0000000000004p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:356: RZ sqrt(0x1.0000000000004p+0) want 0x1.0000000000001p+0 got 0x1.0000000000002p+0 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:357: bad fp exception: RZ sqrt(0x1.0000000000005p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:358: bad fp exception: RZ sqrt(0x1.0000000000006p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:358: RZ sqrt(0x1.0000000000006p+0) want 0x1.0000000000002p+0 got 0x1.0000000000003p+0 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:359: bad fp exception: RZ sqrt(0x1.0000000000007p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:360: bad fp exception: RZ sqrt(0x1.ffffffffffffep+1021)=0x1.ffffffffffffep+510, want INEXACT got 0
src/math/ucb/sqrt.h:360: RZ sqrt(0x1.ffffffffffffep+1021) want 0x1.ffffffffffffep+510 got 0x1.fffffffffffffp+510 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:361: bad fp exception: RZ sqrt(0x1.0000000000002p+1022)=0x1p+511, want INEXACT got 0
src/math/ucb/sqrt.h:361: RZ sqrt(0x1.0000000000002p+1022) want 0x1p+511 got 0x1.0000000000001p+511 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/sanity/sqrt.h:2: bad fp exception: RN sqrt(0x1.161868e18bc67p+2)=0x1.0ad1adc856f29p+1, want INEXACT got 0
src/math/sanity/sqrt.h:5: bad fp exception: RN sqrt(0x1.288bbb0d6a1e6p+3)=0x1.85a7d346e8c13p+1, want INEXACT got 0
src/math/sanity/sqrt.h:6: bad fp exception: RN sqrt(0x1.52efd0cd80497p-1)=0x1.a0937a0b92ccbp-1, want INEXACT got 0
src/math/sanity/sqrt.h:8: bad fp exception: RN sqrt(0x1.1f9ef934745cbp-1)=0x1.7fbf4b5a076bcp-1, want INEXACT got 0
src/math/sanity/sqrt.h:9: bad fp exception: RN sqrt(0x1.8c5db097f7442p-1)=0x1.c27ce94ff39c5p-1, want INEXACT got 0
src/math/special/sqrt.h:9: bad fp exception: RN sqrt(0x1p-1073)=0x1.6a09e667f3bcdp-537, want INEXACT got 0
src/math/special/sqrt.h:10: bad fp exception: RN sqrt(0x1.8p-1073)=0x1.bb67ae8584caap-537, want INEXACT got 0
src/math/special/sqrt.h:13: bad fp exception: RN sqrt(0x1.fffffffffffffp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/special/sqrt.h:14: bad fp exception: RN sqrt(0x1.fffffffffffffp+0)=0x1.6a09e667f3bccp+0, want INEXACT got 0
src/math/special/sqrt.h:15: bad fp exception: RN sqrt(0x1.0000000000001p+0)=0x1p+0, want INEXACT got 0
src/math/special/sqrt.h:16: bad fp exception: RN sqrt(0x1.0000000000001p+1)=0x1.6a09e667f3bcdp+0, want INEXACT got 0
src/math/special/sqrt.h:17: bad fp exception: RN sqrt(0x1.0000000000001p+0)=0x1p+0, want INEXACT got 0
src/math/special/sqrt.h:18: bad fp exception: RN sqrt(0x1.fffffffffffffp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/special/sqrt.h:20: bad fp exception: RN sqrt(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT got 0
src/math/special/sqrt.h:21: bad fp exception: RN sqrt(0x1.ffffffffffffbp+1023)=0x1.ffffffffffffdp+511, want INEXACT got 0
src/math/special/sqrt.h:22: bad fp exception: RN sqrt(0x1.ffffffffffff7p+1023)=0x1.ffffffffffffbp+511, want INEXACT got 0
src/math/special/sqrt.h:23: bad fp exception: RN sqrt(0x1.ffffffffffff3p+1023)=0x1.ffffffffffff9p+511, want INEXACT got 0
src/math/special/sqrt.h:24: bad fp exception: RN sqrt(0x1.fffffffffffefp+1023)=0x1.ffffffffffff7p+511, want INEXACT got 0
src/math/special/sqrt.h:25: bad fp exception: RN sqrt(0x1.fffffffffffebp+1023)=0x1.ffffffffffff5p+511, want INEXACT got 0
src/math/special/sqrt.h:26: bad fp exception: RN sqrt(0x1.fffffffffffe7p+1023)=0x1.ffffffffffff3p+511, want INEXACT got 0
src/math/special/sqrt.h:27: bad fp exception: RN sqrt(0x1.fffffffffffe3p+1023)=0x1.ffffffffffff1p+511, want INEXACT got 0
src/math/special/sqrt.h:28: bad fp exception: RN sqrt(0x1.fffffffffffdfp+1023)=0x1.fffffffffffefp+511, want INEXACT got 0
src/math/special/sqrt.h:29: bad fp exception: RN sqrt(0x1.fffffffffffdbp+1023)=0x1.fffffffffffedp+511, want INEXACT got 0
src/math/special/sqrt.h:30: bad fp exception: RN sqrt(0x1.fffffffffffd7p+1023)=0x1.fffffffffffebp+511, want INEXACT got 0
src/math/special/sqrt.h:31: bad fp exception: RN sqrt(0x1.0000000000003p-1022)=0x1.0000000000001p-511, want INEXACT got 0
src/math/special/sqrt.h:32: bad fp exception: RN sqrt(0x1.0000000000007p-1022)=0x1.0000000000003p-511, want INEXACT got 0
src/math/special/sqrt.h:33: bad fp exception: RN sqrt(0x1.000000000000bp-1022)=0x1.0000000000005p-511, want INEXACT got 0
src/math/special/sqrt.h:34: bad fp exception: RN sqrt(0x1.000000000000fp-1022)=0x1.0000000000007p-511, want INEXACT got 0
src/math/special/sqrt.h:35: bad fp exception: RN sqrt(0x1.0000000000013p-1022)=0x1.0000000000009p-511, want INEXACT got 0
src/math/special/sqrt.h:36: bad fp exception: RN sqrt(0x1.0000000000017p-1022)=0x1.000000000000bp-511, want INEXACT got 0
src/math/special/sqrt.h:37: bad fp exception: RN sqrt(0x1.000000000001bp-1022)=0x1.000000000000dp-511, want INEXACT got 0
src/math/special/sqrt.h:38: bad fp exception: RN sqrt(0x1.000000000001fp-1022)=0x1.000000000000fp-511, want INEXACT got 0
src/math/special/sqrt.h:39: bad fp exception: RN sqrt(0x1.0000000000023p-1022)=0x1.0000000000011p-511, want INEXACT got 0
src/math/special/sqrt.h:40: bad fp exception: RN sqrt(0x1.0000000000027p-1022)=0x1.0000000000013p-511, want INEXACT got 0
src/math/special/sqrt.h:41: bad fp exception: RN sqrt(0x1.000000000002bp-1022)=0x1.0000000000015p-511, want INEXACT got 0
src/math/special/sqrt.h:42: bad fp exception: RN sqrt(0x1.000000000002fp-1022)=0x1.0000000000017p-511, want INEXACT got 0
src/math/special/sqrt.h:43: bad fp exception: RN sqrt(0x1.0000000000033p-1022)=0x1.0000000000019p-511, want INEXACT got 0
src/math/special/sqrt.h:44: bad fp exception: RN sqrt(0x1.0000000000037p-1022)=0x1.000000000001bp-511, want INEXACT got 0
src/math/special/sqrt.h:45: bad fp exception: RN sqrt(0x1.7167bc36eaa3bp+6)=0x1.3384c7db650cdp+3, want INEXACT got 0
src/math/special/sqrt.h:46: bad fp exception: RN sqrt(0x1.7570994273ad7p+6)=0x1.353186e89b8ffp+3, want INEXACT got 0
src/math/special/sqrt.h:47: bad fp exception: RN sqrt(0x1.7dae969442fe6p+6)=0x1.389640fb18b75p+3, want INEXACT got 0
src/math/special/sqrt.h:48: bad fp exception: RN sqrt(0x1.7f8444fcf67e5p+6)=0x1.395659e94669fp+3, want INEXACT got 0
src/math/special/sqrt.h:49: bad fp exception: RN sqrt(0x1.8364650e63a54p+6)=0x1.3aea9efe1a3d7p+3, want INEXACT got 0
src/math/special/sqrt.h:50: bad fp exception: RN sqrt(0x1.85bedd274edd8p+6)=0x1.3bdf20c867057p+3, want INEXACT got 0
src/math/special/sqrt.h:51: bad fp exception: RN sqrt(0x1.8609cf496ab77p+6)=0x1.3bfd7e14b5eabp+3, want INEXACT got 0
src/math/special/sqrt.h:52: bad fp exception: RN sqrt(0x1.873849c70a375p+6)=0x1.3c77ed341d27fp+3, want INEXACT got 0
src/math/special/sqrt.h:53: bad fp exception: RN sqrt(0x1.8919c962cbaaep+6)=0x1.3d3a7113ee82fp+3, want INEXACT got 0
src/math/special/sqrt.h:54: bad fp exception: RN sqrt(0x1.8de4493e22dc6p+6)=0x1.3f27d448220c3p+3, want INEXACT got 0
src/math/special/sqrt.h:55: bad fp exception: RN sqrt(0x1.924829a17a288p+6)=0x1.40e9552eec28fp+3, want INEXACT got 0
src/math/special/sqrt.h:56: bad fp exception: RN sqrt(0x1.92702cd992f12p+6)=0x1.40f94a6fdfddfp+3, want INEXACT got 0
src/math/special/sqrt.h:57: bad fp exception: RN sqrt(0x1.92b763a8311fdp+6)=0x1.4115af614695fp+3, want INEXACT got 0
src/math/special/sqrt.h:58: bad fp exception: RN sqrt(0x1.947da013c7293p+6)=0x1.41ca91102940fp+3, want INEXACT got 0
src/math/special/sqrt.h:59: bad fp exception: RN sqrt(0x1.9536091c494d2p+6)=0x1.4213e334c77adp+3, want INEXACT got 0
src/math/special/sqrt.h:60: bad fp exception: RN sqrt(0x1.61b04c6p-1019)=0x1.a98b88f18b46dp-510, want INEXACT got 0
src/math/special/sqrt.h:61: bad fp exception: RN sqrt(0x1.93789f1p-1018)=0x1.4162ae43d5821p-509, want INEXACT got 0
src/math/special/sqrt.h:62: bad fp exception: RN sqrt(0x1.a1989b4p-1018)=0x1.46f6736eb44bbp-509, want INEXACT got 0
src/math/special/sqrt.h:63: bad fp exception: RN sqrt(0x1.f93bc9p-1018)=0x1.67a36ec403bafp-509, want INEXACT got 0
src/math/special/sqrt.h:64: bad fp exception: RN sqrt(0x1.2f675e3p-1017)=0x1.8a22ab6dcfee1p-509, want INEXACT got 0
src/math/special/sqrt.h:65: bad fp exception: RN sqrt(0x1.a158508p-1017)=0x1.ce418a96cf589p-509, want INEXACT got 0
src/math/special/sqrt.h:66: bad fp exception: RN sqrt(0x1.cd31f078p-1017)=0x1.e5ef1c65dccebp-509, want INEXACT got 0
src/math/special/sqrt.h:67: bad fp exception: RN sqrt(0x1.33b43b08p-1016)=0x1.18a9f607e1701p-508, want INEXACT got 0
src/math/special/sqrt.h:68: bad fp exception: RN sqrt(0x1.6e66a858p-1016)=0x1.324402a00b45fp-508, want INEXACT got 0
src/math/special/sqrt.h:69: bad fp exception: RN sqrt(0x1.8661cbf8p-1016)=0x1.3c212046bfdffp-508, want INEXACT got 0
src/math/special/sqrt.h:70: bad fp exception: RN sqrt(0x1.bbb221b4p-1016)=0x1.510681b939931p-508, want INEXACT got 0
src/math/special/sqrt.h:71: bad fp exception: RN sqrt(0x1.c4942f3cp-1016)=0x1.5461e59227ab5p-508, want INEXACT got 0
src/math/special/sqrt.h:72: bad fp exception: RN sqrt(0x1.dbb258c8p-1016)=0x1.5cf7b0f78d3afp-508, want INEXACT got 0
src/math/special/sqrt.h:73: bad fp exception: RN sqrt(0x1.57103ea4p-1015)=0x1.a31ab946d340bp-508, want INEXACT got 0
src/math/special/sqrt.h:74: bad fp exception: RN sqrt(0x1.9b294f88p-1015)=0x1.cad197e28e85bp-508, want INEXACT got 0
FAIL src/math/sqrt.exe [status 1]
src/math/ucb/sqrtf.h:47: bad fp exception: RN sqrtf(0x1.fffffep+127)=0x1.fffffep+63, want INEXACT got 0
src/math/ucb/sqrtf.h:48: bad fp exception: RZ sqrtf(0x1.fffffep+127)=0x1.fffffep+63, want INEXACT got 0
src/math/ucb/sqrtf.h:49: bad fp exception: RU sqrtf(0x1.fffffep+127)=0x1p+64, want INEXACT got 0
src/math/ucb/sqrtf.h:49: RU sqrtf(0x1.fffffep+127) want 0x1p+64 got 0x1.fffffep+63 ulperr -0.250 = -0x1p-1 + 0x1p-2
src/math/ucb/sqrtf.h:50: bad fp exception: RD sqrtf(0x1.fffffep+127)=0x1.fffffep+63, want INEXACT got 0
src/math/ucb/sqrtf.h:67: bad fp exception: RN sqrtf(0x1.000002p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:69: bad fp exception: RN sqrtf(0x1.fffffep-1)=0x1.fffffep-1, want INEXACT got 0
src/math/ucb/sqrtf.h:70: bad fp exception: RZ sqrtf(0x1.000002p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:72: bad fp exception: RZ sqrtf(0x1.fffffep-1)=0x1.fffffep-1, want INEXACT got 0
src/math/ucb/sqrtf.h:73: bad fp exception: RU sqrtf(0x1.000002p+0)=0x1.000002p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:73: RU sqrtf(0x1.000002p+0) want 0x1.000002p+0 got 0x1p+0 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrtf.h:75: bad fp exception: RU sqrtf(0x1.fffffep-1)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:75: RU sqrtf(0x1.fffffep-1) want 0x1p+0 got 0x1.fffffep-1 ulperr -0.250 = -0x1p-1 + 0x1p-2
src/math/ucb/sqrtf.h:76: bad fp exception: RD sqrtf(0x1.000002p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:78: bad fp exception: RD sqrtf(0x1.fffffep-1)=0x1.fffffep-1, want INEXACT got 0
src/math/ucb/sqrtf.h:85: bad fp exception: RN sqrtf(0x1.766bdcp+1)=0x1.b5d7p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:86: bad fp exception: RN sqrtf(0x1.b6547p+2)=0x1.4efb34p+1, want INEXACT got 0
src/math/ucb/sqrtf.h:87: bad fp exception: RN sqrtf(0x1.e1653p+2)=0x1.5f0d32p+1, want INEXACT got 0
src/math/ucb/sqrtf.h:88: bad fp exception: RN sqrtf(0x1.541ddp+0)=0x1.271372p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:89: bad fp exception: RN sqrtf(0x1.754c3ep+1)=0x1.b52eb4p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:90: bad fp exception: RN sqrtf(0x1.ebe1e2p+1)=0x1.f5d724p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:91: bad fp exception: RN sqrtf(0x1.940d8ep+2)=0x1.419dfap+1, want INEXACT got 0
src/math/ucb/sqrtf.h:92: bad fp exception: RN sqrtf(0x1.dae714p+2)=0x1.5cad1ap+1, want INEXACT got 0
src/math/ucb/sqrtf.h:93: bad fp exception: RN sqrtf(0x1.a9f2d2p+1)=0x1.d2ff14p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:94: bad fp exception: RN sqrtf(0x1.57dd34p-3)=0x1.a397d8p-2, want INEXACT got 0
src/math/ucb/sqrtf.h:96: bad fp exception: RN sqrtf(0x1p-149)=0x1.6a09e6p-75, want INEXACT got 0
src/math/ucb/sqrtf.h:97: bad fp exception: RZ sqrtf(0x1p-149)=0x1.6a09e6p-75, want INEXACT got 0
src/math/ucb/sqrtf.h:98: bad fp exception: RU sqrtf(0x1p-149)=0x1.6a09e8p-75, want INEXACT got 0
src/math/ucb/sqrtf.h:98: RU sqrtf(0x1p-149) want 0x1.6a09e8p-75 got 0x1.6a09e6p-75 ulperr -0.203 = -0x1p+0 + 0x1.980c44p-1
src/math/ucb/sqrtf.h:99: bad fp exception: RD sqrtf(0x1p-149)=0x1.6a09e6p-75, want INEXACT got 0
src/math/ucb/sqrtf.h:142: bad fp exception: RD sqrtf(0x1.fffffcp-127)=0x1.fffffcp-64, want INEXACT got 0
src/math/ucb/sqrtf.h:142: RD sqrtf(0x1.fffffcp-127) want 0x1.fffffcp-64 got 0x1.fffffep-64 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/ucb/sqrtf.h:143: bad fp exception: RD sqrtf(0x1.000004p-126)=0x1p-63, want INEXACT got 0
src/math/ucb/sqrtf.h:143: RD sqrtf(0x1.000004p-126) want 0x1p-63 got 0x1.000002p-63 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/ucb/sqrtf.h:144: bad fp exception: RD sqrtf(0x1.ffffeep-1)=0x1.fffff6p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:145: bad fp exception: RD sqrtf(0x1.fffffp-1)=0x1.fffff6p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:145: RD sqrtf(0x1.fffffp-1) want 0x1.fffff6p-1 got 0x1.fffff8p-1 ulperr 0.000 = 0x1p+0 + -0x1.fffffp-1
src/math/ucb/sqrtf.h:146: bad fp exception: RD sqrtf(0x1.fffff2p-1)=0x1.fffff8p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:147: bad fp exception: RD sqrtf(0x1.fffff4p-1)=0x1.fffff8p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:147: RD sqrtf(0x1.fffff4p-1) want 0x1.fffff8p-1 got 0x1.fffffap-1 ulperr 0.000 = 0x1p+0 + -0x1.fffff6p-1
src/math/ucb/sqrtf.h:148: bad fp exception: RD sqrtf(0x1.fffff6p-1)=0x1.fffffap-1, want INEXACT got 0
src/math/ucb/sqrtf.h:149: bad fp exception: RD sqrtf(0x1.fffff8p-1)=0x1.fffffap-1, want INEXACT got 0
src/math/ucb/sqrtf.h:149: RD sqrtf(0x1.fffff8p-1) want 0x1.fffffap-1 got 0x1.fffffcp-1 ulperr 0.000 = 0x1p+0 + -0x1.fffffcp-1
src/math/ucb/sqrtf.h:150: bad fp exception: RD sqrtf(0x1.fffffap-1)=0x1.fffffcp-1, want INEXACT got 0
src/math/ucb/sqrtf.h:151: bad fp exception: RD sqrtf(0x1.fffffcp-1)=0x1.fffffcp-1, want INEXACT got 0
src/math/ucb/sqrtf.h:151: RD sqrtf(0x1.fffffcp-1) want 0x1.fffffcp-1 got 0x1.fffffep-1 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/ucb/sqrtf.h:152: bad fp exception: RD sqrtf(0x1.000004p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:152: RD sqrtf(0x1.000004p+0) want 0x1p+0 got 0x1.000002p+0 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/ucb/sqrtf.h:153: bad fp exception: RD sqrtf(0x1.000006p+0)=0x1.000002p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:154: bad fp exception: RD sqrtf(0x1.000008p+0)=0x1.000002p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:154: RD sqrtf(0x1.000008p+0) want 0x1.000002p+0 got 0x1.000004p+0 ulperr 0.000 = 0x1p+0 + -0x1.fffff8p-1
src/math/ucb/sqrtf.h:155: bad fp exception: RD sqrtf(0x1.00000ap+0)=0x1.000004p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:156: bad fp exception: RD sqrtf(0x1.00000cp+0)=0x1.000004p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:156: RD sqrtf(0x1.00000cp+0) want 0x1.000004p+0 got 0x1.000006p+0 ulperr 0.000 = 0x1p+0 + -0x1.ffffeep-1
src/math/ucb/sqrtf.h:157: bad fp exception: RD sqrtf(0x1.00000ep+0)=0x1.000006p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:158: bad fp exception: RD sqrtf(0x1.fffffcp+125)=0x1.fffffcp+62, want INEXACT got 0
src/math/ucb/sqrtf.h:158: RD sqrtf(0x1.fffffcp+125) want 0x1.fffffcp+62 got 0x1.fffffep+62 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/ucb/sqrtf.h:159: bad fp exception: RD sqrtf(0x1.000004p+126)=0x1p+63, want INEXACT got 0
src/math/ucb/sqrtf.h:159: RD sqrtf(0x1.000004p+126) want 0x1p+63 got 0x1.000002p+63 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/ucb/sqrtf.h:203: bad fp exception: RN sqrtf(0x1.fffffcp-127)=0x1.fffffep-64, want INEXACT got 0
src/math/ucb/sqrtf.h:204: bad fp exception: RN sqrtf(0x1.000004p-126)=0x1.000002p-63, want INEXACT got 0
src/math/ucb/sqrtf.h:205: bad fp exception: RN sqrtf(0x1.ffffeep-1)=0x1.fffff6p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:206: bad fp exception: RN sqrtf(0x1.fffffp-1)=0x1.fffff8p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:207: bad fp exception: RN sqrtf(0x1.fffff2p-1)=0x1.fffff8p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:208: bad fp exception: RN sqrtf(0x1.fffff4p-1)=0x1.fffffap-1, want INEXACT got 0
src/math/ucb/sqrtf.h:209: bad fp exception: RN sqrtf(0x1.fffff6p-1)=0x1.fffffap-1, want INEXACT got 0
src/math/ucb/sqrtf.h:210: bad fp exception: RN sqrtf(0x1.fffff8p-1)=0x1.fffffcp-1, want INEXACT got 0
src/math/ucb/sqrtf.h:211: bad fp exception: RN sqrtf(0x1.fffffap-1)=0x1.fffffcp-1, want INEXACT got 0
src/math/ucb/sqrtf.h:212: bad fp exception: RN sqrtf(0x1.fffffcp-1)=0x1.fffffep-1, want INEXACT got 0
src/math/ucb/sqrtf.h:213: bad fp exception: RN sqrtf(0x1.000004p+0)=0x1.000002p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:214: bad fp exception: RN sqrtf(0x1.000006p+0)=0x1.000002p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:215: bad fp exception: RN sqrtf(0x1.000008p+0)=0x1.000004p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:216: bad fp exception: RN sqrtf(0x1.00000ap+0)=0x1.000004p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:217: bad fp exception: RN sqrtf(0x1.00000cp+0)=0x1.000006p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:218: bad fp exception: RN sqrtf(0x1.00000ep+0)=0x1.000006p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:219: bad fp exception: RN sqrtf(0x1.fffffcp+125)=0x1.fffffep+62, want INEXACT got 0
src/math/ucb/sqrtf.h:220: bad fp exception: RN sqrtf(0x1.000004p+126)=0x1.000002p+63, want INEXACT got 0
src/math/ucb/sqrtf.h:264: bad fp exception: RU sqrtf(0x1.fffffcp-127)=0x1.fffffep-64, want INEXACT got 0
src/math/ucb/sqrtf.h:265: bad fp exception: RU sqrtf(0x1.000004p-126)=0x1.000002p-63, want INEXACT got 0
src/math/ucb/sqrtf.h:266: bad fp exception: RU sqrtf(0x1.ffffeep-1)=0x1.fffff8p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:266: RU sqrtf(0x1.ffffeep-1) want 0x1.fffff8p-1 got 0x1.fffff6p-1 ulperr -0.499 = -0x1p+0 + 0x1.000014p-1
src/math/ucb/sqrtf.h:267: bad fp exception: RU sqrtf(0x1.fffffp-1)=0x1.fffff8p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:268: bad fp exception: RU sqrtf(0x1.fffff2p-1)=0x1.fffffap-1, want INEXACT got 0
src/math/ucb/sqrtf.h:268: RU sqrtf(0x1.fffff2p-1) want 0x1.fffffap-1 got 0x1.fffff8p-1 ulperr -0.499 = -0x1p+0 + 0x1.00000cp-1
src/math/ucb/sqrtf.h:269: bad fp exception: RU sqrtf(0x1.fffff4p-1)=0x1.fffffap-1, want INEXACT got 0
src/math/ucb/sqrtf.h:270: bad fp exception: RU sqrtf(0x1.fffff6p-1)=0x1.fffffcp-1, want INEXACT got 0
src/math/ucb/sqrtf.h:270: RU sqrtf(0x1.fffff6p-1) want 0x1.fffffcp-1 got 0x1.fffffap-1 ulperr -0.499 = -0x1p+0 + 0x1.000006p-1
src/math/ucb/sqrtf.h:271: bad fp exception: RU sqrtf(0x1.fffff8p-1)=0x1.fffffcp-1, want INEXACT got 0
src/math/ucb/sqrtf.h:272: bad fp exception: RU sqrtf(0x1.fffffap-1)=0x1.fffffep-1, want INEXACT got 0
src/math/ucb/sqrtf.h:272: RU sqrtf(0x1.fffffap-1) want 0x1.fffffep-1 got 0x1.fffffcp-1 ulperr -0.499 = -0x1p+0 + 0x1.000002p-1
src/math/ucb/sqrtf.h:273: bad fp exception: RU sqrtf(0x1.fffffcp-1)=0x1.fffffep-1, want INEXACT got 0
src/math/ucb/sqrtf.h:274: bad fp exception: RU sqrtf(0x1.000004p+0)=0x1.000002p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:275: bad fp exception: RU sqrtf(0x1.000006p+0)=0x1.000004p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:275: RU sqrtf(0x1.000006p+0) want 0x1.000004p+0 got 0x1.000002p+0 ulperr -0.499 = -0x1p+0 + 0x1.000004p-1
src/math/ucb/sqrtf.h:276: bad fp exception: RU sqrtf(0x1.000008p+0)=0x1.000004p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:277: bad fp exception: RU sqrtf(0x1.00000ap+0)=0x1.000006p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:277: RU sqrtf(0x1.00000ap+0) want 0x1.000006p+0 got 0x1.000004p+0 ulperr -0.499 = -0x1p+0 + 0x1.00000cp-1
src/math/ucb/sqrtf.h:278: bad fp exception: RU sqrtf(0x1.00000cp+0)=0x1.000006p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:279: bad fp exception: RU sqrtf(0x1.00000ep+0)=0x1.000008p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:279: RU sqrtf(0x1.00000ep+0) want 0x1.000008p+0 got 0x1.000006p+0 ulperr -0.499 = -0x1p+0 + 0x1.000018p-1
src/math/ucb/sqrtf.h:280: bad fp exception: RU sqrtf(0x1.fffffcp+125)=0x1.fffffep+62, want INEXACT got 0
src/math/ucb/sqrtf.h:281: bad fp exception: RU sqrtf(0x1.000004p+126)=0x1.000002p+63, want INEXACT got 0
src/math/ucb/sqrtf.h:325: bad fp exception: RZ sqrtf(0x1.fffffcp-127)=0x1.fffffcp-64, want INEXACT got 0
src/math/ucb/sqrtf.h:325: RZ sqrtf(0x1.fffffcp-127) want 0x1.fffffcp-64 got 0x1.fffffep-64 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/ucb/sqrtf.h:326: bad fp exception: RZ sqrtf(0x1.000004p-126)=0x1p-63, want INEXACT got 0
src/math/ucb/sqrtf.h:326: RZ sqrtf(0x1.000004p-126) want 0x1p-63 got 0x1.000002p-63 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/ucb/sqrtf.h:327: bad fp exception: RZ sqrtf(0x1.ffffeep-1)=0x1.fffff6p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:328: bad fp exception: RZ sqrtf(0x1.fffffp-1)=0x1.fffff6p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:328: RZ sqrtf(0x1.fffffp-1) want 0x1.fffff6p-1 got 0x1.fffff8p-1 ulperr 0.000 = 0x1p+0 + -0x1.fffffp-1
src/math/ucb/sqrtf.h:329: bad fp exception: RZ sqrtf(0x1.fffff2p-1)=0x1.fffff8p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:330: bad fp exception: RZ sqrtf(0x1.fffff4p-1)=0x1.fffff8p-1, want INEXACT got 0
src/math/ucb/sqrtf.h:330: RZ sqrtf(0x1.fffff4p-1) want 0x1.fffff8p-1 got 0x1.fffffap-1 ulperr 0.000 = 0x1p+0 + -0x1.fffff6p-1
src/math/ucb/sqrtf.h:331: bad fp exception: RZ sqrtf(0x1.fffff6p-1)=0x1.fffffap-1, want INEXACT got 0
src/math/ucb/sqrtf.h:332: bad fp exception: RZ sqrtf(0x1.fffff8p-1)=0x1.fffffap-1, want INEXACT got 0
src/math/ucb/sqrtf.h:332: RZ sqrtf(0x1.fffff8p-1) want 0x1.fffffap-1 got 0x1.fffffcp-1 ulperr 0.000 = 0x1p+0 + -0x1.fffffcp-1
src/math/ucb/sqrtf.h:333: bad fp exception: RZ sqrtf(0x1.fffffap-1)=0x1.fffffcp-1, want INEXACT got 0
src/math/ucb/sqrtf.h:334: bad fp exception: RZ sqrtf(0x1.fffffcp-1)=0x1.fffffcp-1, want INEXACT got 0
src/math/ucb/sqrtf.h:334: RZ sqrtf(0x1.fffffcp-1) want 0x1.fffffcp-1 got 0x1.fffffep-1 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/ucb/sqrtf.h:335: bad fp exception: RZ sqrtf(0x1.000004p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:335: RZ sqrtf(0x1.000004p+0) want 0x1p+0 got 0x1.000002p+0 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/ucb/sqrtf.h:336: bad fp exception: RZ sqrtf(0x1.000006p+0)=0x1.000002p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:337: bad fp exception: RZ sqrtf(0x1.000008p+0)=0x1.000002p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:337: RZ sqrtf(0x1.000008p+0) want 0x1.000002p+0 got 0x1.000004p+0 ulperr 0.000 = 0x1p+0 + -0x1.fffff8p-1
src/math/ucb/sqrtf.h:338: bad fp exception: RZ sqrtf(0x1.00000ap+0)=0x1.000004p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:339: bad fp exception: RZ sqrtf(0x1.00000cp+0)=0x1.000004p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:339: RZ sqrtf(0x1.00000cp+0) want 0x1.000004p+0 got 0x1.000006p+0 ulperr 0.000 = 0x1p+0 + -0x1.ffffeep-1
src/math/ucb/sqrtf.h:340: bad fp exception: RZ sqrtf(0x1.00000ep+0)=0x1.000006p+0, want INEXACT got 0
src/math/ucb/sqrtf.h:341: bad fp exception: RZ sqrtf(0x1.fffffcp+125)=0x1.fffffcp+62, want INEXACT got 0
src/math/ucb/sqrtf.h:341: RZ sqrtf(0x1.fffffcp+125) want 0x1.fffffcp+62 got 0x1.fffffep+62 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/ucb/sqrtf.h:342: bad fp exception: RZ sqrtf(0x1.000004p+126)=0x1p+63, want INEXACT got 0
src/math/ucb/sqrtf.h:342: RZ sqrtf(0x1.000004p+126) want 0x1p+63 got 0x1.000002p+63 ulperr 0.000 = 0x1p+0 + -0x1.fffffep-1
src/math/sanity/sqrtf.h:2: bad fp exception: RN sqrtf(0x1.161868p+2)=0x1.0ad1aep+1, want INEXACT got 0
src/math/sanity/sqrtf.h:5: bad fp exception: RN sqrtf(0x1.288bbcp+3)=0x1.85a7d4p+1, want INEXACT got 0
src/math/sanity/sqrtf.h:6: bad fp exception: RN sqrtf(0x1.52efdp-1)=0x1.a0937ap-1, want INEXACT got 0
src/math/sanity/sqrtf.h:8: bad fp exception: RN sqrtf(0x1.1f9efap-1)=0x1.7fbf4cp-1, want INEXACT got 0
src/math/sanity/sqrtf.h:9: bad fp exception: RN sqrtf(0x1.8c5dbp-1)=0x1.c27ce8p-1, want INEXACT got 0
src/math/special/sqrtf.h:10: bad fp exception: RN sqrtf(0x1.8p-148)=0x1.3988e2p-74, want INEXACT got 0
src/math/special/sqrtf.h:11: bad fp exception: RN sqrtf(0x1p-149)=0x1.6a09e6p-75, want INEXACT got 0
src/math/special/sqrtf.h:13: bad fp exception: RN sqrtf(0x1.fffffep+127)=0x1.fffffep+63, want INEXACT got 0
src/math/special/sqrtf.h:15: bad fp exception: RN sqrtf(0x1.fffffcp-1)=0x1.fffffep-1, want INEXACT got 0
src/math/special/sqrtf.h:16: bad fp exception: RN sqrtf(0x1.fffffep-1)=0x1.fffffep-1, want INEXACT got 0
src/math/special/sqrtf.h:17: bad fp exception: RN sqrtf(0x1.fffffcp+0)=0x1.6a09e4p+0, want INEXACT got 0
src/math/special/sqrtf.h:18: bad fp exception: RN sqrtf(0x1.fffffep+0)=0x1.6a09e6p+0, want INEXACT got 0
src/math/special/sqrtf.h:19: bad fp exception: RN sqrtf(0x1.000002p+0)=0x1p+0, want INEXACT got 0
src/math/special/sqrtf.h:20: bad fp exception: RN sqrtf(0x1.000004p+0)=0x1.000002p+0, want INEXACT got 0
src/math/special/sqrtf.h:21: bad fp exception: RN sqrtf(0x1.000002p+1)=0x1.6a09e8p+0, want INEXACT got 0
src/math/special/sqrtf.h:22: bad fp exception: RN sqrtf(0x1.000004p+1)=0x1.6a09eap+0, want INEXACT got 0
FAIL src/math/sqrtf.exe [status 1]
src/math/ucb/sqrt.h:47: bad fp exception: RN sqrtl(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT got 0
src/math/ucb/sqrt.h:48: bad fp exception: RZ sqrtl(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT got 0
src/math/ucb/sqrt.h:49: bad fp exception: RU sqrtl(0x1.fffffffffffffp+1023)=0x1p+512, want INEXACT got 0
src/math/ucb/sqrt.h:49: RU sqrtl(0x1.fffffffffffffp+1023) want 0x1p+512 got 0x1.fffffffffffffp+511 ulperr -0.250 = -0x1p-1 + 0x1p-2
src/math/ucb/sqrt.h:50: bad fp exception: RD sqrtl(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT got 0
src/math/ucb/sqrt.h:67: bad fp exception: RN sqrtl(0x1.0000000000001p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:69: bad fp exception: RN sqrtl(0x1.fffffffffffffp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:70: bad fp exception: RZ sqrtl(0x1.0000000000001p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:72: bad fp exception: RZ sqrtl(0x1.fffffffffffffp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:73: bad fp exception: RU sqrtl(0x1.0000000000001p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:73: RU sqrtl(0x1.0000000000001p+0) want 0x1.0000000000001p+0 got 0x1p+0 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:75: bad fp exception: RU sqrtl(0x1.fffffffffffffp-1)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:75: RU sqrtl(0x1.fffffffffffffp-1) want 0x1p+0 got 0x1.fffffffffffffp-1 ulperr -0.250 = -0x1p-1 + 0x1p-2
src/math/ucb/sqrt.h:76: bad fp exception: RD sqrtl(0x1.0000000000001p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:78: bad fp exception: RD sqrtl(0x1.fffffffffffffp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:89: bad fp exception: RN sqrtl(0x1.766bdb2b5006dp+1)=0x1.b5d6fec392e7dp+0, want INEXACT got 0
src/math/ucb/sqrt.h:90: bad fp exception: RN sqrtl(0x1.b6546fb825911p+2)=0x1.4efb330ef0b43p+1, want INEXACT got 0
src/math/ucb/sqrt.h:91: bad fp exception: RN sqrtl(0x1.e165309de7505p+2)=0x1.5f0d324d38bdp+1, want INEXACT got 0
src/math/ucb/sqrt.h:92: bad fp exception: RN sqrtl(0x1.541dcfba96889p+0)=0x1.271370ec508dp+0, want INEXACT got 0
src/math/ucb/sqrt.h:93: bad fp exception: RN sqrtl(0x1.754c3e27084ddp+1)=0x1.b52eb45df30b2p+0, want INEXACT got 0
src/math/ucb/sqrt.h:94: bad fp exception: RN sqrtl(0x1.ebe1e1b093c41p+1)=0x1.f5d722e54e976p+0, want INEXACT got 0
src/math/ucb/sqrt.h:95: bad fp exception: RN sqrtl(0x1.940d8d18455f5p+2)=0x1.419df976f692dp+1, want INEXACT got 0
src/math/ucb/sqrt.h:96: bad fp exception: RN sqrtl(0x1.dae714a51b239p+2)=0x1.5cad1a5584b9ap+1, want INEXACT got 0
src/math/ucb/sqrt.h:97: bad fp exception: RN sqrtl(0x1.a9f2d1079de4dp+1)=0x1.d2ff13bff7b67p+0, want INEXACT got 0
src/math/ucb/sqrt.h:98: bad fp exception: RN sqrtl(0x1.57dd33103b871p-3)=0x1.a397d7b1e31f2p-2, want INEXACT got 0
src/math/ucb/sqrt.h:135: bad fp exception: RD sqrtl(0x1.ffffffffffffep-1023)=0x1.ffffffffffffep-512, want INEXACT got 0
src/math/ucb/sqrt.h:135: RD sqrtl(0x1.ffffffffffffep-1023) want 0x1.ffffffffffffep-512 got 0x1.fffffffffffffp-512 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:136: bad fp exception: RD sqrtl(0x1.0000000000002p-1022)=0x1p-511, want INEXACT got 0
src/math/ucb/sqrt.h:136: RD sqrtl(0x1.0000000000002p-1022) want 0x1p-511 got 0x1.0000000000001p-511 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:137: bad fp exception: RD sqrtl(0x1.ffffffffffff7p-1)=0x1.ffffffffffffbp-1, want INEXACT got 0
src/math/ucb/sqrt.h:138: bad fp exception: RD sqrtl(0x1.ffffffffffff8p-1)=0x1.ffffffffffffbp-1, want INEXACT got 0
src/math/ucb/sqrt.h:138: RD sqrtl(0x1.ffffffffffff8p-1) want 0x1.ffffffffffffbp-1 got 0x1.ffffffffffffcp-1 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:139: bad fp exception: RD sqrtl(0x1.ffffffffffff9p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:140: bad fp exception: RD sqrtl(0x1.ffffffffffffap-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:140: RD sqrtl(0x1.ffffffffffffap-1) want 0x1.ffffffffffffcp-1 got 0x1.ffffffffffffdp-1 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:141: bad fp exception: RD sqrtl(0x1.ffffffffffffbp-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:142: bad fp exception: RD sqrtl(0x1.ffffffffffffcp-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:142: RD sqrtl(0x1.ffffffffffffcp-1) want 0x1.ffffffffffffdp-1 got 0x1.ffffffffffffep-1 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:143: bad fp exception: RD sqrtl(0x1.ffffffffffffdp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:144: bad fp exception: RD sqrtl(0x1.ffffffffffffep-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:144: RD sqrtl(0x1.ffffffffffffep-1) want 0x1.ffffffffffffep-1 got 0x1.fffffffffffffp-1 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:145: bad fp exception: RD sqrtl(0x1.0000000000002p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:145: RD sqrtl(0x1.0000000000002p+0) want 0x1p+0 got 0x1.0000000000001p+0 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:146: bad fp exception: RD sqrtl(0x1.0000000000003p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:147: bad fp exception: RD sqrtl(0x1.0000000000004p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:147: RD sqrtl(0x1.0000000000004p+0) want 0x1.0000000000001p+0 got 0x1.0000000000002p+0 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:148: bad fp exception: RD sqrtl(0x1.0000000000005p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:149: bad fp exception: RD sqrtl(0x1.0000000000006p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:149: RD sqrtl(0x1.0000000000006p+0) want 0x1.0000000000002p+0 got 0x1.0000000000003p+0 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:150: bad fp exception: RD sqrtl(0x1.0000000000007p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:151: bad fp exception: RD sqrtl(0x1.ffffffffffffep+1021)=0x1.ffffffffffffep+510, want INEXACT got 0
src/math/ucb/sqrt.h:151: RD sqrtl(0x1.ffffffffffffep+1021) want 0x1.ffffffffffffep+510 got 0x1.fffffffffffffp+510 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:152: bad fp exception: RD sqrtl(0x1.0000000000002p+1022)=0x1p+511, want INEXACT got 0
src/math/ucb/sqrt.h:152: RD sqrtl(0x1.0000000000002p+1022) want 0x1p+511 got 0x1.0000000000001p+511 ulperr -0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:206: bad fp exception: RN sqrtl(0x1.ffffffffffffep-1023)=0x1.fffffffffffffp-512, want INEXACT got 0
src/math/ucb/sqrt.h:207: bad fp exception: RN sqrtl(0x1.0000000000002p-1022)=0x1.0000000000001p-511, want INEXACT got 0
src/math/ucb/sqrt.h:208: bad fp exception: RN sqrtl(0x1.ffffffffffff7p-1)=0x1.ffffffffffffbp-1, want INEXACT got 0
src/math/ucb/sqrt.h:209: bad fp exception: RN sqrtl(0x1.ffffffffffff8p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:210: bad fp exception: RN sqrtl(0x1.ffffffffffff9p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:211: bad fp exception: RN sqrtl(0x1.ffffffffffffap-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:212: bad fp exception: RN sqrtl(0x1.ffffffffffffbp-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:213: bad fp exception: RN sqrtl(0x1.ffffffffffffcp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:214: bad fp exception: RN sqrtl(0x1.ffffffffffffdp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:215: bad fp exception: RN sqrtl(0x1.ffffffffffffep-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:216: bad fp exception: RN sqrtl(0x1.0000000000002p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:217: bad fp exception: RN sqrtl(0x1.0000000000003p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:218: bad fp exception: RN sqrtl(0x1.0000000000004p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:219: bad fp exception: RN sqrtl(0x1.0000000000005p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:220: bad fp exception: RN sqrtl(0x1.0000000000006p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:221: bad fp exception: RN sqrtl(0x1.0000000000007p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:222: bad fp exception: RN sqrtl(0x1.ffffffffffffep+1021)=0x1.fffffffffffffp+510, want INEXACT got 0
src/math/ucb/sqrt.h:223: bad fp exception: RN sqrtl(0x1.0000000000002p+1022)=0x1.0000000000001p+511, want INEXACT got 0
src/math/ucb/sqrt.h:273: bad fp exception: RU sqrtl(0x1.ffffffffffffep-1023)=0x1.fffffffffffffp-512, want INEXACT got 0
src/math/ucb/sqrt.h:274: bad fp exception: RU sqrtl(0x1.0000000000002p-1022)=0x1.0000000000001p-511, want INEXACT got 0
src/math/ucb/sqrt.h:275: bad fp exception: RU sqrtl(0x1.ffffffffffff7p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:275: RU sqrtl(0x1.ffffffffffff7p-1) want 0x1.ffffffffffffcp-1 got 0x1.ffffffffffffbp-1 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:276: bad fp exception: RU sqrtl(0x1.ffffffffffff8p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:277: bad fp exception: RU sqrtl(0x1.ffffffffffff9p-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:277: RU sqrtl(0x1.ffffffffffff9p-1) want 0x1.ffffffffffffdp-1 got 0x1.ffffffffffffcp-1 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:278: bad fp exception: RU sqrtl(0x1.ffffffffffffap-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:279: bad fp exception: RU sqrtl(0x1.ffffffffffffbp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:279: RU sqrtl(0x1.ffffffffffffbp-1) want 0x1.ffffffffffffep-1 got 0x1.ffffffffffffdp-1 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:280: bad fp exception: RU sqrtl(0x1.ffffffffffffcp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:281: bad fp exception: RU sqrtl(0x1.ffffffffffffdp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:281: RU sqrtl(0x1.ffffffffffffdp-1) want 0x1.fffffffffffffp-1 got 0x1.ffffffffffffep-1 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:282: bad fp exception: RU sqrtl(0x1.ffffffffffffep-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/ucb/sqrt.h:283: bad fp exception: RU sqrtl(0x1.0000000000002p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:284: bad fp exception: RU sqrtl(0x1.0000000000003p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:284: RU sqrtl(0x1.0000000000003p+0) want 0x1.0000000000002p+0 got 0x1.0000000000001p+0 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:285: bad fp exception: RU sqrtl(0x1.0000000000004p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:286: bad fp exception: RU sqrtl(0x1.0000000000005p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:286: RU sqrtl(0x1.0000000000005p+0) want 0x1.0000000000003p+0 got 0x1.0000000000002p+0 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:287: bad fp exception: RU sqrtl(0x1.0000000000006p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:288: bad fp exception: RU sqrtl(0x1.0000000000007p+0)=0x1.0000000000004p+0, want INEXACT got 0
src/math/ucb/sqrt.h:288: RU sqrtl(0x1.0000000000007p+0) want 0x1.0000000000004p+0 got 0x1.0000000000003p+0 ulperr -0.500 = -0x1p+0 + 0x1p-1
src/math/ucb/sqrt.h:289: bad fp exception: RU sqrtl(0x1.ffffffffffffep+1021)=0x1.fffffffffffffp+510, want INEXACT got 0
src/math/ucb/sqrt.h:290: bad fp exception: RU sqrtl(0x1.0000000000002p+1022)=0x1.0000000000001p+511, want INEXACT got 0
src/math/ucb/sqrt.h:344: bad fp exception: RZ sqrtl(0x1.ffffffffffffep-1023)=0x1.ffffffffffffep-512, want INEXACT got 0
src/math/ucb/sqrt.h:344: RZ sqrtl(0x1.ffffffffffffep-1023) want 0x1.ffffffffffffep-512 got 0x1.fffffffffffffp-512 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:345: bad fp exception: RZ sqrtl(0x1.0000000000002p-1022)=0x1p-511, want INEXACT got 0
src/math/ucb/sqrt.h:345: RZ sqrtl(0x1.0000000000002p-1022) want 0x1p-511 got 0x1.0000000000001p-511 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:346: bad fp exception: RZ sqrtl(0x1.ffffffffffff7p-1)=0x1.ffffffffffffbp-1, want INEXACT got 0
src/math/ucb/sqrt.h:347: bad fp exception: RZ sqrtl(0x1.ffffffffffff8p-1)=0x1.ffffffffffffbp-1, want INEXACT got 0
src/math/ucb/sqrt.h:347: RZ sqrtl(0x1.ffffffffffff8p-1) want 0x1.ffffffffffffbp-1 got 0x1.ffffffffffffcp-1 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:348: bad fp exception: RZ sqrtl(0x1.ffffffffffff9p-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:349: bad fp exception: RZ sqrtl(0x1.ffffffffffffap-1)=0x1.ffffffffffffcp-1, want INEXACT got 0
src/math/ucb/sqrt.h:349: RZ sqrtl(0x1.ffffffffffffap-1) want 0x1.ffffffffffffcp-1 got 0x1.ffffffffffffdp-1 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:350: bad fp exception: RZ sqrtl(0x1.ffffffffffffbp-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:351: bad fp exception: RZ sqrtl(0x1.ffffffffffffcp-1)=0x1.ffffffffffffdp-1, want INEXACT got 0
src/math/ucb/sqrt.h:351: RZ sqrtl(0x1.ffffffffffffcp-1) want 0x1.ffffffffffffdp-1 got 0x1.ffffffffffffep-1 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:352: bad fp exception: RZ sqrtl(0x1.ffffffffffffdp-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:353: bad fp exception: RZ sqrtl(0x1.ffffffffffffep-1)=0x1.ffffffffffffep-1, want INEXACT got 0
src/math/ucb/sqrt.h:353: RZ sqrtl(0x1.ffffffffffffep-1) want 0x1.ffffffffffffep-1 got 0x1.fffffffffffffp-1 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:354: bad fp exception: RZ sqrtl(0x1.0000000000002p+0)=0x1p+0, want INEXACT got 0
src/math/ucb/sqrt.h:354: RZ sqrtl(0x1.0000000000002p+0) want 0x1p+0 got 0x1.0000000000001p+0 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:355: bad fp exception: RZ sqrtl(0x1.0000000000003p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:356: bad fp exception: RZ sqrtl(0x1.0000000000004p+0)=0x1.0000000000001p+0, want INEXACT got 0
src/math/ucb/sqrt.h:356: RZ sqrtl(0x1.0000000000004p+0) want 0x1.0000000000001p+0 got 0x1.0000000000002p+0 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:357: bad fp exception: RZ sqrtl(0x1.0000000000005p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:358: bad fp exception: RZ sqrtl(0x1.0000000000006p+0)=0x1.0000000000002p+0, want INEXACT got 0
src/math/ucb/sqrt.h:358: RZ sqrtl(0x1.0000000000006p+0) want 0x1.0000000000002p+0 got 0x1.0000000000003p+0 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:359: bad fp exception: RZ sqrtl(0x1.0000000000007p+0)=0x1.0000000000003p+0, want INEXACT got 0
src/math/ucb/sqrt.h:360: bad fp exception: RZ sqrtl(0x1.ffffffffffffep+1021)=0x1.ffffffffffffep+510, want INEXACT got 0
src/math/ucb/sqrt.h:360: RZ sqrtl(0x1.ffffffffffffep+1021) want 0x1.ffffffffffffep+510 got 0x1.fffffffffffffp+510 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/ucb/sqrt.h:361: bad fp exception: RZ sqrtl(0x1.0000000000002p+1022)=0x1p+511, want INEXACT got 0
src/math/ucb/sqrt.h:361: RZ sqrtl(0x1.0000000000002p+1022) want 0x1p+511 got 0x1.0000000000001p+511 ulperr 0.000 = 0x1p+0 + -0x1p+0
src/math/sanity/sqrt.h:2: bad fp exception: RN sqrtl(0x1.161868e18bc67p+2)=0x1.0ad1adc856f29p+1, want INEXACT got 0
src/math/sanity/sqrt.h:5: bad fp exception: RN sqrtl(0x1.288bbb0d6a1e6p+3)=0x1.85a7d346e8c13p+1, want INEXACT got 0
src/math/sanity/sqrt.h:6: bad fp exception: RN sqrtl(0x1.52efd0cd80497p-1)=0x1.a0937a0b92ccbp-1, want INEXACT got 0
src/math/sanity/sqrt.h:8: bad fp exception: RN sqrtl(0x1.1f9ef934745cbp-1)=0x1.7fbf4b5a076bcp-1, want INEXACT got 0
src/math/sanity/sqrt.h:9: bad fp exception: RN sqrtl(0x1.8c5db097f7442p-1)=0x1.c27ce94ff39c5p-1, want INEXACT got 0
src/math/special/sqrt.h:9: bad fp exception: RN sqrtl(0x1p-1073)=0x1.6a09e667f3bcdp-537, want INEXACT got 0
src/math/special/sqrt.h:10: bad fp exception: RN sqrtl(0x1.8p-1073)=0x1.bb67ae8584caap-537, want INEXACT got 0
src/math/special/sqrt.h:13: bad fp exception: RN sqrtl(0x1.fffffffffffffp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/special/sqrt.h:14: bad fp exception: RN sqrtl(0x1.fffffffffffffp+0)=0x1.6a09e667f3bccp+0, want INEXACT got 0
src/math/special/sqrt.h:15: bad fp exception: RN sqrtl(0x1.0000000000001p+0)=0x1p+0, want INEXACT got 0
src/math/special/sqrt.h:16: bad fp exception: RN sqrtl(0x1.0000000000001p+1)=0x1.6a09e667f3bcdp+0, want INEXACT got 0
src/math/special/sqrt.h:17: bad fp exception: RN sqrtl(0x1.0000000000001p+0)=0x1p+0, want INEXACT got 0
src/math/special/sqrt.h:18: bad fp exception: RN sqrtl(0x1.fffffffffffffp-1)=0x1.fffffffffffffp-1, want INEXACT got 0
src/math/special/sqrt.h:20: bad fp exception: RN sqrtl(0x1.fffffffffffffp+1023)=0x1.fffffffffffffp+511, want INEXACT got 0
src/math/special/sqrt.h:21: bad fp exception: RN sqrtl(0x1.ffffffffffffbp+1023)=0x1.ffffffffffffdp+511, want INEXACT got 0
src/math/special/sqrt.h:22: bad fp exception: RN sqrtl(0x1.ffffffffffff7p+1023)=0x1.ffffffffffffbp+511, want INEXACT got 0
src/math/special/sqrt.h:23: bad fp exception: RN sqrtl(0x1.ffffffffffff3p+1023)=0x1.ffffffffffff9p+511, want INEXACT got 0
src/math/special/sqrt.h:24: bad fp exception: RN sqrtl(0x1.fffffffffffefp+1023)=0x1.ffffffffffff7p+511, want INEXACT got 0
src/math/special/sqrt.h:25: bad fp exception: RN sqrtl(0x1.fffffffffffebp+1023)=0x1.ffffffffffff5p+511, want INEXACT got 0
src/math/special/sqrt.h:26: bad fp exception: RN sqrtl(0x1.fffffffffffe7p+1023)=0x1.ffffffffffff3p+511, want INEXACT got 0
src/math/special/sqrt.h:27: bad fp exception: RN sqrtl(0x1.fffffffffffe3p+1023)=0x1.ffffffffffff1p+511, want INEXACT got 0
src/math/special/sqrt.h:28: bad fp exception: RN sqrtl(0x1.fffffffffffdfp+1023)=0x1.fffffffffffefp+511, want INEXACT got 0
src/math/special/sqrt.h:29: bad fp exception: RN sqrtl(0x1.fffffffffffdbp+1023)=0x1.fffffffffffedp+511, want INEXACT got 0
src/math/special/sqrt.h:30: bad fp exception: RN sqrtl(0x1.fffffffffffd7p+1023)=0x1.fffffffffffebp+511, want INEXACT got 0
src/math/special/sqrt.h:31: bad fp exception: RN sqrtl(0x1.0000000000003p-1022)=0x1.0000000000001p-511, want INEXACT got 0
src/math/special/sqrt.h:32: bad fp exception: RN sqrtl(0x1.0000000000007p-1022)=0x1.0000000000003p-511, want INEXACT got 0
src/math/special/sqrt.h:33: bad fp exception: RN sqrtl(0x1.000000000000bp-1022)=0x1.0000000000005p-511, want INEXACT got 0
src/math/special/sqrt.h:34: bad fp exception: RN sqrtl(0x1.000000000000fp-1022)=0x1.0000000000007p-511, want INEXACT got 0
src/math/special/sqrt.h:35: bad fp exception: RN sqrtl(0x1.0000000000013p-1022)=0x1.0000000000009p-511, want INEXACT got 0
src/math/special/sqrt.h:36: bad fp exception: RN sqrtl(0x1.0000000000017p-1022)=0x1.000000000000bp-511, want INEXACT got 0
src/math/special/sqrt.h:37: bad fp exception: RN sqrtl(0x1.000000000001bp-1022)=0x1.000000000000dp-511, want INEXACT got 0
src/math/special/sqrt.h:38: bad fp exception: RN sqrtl(0x1.000000000001fp-1022)=0x1.000000000000fp-511, want INEXACT got 0
src/math/special/sqrt.h:39: bad fp exception: RN sqrtl(0x1.0000000000023p-1022)=0x1.0000000000011p-511, want INEXACT got 0
src/math/special/sqrt.h:40: bad fp exception: RN sqrtl(0x1.0000000000027p-1022)=0x1.0000000000013p-511, want INEXACT got 0
src/math/special/sqrt.h:41: bad fp exception: RN sqrtl(0x1.000000000002bp-1022)=0x1.0000000000015p-511, want INEXACT got 0
src/math/special/sqrt.h:42: bad fp exception: RN sqrtl(0x1.000000000002fp-1022)=0x1.0000000000017p-511, want INEXACT got 0
src/math/special/sqrt.h:43: bad fp exception: RN sqrtl(0x1.0000000000033p-1022)=0x1.0000000000019p-511, want INEXACT got 0
src/math/special/sqrt.h:44: bad fp exception: RN sqrtl(0x1.0000000000037p-1022)=0x1.000000000001bp-511, want INEXACT got 0
src/math/special/sqrt.h:45: bad fp exception: RN sqrtl(0x1.7167bc36eaa3bp+6)=0x1.3384c7db650cdp+3, want INEXACT got 0
src/math/special/sqrt.h:46: bad fp exception: RN sqrtl(0x1.7570994273ad7p+6)=0x1.353186e89b8ffp+3, want INEXACT got 0
src/math/special/sqrt.h:47: bad fp exception: RN sqrtl(0x1.7dae969442fe6p+6)=0x1.389640fb18b75p+3, want INEXACT got 0
src/math/special/sqrt.h:48: bad fp exception: RN sqrtl(0x1.7f8444fcf67e5p+6)=0x1.395659e94669fp+3, want INEXACT got 0
src/math/special/sqrt.h:49: bad fp exception: RN sqrtl(0x1.8364650e63a54p+6)=0x1.3aea9efe1a3d7p+3, want INEXACT got 0
src/math/special/sqrt.h:50: bad fp exception: RN sqrtl(0x1.85bedd274edd8p+6)=0x1.3bdf20c867057p+3, want INEXACT got 0
src/math/special/sqrt.h:51: bad fp exception: RN sqrtl(0x1.8609cf496ab77p+6)=0x1.3bfd7e14b5eabp+3, want INEXACT got 0
src/math/special/sqrt.h:52: bad fp exception: RN sqrtl(0x1.873849c70a375p+6)=0x1.3c77ed341d27fp+3, want INEXACT got 0
src/math/special/sqrt.h:53: bad fp exception: RN sqrtl(0x1.8919c962cbaaep+6)=0x1.3d3a7113ee82fp+3, want INEXACT got 0
src/math/special/sqrt.h:54: bad fp exception: RN sqrtl(0x1.8de4493e22dc6p+6)=0x1.3f27d448220c3p+3, want INEXACT got 0
src/math/special/sqrt.h:55: bad fp exception: RN sqrtl(0x1.924829a17a288p+6)=0x1.40e9552eec28fp+3, want INEXACT got 0
src/math/special/sqrt.h:56: bad fp exception: RN sqrtl(0x1.92702cd992f12p+6)=0x1.40f94a6fdfddfp+3, want INEXACT got 0
src/math/special/sqrt.h:57: bad fp exception: RN sqrtl(0x1.92b763a8311fdp+6)=0x1.4115af614695fp+3, want INEXACT got 0
src/math/special/sqrt.h:58: bad fp exception: RN sqrtl(0x1.947da013c7293p+6)=0x1.41ca91102940fp+3, want INEXACT got 0
src/math/special/sqrt.h:59: bad fp exception: RN sqrtl(0x1.9536091c494d2p+6)=0x1.4213e334c77adp+3, want INEXACT got 0
src/math/special/sqrt.h:60: bad fp exception: RN sqrtl(0x1.61b04c6p-1019)=0x1.a98b88f18b46dp-510, want INEXACT got 0
src/math/special/sqrt.h:61: bad fp exception: RN sqrtl(0x1.93789f1p-1018)=0x1.4162ae43d5821p-509, want INEXACT got 0
src/math/special/sqrt.h:62: bad fp exception: RN sqrtl(0x1.a1989b4p-1018)=0x1.46f6736eb44bbp-509, want INEXACT got 0
src/math/special/sqrt.h:63: bad fp exception: RN sqrtl(0x1.f93bc9p-1018)=0x1.67a36ec403bafp-509, want INEXACT got 0
src/math/special/sqrt.h:64: bad fp exception: RN sqrtl(0x1.2f675e3p-1017)=0x1.8a22ab6dcfee1p-509, want INEXACT got 0
src/math/special/sqrt.h:65: bad fp exception: RN sqrtl(0x1.a158508p-1017)=0x1.ce418a96cf589p-509, want INEXACT got 0
src/math/special/sqrt.h:66: bad fp exception: RN sqrtl(0x1.cd31f078p-1017)=0x1.e5ef1c65dccebp-509, want INEXACT got 0
src/math/special/sqrt.h:67: bad fp exception: RN sqrtl(0x1.33b43b08p-1016)=0x1.18a9f607e1701p-508, want INEXACT got 0
src/math/special/sqrt.h:68: bad fp exception: RN sqrtl(0x1.6e66a858p-1016)=0x1.324402a00b45fp-508, want INEXACT got 0
src/math/special/sqrt.h:69: bad fp exception: RN sqrtl(0x1.8661cbf8p-1016)=0x1.3c212046bfdffp-508, want INEXACT got 0
src/math/special/sqrt.h:70: bad fp exception: RN sqrtl(0x1.bbb221b4p-1016)=0x1.510681b939931p-508, want INEXACT got 0
src/math/special/sqrt.h:71: bad fp exception: RN sqrtl(0x1.c4942f3cp-1016)=0x1.5461e59227ab5p-508, want INEXACT got 0
src/math/special/sqrt.h:72: bad fp exception: RN sqrtl(0x1.dbb258c8p-1016)=0x1.5cf7b0f78d3afp-508, want INEXACT got 0
src/math/special/sqrt.h:73: bad fp exception: RN sqrtl(0x1.57103ea4p-1015)=0x1.a31ab946d340bp-508, want INEXACT got 0
src/math/special/sqrt.h:74: bad fp exception: RN sqrtl(0x1.9b294f88p-1015)=0x1.cad197e28e85bp-508, want INEXACT got 0
FAIL src/math/sqrtl.exe [status 1]
X src/math/sanity/tgamma.h:4: RN tgamma(-0x1.a206f0a19dcc4p+2) want -0x1.9fd0c1ce12f14p-10 got -0x1.9fd0c1ce12f12p-10 ulperr 1.597 = 0x1p+1 + -0x1.9c637p-2
X src/math/sanity/tgamma.h:7: RN tgamma(-0x1.a05cc754481d1p-2) want -0x1.d9a22b2f3f253p+1 got -0x1.d9a22b2f3f251p+1 ulperr 1.674 = 0x1p+1 + -0x1.4d79f4p-2
src/math/special/tgamma.h:5: bad fp exception: RN tgamma(-0x1p+0)=nan, want INVALID got 0
src/math/special/tgamma.h:7: bad fp exception: RN tgamma(-0x1p+1)=nan, want INVALID got 0
X src/math/special/tgamma.h:47: RN tgamma(0x1p-53) want 0x1.fffffffffffffp+52 got 0x1.ffffffffffffdp+52 ulperr -2.423 = -0x1p+1 + -0x1.b0ee6p-2
X src/math/special/tgamma.h:60: RN tgamma(-0x1.0000000000001p+0) want 0x1.fffffffffffffp+51 got 0x1.ffffffffffffdp+51 ulperr -2.154 = -0x1p+1 + -0x1.3c467ep-3
X src/math/special/tgamma.h:62: RN tgamma(-0x1.0000000000003p+0) want 0x1.5555555555554p+50 got 0x1.5555555555552p+50 ulperr -1.642 = -0x1p+1 + 0x1.6e642cp-2
X src/math/special/tgamma.h:66: RN tgamma(-0x1.ffffffffffffep+0) want 0x1.0000000000002p+50 got 0x1.0000000000004p+50 ulperr 2.154 = 0x1p+1 + 0x1.3c467ep-3
X src/math/special/tgamma.h:68: RN tgamma(-0x1.0000000000001p+1) want -0x1.ffffffffffffcp+49 got -0x1.ffffffffffff7p+49 ulperr 5.309 = 0x1.4p+2 + 0x1.3c467ep-2
X src/math/special/tgamma.h:72: RN tgamma(-0x1.7fffffffffffdp+1) want -0x1.c71c71c71c72ap+46 got -0x1.c71c71c71c72cp+46 ulperr -2.157 = -0x1p+1 + -0x1.4177f6p-3
X src/math/special/tgamma.h:82: RN tgamma(-0x1.59fffffffffffp+7) want -0x1.46b1fa841aaa6p-997 got -0x1.46b1fa841aaa8p-997 ulperr -1.801 = -0x1p+1 + 0x1.979e28p-3
X src/math/special/tgamma.h:83: RN tgamma(-0x1.5a00000000001p+7) want 0x1.46b1fa841a412p-997 got 0x1.46b1fa841a41p-997 ulperr -1.700 = -0x1p+1 + 0x1.333de2p-2
X src/math/special/tgamma.h:84: RN tgamma(-0x1.5bfffffffffffp+7) want 0x1.e0a7b14f99fdbp-1005 got 0x1.e0a7b14f99fddp-1005 ulperr 1.579 = 0x1p+1 + -0x1.af416ap-2
X src/math/special/tgamma.h:85: RN tgamma(-0x1.5c00000000001p+7) want -0x1.e0a7b14f9962ap-1005 got -0x1.e0a7b14f9962cp-1005 ulperr -1.685 = -0x1p+1 + 0x1.42ddc4p-2
X src/math/special/tgamma.h:88: RN tgamma(-0x1.5ffffffffffffp+7) want 0x1.ff5df5f533fd3p-1020 got 0x1.ff5df5f533fd6p-1020 ulperr 2.513 = 0x1.8p+1 + -0x1.f234a4p-2
X src/math/special/tgamma.h:119: RN tgamma(-0x1.8p+0) want 0x1.2e7fb0bcdf4f2p+1 got 0x1.2e7fb0bcdf4fp+1 ulperr -1.770 = -0x1p+1 + 0x1.d7697p-3
X src/math/special/tgamma.h:136: RN tgamma(-0x1.02p+6) want -0x1.912276590832ep-298 got -0x1.912276590833p-298 ulperr -1.662 = -0x1p+1 + 0x1.59f79ap-2
X src/math/special/tgamma.h:141: RN tgamma(-0x1.55p+7) want -0x1.7d2374dfcda7ap-1022 got -0x1.7d2374dfcda78p-1022 ulperr 1.778 = 0x1p+1 + -0x1.c68fa4p-3
FAIL src/math/tgamma.exe [status 1]
src/math/special/tgammaf.h:4: bad fp exception: RN tgammaf(-0x1p+0)=-nan, want INVALID got 0
src/math/special/tgammaf.h:6: bad fp exception: RN tgammaf(-0x1p+1)=-nan, want INVALID got 0
FAIL src/math/tgammaf.exe [status 1]
src/math/special/tgamma.h:5: bad fp exception: RN tgammal(-0x1p+0)=nan, want INVALID got 0
src/math/special/tgamma.h:7: bad fp exception: RN tgammal(-0x1p+1)=nan, want INVALID got 0
src/math/special/tgamma.h:47: RN tgammal(0x1p-53) want 0x1.fffffffffffffp+52 got 0x1.ffffffffffffdp+52 ulperr -2.423 = -0x1p+1 + -0x1.b0ee6p-2
src/math/special/tgamma.h:60: RN tgammal(-0x1.0000000000001p+0) want 0x1.fffffffffffffp+51 got 0x1.ffffffffffffdp+51 ulperr -2.154 = -0x1p+1 + -0x1.3c467ep-3
src/math/special/tgamma.h:66: RN tgammal(-0x1.ffffffffffffep+0) want 0x1.0000000000002p+50 got 0x1.0000000000004p+50 ulperr 2.154 = 0x1p+1 + 0x1.3c467ep-3
src/math/special/tgamma.h:68: RN tgammal(-0x1.0000000000001p+1) want -0x1.ffffffffffffcp+49 got -0x1.ffffffffffff7p+49 ulperr 5.309 = 0x1.4p+2 + 0x1.3c467ep-2
src/math/special/tgamma.h:72: RN tgammal(-0x1.7fffffffffffdp+1) want -0x1.c71c71c71c72ap+46 got -0x1.c71c71c71c72cp+46 ulperr -2.157 = -0x1p+1 + -0x1.4177f6p-3
src/math/special/tgamma.h:88: RN tgammal(-0x1.5ffffffffffffp+7) want 0x1.ff5df5f533fd3p-1020 got 0x1.ff5df5f533fd6p-1020 ulperr 2.513 = 0x1.8p+1 + -0x1.f234a4p-2
FAIL src/math/tgammal.exe [status 1]
src/math/sanity/y0.h:1: bad fp exception: RN y0(-0x1.02239f3c6a8f1p+3)=nan, want INVALID got 0
src/math/sanity/y0.h:3: bad fp exception: RN y0(-0x1.0c34b3e01e6e7p+3)=nan, want INVALID got 0
src/math/sanity/y0.h:4: bad fp exception: RN y0(-0x1.a206f0a19dcc4p+2)=nan, want INVALID got 0
src/math/sanity/y0.h:7: bad fp exception: RN y0(-0x1.a05cc754481d1p-2)=nan, want INVALID got 0
src/math/sanity/y0.h:10: bad fp exception: RN y0(-0x1.5b86ea8118a0ep-1)=nan, want INVALID got 0
src/math/special/y0.h:1: bad fp exception: RN y0(0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/y0.h:2: bad fp exception: RN y0(-0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/y0.h:3: bad fp exception: RN y0(-0x1p+0)=nan, want INVALID got 0
src/math/special/y0.h:5: bad fp exception: RN y0(-inf)=nan, want INVALID got 0
X src/math/special/y0.h:8: RN y0(0x1.c982eb8d417eap-1) want -0x1.af74bfa0f1304p-56 got -0x1p-55 ulperr -1416944204906496.000 = -0x1.422d02p+50 + 0x1.11721cp-2
X src/math/special/y0.h:9: RN y0(0x1.c982eb8d417ebp-1) want 0x1.5666419c0f3c9p-54 got 0x1.2p-54 ulperr -957005015547904.000 = -0x1.b3320cp+49 + 0x1.dc02a8p-2
X src/math/special/y0.h:10: RN y0(0x1.fa9534d98569bp+1) want 0x1.384a000f3fcecp-53 got 0x1.3004a968fceadp-53 ulperr -145502385471488.000 = -0x1.08aad4p+47 + 0x1.58e17p-6
X src/math/special/y0.h:11: RN y0(0x1.fa9534d98569cp+1) want -0x1.8fa8956b4b481p-55 got -0x1.8f4eb84cc2a33p-55 ulperr 6175389646848.000 = 0x1.67747ap+42 + 0x1.54cfbep-2
X src/math/special/y0.h:12: RN y0(0x1.c581dc4e72102p+2) want -0x1.14bb186dc408dp-52 got -0x1.16eb61aad4cacp-52 ulperr -38502565675008.000 = -0x1.18249ep+45 + -0x1.163cfp-2
X src/math/special/y0.h:13: RN y0(0x1.c581dc4e72103p+2) want 0x1.e91b198d39ce2p-56 got 0x1.dac1abb064c09p-56 ulperr -252436132397056.000 = -0x1.cb2dbcp+47 + -0x1.ee1b6ep-2
FAIL src/math/y0.exe [status 1]
src/math/sanity/y0f.h:1: bad fp exception: RN y0f(-0x1.0223ap+3)=-nan, want INVALID got 0
X src/math/sanity/y0f.h:2: RN y0f(0x1.161868p+2) want -0x1.293dbep-3 got -0x1.293dc2p-3 ulperr -1.910 = -0x1p+1 + 0x1.6ffc42p-4
src/math/sanity/y0f.h:3: bad fp exception: RN y0f(-0x1.0c34b4p+3)=-nan, want INVALID got 0
src/math/sanity/y0f.h:4: bad fp exception: RN y0f(-0x1.a206fp+2)=-nan, want INVALID got 0
src/math/sanity/y0f.h:7: bad fp exception: RN y0f(-0x1.a05cc8p-2)=-nan, want INVALID got 0
src/math/sanity/y0f.h:10: bad fp exception: RN y0f(-0x1.5b86eap-1)=-nan, want INVALID got 0
src/math/special/y0f.h:1: bad fp exception: RN y0f(0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/y0f.h:2: bad fp exception: RN y0f(-0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/y0f.h:3: bad fp exception: RN y0f(-0x1p+0)=-nan, want INVALID got 0
src/math/special/y0f.h:5: bad fp exception: RN y0f(-inf)=-nan, want INVALID got 0
X src/math/special/y0f.h:7: RN y0f(0x1.0c4a3ap+0) want 0x1.ff138ep-4 got 0x1.ff1386p-4 ulperr -4.180 = -0x1.fffffep+1 + -0x1.71585ap-3
X src/math/special/y0f.h:8: RN y0f(0x1.8ae5d4p-1) want -0x1.d88a5ap-4 got -0x1.d88a5p-4 ulperr 4.919 = 0x1.4p+2 + -0x1.4d601ap-4
X src/math/special/y0f.h:9: RN y0f(0x1.fa9536p+1) want -0x1.da2946p-25 got -0x1.c5c23p-25 ulperr 668554.625 = 0x1.46716p+19 + -0x1.88a2bcp-2
FAIL src/math/y0f.exe [status 1]
src/math/sanity/y1.h:1: bad fp exception: RN y1(-0x1.02239f3c6a8f1p+3)=nan, want INVALID got 0
src/math/sanity/y1.h:3: bad fp exception: RN y1(-0x1.0c34b3e01e6e7p+3)=nan, want INVALID got 0
src/math/sanity/y1.h:4: bad fp exception: RN y1(-0x1.a206f0a19dcc4p+2)=nan, want INVALID got 0
src/math/sanity/y1.h:7: bad fp exception: RN y1(-0x1.a05cc754481d1p-2)=nan, want INVALID got 0
src/math/sanity/y1.h:10: bad fp exception: RN y1(-0x1.5b86ea8118a0ep-1)=nan, want INVALID got 0
src/math/special/y1.h:1: bad fp exception: RN y1(0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/y1.h:2: bad fp exception: RN y1(-0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/y1.h:3: bad fp exception: RN y1(-0x1p+0)=nan, want INVALID got 0
src/math/special/y1.h:5: bad fp exception: RN y1(-inf)=nan, want INVALID got 0
FAIL src/math/y1.exe [status 1]
src/math/sanity/y1f.h:1: bad fp exception: RN y1f(-0x1.0223ap+3)=-nan, want INVALID got 0
src/math/sanity/y1f.h:3: bad fp exception: RN y1f(-0x1.0c34b4p+3)=-nan, want INVALID got 0
src/math/sanity/y1f.h:4: bad fp exception: RN y1f(-0x1.a206fp+2)=-nan, want INVALID got 0
src/math/sanity/y1f.h:7: bad fp exception: RN y1f(-0x1.a05cc8p-2)=-nan, want INVALID got 0
src/math/sanity/y1f.h:10: bad fp exception: RN y1f(-0x1.5b86eap-1)=-nan, want INVALID got 0
src/math/special/y1f.h:1: bad fp exception: RN y1f(0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/y1f.h:2: bad fp exception: RN y1f(-0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/y1f.h:3: bad fp exception: RN y1f(-0x1p+0)=-nan, want INVALID got 0
src/math/special/y1f.h:5: bad fp exception: RN y1f(-inf)=-nan, want INVALID got 0
FAIL src/math/y1f.exe [status 1]
src/math/sanity/yn.h:1: bad fp exception: RN yn(-2, -0x1.02239f3c6a8f1p+3)=nan, want INVALID got 0
src/math/sanity/yn.h:3: bad fp exception: RN yn(0, -0x1.0c34b3e01e6e7p+3)=nan, want INVALID got 0
src/math/sanity/yn.h:4: bad fp exception: RN yn(1, -0x1.a206f0a19dcc4p+2)=nan, want INVALID got 0
src/math/sanity/yn.h:7: bad fp exception: RN yn(4, -0x1.a05cc754481d1p-2)=nan, want INVALID got 0
src/math/sanity/yn.h:10: bad fp exception: RN yn(7, -0x1.5b86ea8118a0ep-1)=nan, want INVALID got 0
src/math/special/yn.h:1: bad fp exception: RN yn(0, 0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/yn.h:2: bad fp exception: RN yn(0, -0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/yn.h:3: bad fp exception: RN yn(0, -0x1p+0)=nan, want INVALID got 0
src/math/special/yn.h:5: bad fp exception: RN yn(0, -inf)=nan, want INVALID got 0
src/math/special/yn.h:7: bad fp exception: RN yn(1, 0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/yn.h:8: bad fp exception: RN yn(1, -0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/yn.h:9: bad fp exception: RN yn(1, -0x1p+0)=nan, want INVALID got 0
src/math/special/yn.h:11: bad fp exception: RN yn(1, -inf)=nan, want INVALID got 0
src/math/special/yn.h:13: bad fp exception: RN yn(-1, 0x0p+0)=inf, want DIVBYZERO got 0
src/math/special/yn.h:14: bad fp exception: RN yn(-1, -0x0p+0)=inf, want DIVBYZERO got 0
src/math/special/yn.h:15: bad fp exception: RN yn(-1, -0x1p+0)=nan, want INVALID got 0
src/math/special/yn.h:17: bad fp exception: RN yn(-1, -inf)=nan, want INVALID got 0
src/math/special/yn.h:19: bad fp exception: RN yn(2, 0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/yn.h:20: bad fp exception: RN yn(2, -0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/yn.h:21: bad fp exception: RN yn(2, -0x1p+0)=nan, want INVALID got 0
src/math/special/yn.h:23: bad fp exception: RN yn(2, -inf)=nan, want INVALID got 0
FAIL src/math/yn.exe [status 1]
src/math/sanity/ynf.h:1: bad fp exception: RN ynf(-2, -0x1.0223ap+3)=-nan, want INVALID got 0
src/math/sanity/ynf.h:3: bad fp exception: RN ynf(0, -0x1.0c34b4p+3)=-nan, want INVALID got 0
src/math/sanity/ynf.h:4: bad fp exception: RN ynf(1, -0x1.a206fp+2)=-nan, want INVALID got 0
X src/math/sanity/ynf.h:6: RN ynf(3, 0x1.52efdp-1) want -0x1.2935d2p+4 got -0x1.2935d6p+4, ulperr -1.920 = -0x1p+1 + 0x1.47d13p-4
src/math/sanity/ynf.h:7: bad fp exception: RN ynf(4, -0x1.a05cc8p-2)=-nan, want INVALID got 0
X src/math/sanity/ynf.h:9: RN ynf(6, 0x1.8c5dbp-1) want -0x1.6dbc1cp+13 got -0x1.6dbc18p+13, ulperr 2.115 = 0x1p+1 + 0x1.d597eep-4
src/math/sanity/ynf.h:10: bad fp exception: RN ynf(7, -0x1.5b86eap-1)=-nan, want INVALID got 0
src/math/special/ynf.h:1: bad fp exception: RN ynf(0, 0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/ynf.h:2: bad fp exception: RN ynf(0, -0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/ynf.h:3: bad fp exception: RN ynf(0, -0x1p+0)=-nan, want INVALID got 0
src/math/special/ynf.h:5: bad fp exception: RN ynf(0, -inf)=-nan, want INVALID got 0
src/math/special/ynf.h:7: bad fp exception: RN ynf(1, 0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/ynf.h:8: bad fp exception: RN ynf(1, -0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/ynf.h:9: bad fp exception: RN ynf(1, -0x1p+0)=-nan, want INVALID got 0
src/math/special/ynf.h:11: bad fp exception: RN ynf(1, -inf)=-nan, want INVALID got 0
src/math/special/ynf.h:13: bad fp exception: RN ynf(-1, 0x0p+0)=inf, want DIVBYZERO got 0
src/math/special/ynf.h:14: bad fp exception: RN ynf(-1, -0x0p+0)=inf, want DIVBYZERO got 0
src/math/special/ynf.h:15: bad fp exception: RN ynf(-1, -0x1p+0)=-nan, want INVALID got 0
src/math/special/ynf.h:17: bad fp exception: RN ynf(-1, -inf)=-nan, want INVALID got 0
src/math/special/ynf.h:19: bad fp exception: RN ynf(2, 0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/ynf.h:20: bad fp exception: RN ynf(2, -0x0p+0)=-inf, want DIVBYZERO got 0
src/math/special/ynf.h:21: bad fp exception: RN ynf(2, -0x1p+0)=-nan, want INVALID got 0
src/math/special/ynf.h:23: bad fp exception: RN ynf(2, -inf)=-nan, want INVALID got 0
FAIL src/math/ynf.exe [status 1]
src/regression/daemon-failure.c:56:24: warning: adding 'int' to a string does not append to the string [-Wstring-plus-int]
                if (write(fd[1], "1" + !t_status, 1) != 1)
                                 ~~~~^~~~~~~~~~~
src/regression/daemon-failure.c:56:24: note: use array indexing to silence this warning
                if (write(fd[1], "1" + !t_status, 1) != 1)
                                     ^
                                 &   [          ]
1 warning generated.
src/regression/malloc-brk-fail.c:31: malloc(10000) succeeded after memory is filled
FAIL src/regression/malloc-brk-fail.exe [status 1]
src/regression/pthread-robust-detach.c:33: pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==0) got 38 "Function not implemented" want 0 "No error information"
src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx, &ts) failed: (pshared==0) got 110 "Operation timed out" want 130 "Previous owner died"
src/regression/pthread-robust-detach.c:33: pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==1) got 38 "Function not implemented" want 0 "No error information"
src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx, &ts) failed: (pshared==1) got 110 "Operation timed out" want 130 "Previous owner died"
FAIL src/regression/pthread-robust-detach-static.exe [status 1]
src/regression/pthread-robust-detach.c:33: pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==0) got 38 "Function not implemented" want 0 "No error information"
src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx, &ts) failed: (pshared==0) got 110 "Operation timed out" want 130 "Previous owner died"
src/regression/pthread-robust-detach.c:33: pthread_mutexattr_setrobust(&mtx_a, 1) failed: (pshared==1) got 38 "Function not implemented" want 0 "No error information"
src/regression/pthread-robust-detach.c:50: pthread_mutex_timedlock(&mtx, &ts) failed: (pshared==1) got 110 "Operation timed out" want 130 "Previous owner died"
FAIL src/regression/pthread-robust-detach.exe [status 1]

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-05-05 23:37                 ` sidneym
@ 2020-05-06  0:59                   ` Rich Felker
  2020-06-18 16:37                     ` sidneym
  0 siblings, 1 reply; 42+ messages in thread
From: Rich Felker @ 2020-05-06  0:59 UTC (permalink / raw)
  To: sidneym; +Cc: musl

On Tue, May 05, 2020 at 06:37:41PM -0500, sidneym@codeaurora.org wrote:
> >- The definitions in bits/msg.h, bits/sem.h, and bits/shm.h are not
> >  time64-compatible. In fact bits/sem.h is a regression; you had it
> >  right before and broke it.
> As you point out below the core of the problem was the missing time64
> calls.  I've updated the structures to use what I hope or the
> correct types.

I think they're still wrong and you need to do like the existing
32-bit archs, defining IPC_STAT to 0x102 and putting separate unsigned
long *_lo/*_hi members in the right places for the kernel ABI and
adding the time_t members at the ends. This is almost surely the case
if _Alignof(long long) is 8 on hexagon, since the kernel's
include/uapi/asm-generic/msgbuf.h etc. have the lo/hi pairs misaligned
(struct ipc_perm is an odd number of 32-bit words). The fact that you
had to change qemu to make this work suggests that you still have it
wrong too -- you should not have to change qemu or the kernel to make
it work if you do it right.

> >- The definition in bits/stat.h is using the wrong types (you need to
> >  use libc type names for all the members; this is a policy
> >  requirement to ensure that none inadvertently mismatch). Note that
> >  there's not even really a need to use an arch-specific header here
> >  anymore; the kernel definition comes from arch/hexagon/kstat.h and
> >  the bits/stat.h can just be copied from aarch64 or something else
> >  with a clean layout.
> 
> I used OpenRISC's stat.h.

Is there a reason? It has old __st_*tim32 members but you don't need
them since there's no old-musl-ABI involved.

> src/api/ftw.c:44:1: error: switch condition has boolean value [-Werror,-Wswitch-bool]
> C(S_ISBLK(0))
> ^~~~~~~~~~~~~

You're still building libc-test with -Werror which will give bogus
results.

> src/api/sys_ipc.c:13:1: error: initializing 'uid_t *' (aka 'unsigned int *') with an expression of type 'int *' converts between pointers to integer types with different sign [-Werror,-Wpointer-sign]
> F(uid_t,uid)
> ^~~~~~~~~~~~
> src/api/sys_ipc.c:3:20: note: expanded from macro 'F'
> #define F(t,n) {t *y = &x.n;}
>                    ^   ~~~~

This is happening because struct ipc_perm's members have the wrong
types (but I think you should just delete your bits/ipc.h because the
generic one is correct and matches the kernel's ABI for hexagon).

> src/functional/ipc_msg.c:63: qid_ds.msg_qnum == 0 failed: got 16384, want 0
> src/functional/ipc_msg.c:67: (long long)qid_ds.msg_rtime == 0 failed: got 6823500725968961536, want 0
> src/functional/ipc_msg.c:69: qid_ds.msg_ctime >= t failed: got 69713, want >= 1588720066
> src/functional/ipc_msg.c:73: qid_ds.msg_qbytes > 0 failed: got 0, want > 0
> src/functional/ipc_msg.c:78: qid_ds.msg_qnum == 1 failed: got 16384, want 1
> src/functional/ipc_msg.c:79: qid_ds.msg_lspid == getpid() failed: got 0, want 240818
> src/functional/ipc_msg.c:81: msg_stime is 0 want >= 1588720066
> src/functional/ipc_msg.c:130: child exit status: 256
> FAIL src/functional/ipc_msg-static.exe [status 1]
> src/functional/ipc_msg.c:63: qid_ds.msg_qnum == 0 failed: got 16384, want 0
> src/functional/ipc_msg.c:67: (long long)qid_ds.msg_rtime == 0 failed: got 6823500725968961536, want 0
> src/functional/ipc_msg.c:69: qid_ds.msg_ctime >= t failed: got 0, want >= 1588720066
> src/functional/ipc_msg.c:73: qid_ds.msg_qbytes > 0 failed: got 0, want > 0
> src/functional/ipc_msg.c:78: qid_ds.msg_qnum == 1 failed: got 16384, want 1
> src/functional/ipc_msg.c:79: qid_ds.msg_lspid == getpid() failed: got 0, want 240786
> src/functional/ipc_msg.c:81: msg_stime is 0 want >= 1588720066
> src/functional/ipc_msg.c:130: child exit status: 256
> FAIL src/functional/ipc_msg.exe [status 1]

These indicate your struct ipc_perm/msqid_ds mismatch kernel, as
described above.

Otherwise I didn't see anything obviously wrong in tests. Having less
noise from -Werror and the above issues would make it easier to review
the report though and ensure I'm not missing anything.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-05-06  0:59                   ` Rich Felker
@ 2020-06-18 16:37                     ` sidneym
  2020-06-18 21:42                       ` Szabolcs Nagy
  0 siblings, 1 reply; 42+ messages in thread
From: sidneym @ 2020-06-18 16:37 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 5438 bytes --]


> -----Original Message-----
> From: Rich Felker <dalias@libc.org>
> Sent: Tuesday, May 5, 2020 7:59 PM
> To: sidneym@codeaurora.org
> Cc: musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> On Tue, May 05, 2020 at 06:37:41PM -0500, sidneym@codeaurora.org wrote:
> > >- The definitions in bits/msg.h, bits/sem.h, and bits/shm.h are not
> > >  time64-compatible. In fact bits/sem.h is a regression; you had it
> > >  right before and broke it.
> > As you point out below the core of the problem was the missing time64
> > calls.  I've updated the structures to use what I hope or the correct
> > types.
> 
> I think they're still wrong and you need to do like the existing 32-bit
archs,
> defining IPC_STAT to 0x102 and putting separate unsigned long *_lo/*_hi
> members in the right places for the kernel ABI and adding the time_t
members
> at the ends. This is almost surely the case if _Alignof(long long) is 8 on
hexagon,
> since the kernel's include/uapi/asm-generic/msgbuf.h etc. have the lo/hi
pairs
> misaligned (struct ipc_perm is an odd number of 32-bit words). The fact
that
> you had to change qemu to make this work suggests that you still have it
> wrong too -- you should not have to change qemu or the kernel to make it
> work if you do it right.

The IPC_STAT setting was a key element missing from the port.

> 
> > >- The definition in bits/stat.h is using the wrong types (you need to
> > >  use libc type names for all the members; this is a policy
> > >  requirement to ensure that none inadvertently mismatch). Note that
> > >  there's not even really a need to use an arch-specific header here
> > >  anymore; the kernel definition comes from arch/hexagon/kstat.h and
> > >  the bits/stat.h can just be copied from aarch64 or something else
> > >  with a clean layout.
> >
> > I used OpenRISC's stat.h.
> 
> Is there a reason? It has old __st_*tim32 members but you don't need them
> since there's no old-musl-ABI involved.

I think you had originally suggested using aarch64 and that is what is there
now.

> 
> > src/api/ftw.c:44:1: error: switch condition has boolean value
> > [-Werror,-Wswitch-bool]
> > C(S_ISBLK(0))
> > ^~~~~~~~~~~~~
> 
> You're still building libc-test with -Werror which will give bogus
results.
> 
> > src/api/sys_ipc.c:13:1: error: initializing 'uid_t *' (aka 'unsigned
> > int *') with an expression of type 'int *' converts between pointers
> > to integer types with different sign [-Werror,-Wpointer-sign]
> > F(uid_t,uid)
> > ^~~~~~~~~~~~
> > src/api/sys_ipc.c:3:20: note: expanded from macro 'F'
> > #define F(t,n) {t *y = &x.n;}
> >                    ^   ~~~~
> 
> This is happening because struct ipc_perm's members have the wrong types
> (but I think you should just delete your bits/ipc.h because the generic
one is
> correct and matches the kernel's ABI for hexagon).

QEMU for Hexagon's target_ipc_perm was based on the deprecated one cited in
uapi/linux/ipc.h instead of the generic version in
./uapi/asm-generic/ipcbuf.h  I removed the file, ipc.h from musl and
corrected QEMU.


> 
> > src/functional/ipc_msg.c:63: qid_ds.msg_qnum == 0 failed: got 16384,
> > want 0
> > src/functional/ipc_msg.c:67: (long long)qid_ds.msg_rtime == 0 failed:
> > got 6823500725968961536, want 0
> > src/functional/ipc_msg.c:69: qid_ds.msg_ctime >= t failed: got 69713,
> > want >= 1588720066
> > src/functional/ipc_msg.c:73: qid_ds.msg_qbytes > 0 failed: got 0, want
> > > 0
> > src/functional/ipc_msg.c:78: qid_ds.msg_qnum == 1 failed: got 16384,
> > want 1
> > src/functional/ipc_msg.c:79: qid_ds.msg_lspid == getpid() failed: got
> > 0, want 240818
> > src/functional/ipc_msg.c:81: msg_stime is 0 want >= 1588720066
> > src/functional/ipc_msg.c:130: child exit status: 256 FAIL
> > src/functional/ipc_msg-static.exe [status 1]
> > src/functional/ipc_msg.c:63: qid_ds.msg_qnum == 0 failed: got 16384,
> > want 0
> > src/functional/ipc_msg.c:67: (long long)qid_ds.msg_rtime == 0 failed:
> > got 6823500725968961536, want 0
> > src/functional/ipc_msg.c:69: qid_ds.msg_ctime >= t failed: got 0, want
> > >= 1588720066
> > src/functional/ipc_msg.c:73: qid_ds.msg_qbytes > 0 failed: got 0, want
> > > 0
> > src/functional/ipc_msg.c:78: qid_ds.msg_qnum == 1 failed: got 16384,
> > want 1
> > src/functional/ipc_msg.c:79: qid_ds.msg_lspid == getpid() failed: got
> > 0, want 240786
> > src/functional/ipc_msg.c:81: msg_stime is 0 want >= 1588720066
> > src/functional/ipc_msg.c:130: child exit status: 256 FAIL
> > src/functional/ipc_msg.exe [status 1]
> 
> These indicate your struct ipc_perm/msqid_ds mismatch kernel, as described
> above.
> 
> Otherwise I didn't see anything obviously wrong in tests. Having less
noise
> from -Werror and the above issues would make it easier to review the
report
> though and ensure I'm not missing anything.

I attached the updated REPORT with warning output disabled, -w and
-fno-rounding-math (See https://bugs.llvm.org/show_bug.cgi?id=45329)  along
with the patch.  I've rebased a couple of times without any conflicts and
the git repo is here: https://github.com/quic/musl/tree/hexagon

My most recent rebase was yesterday and that is what I used for the patch
and the libc-test.

I'd like to get Hexagon added as a supported architecture and I am certain
there are preferred windows when new architectures are accepted.
Understanding when those are and what requirements for inclusion are would
be good to know.

Thanks


> 
> Rich

[-- Attachment #2: REPORT --]
[-- Type: application/octet-stream, Size: 249913 bytes --]

[-- Attachment #3: musl-add-hexagon.diff --]
[-- Type: application/octet-stream, Size: 42184 bytes --]

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-06-18 16:37                     ` sidneym
@ 2020-06-18 21:42                       ` Szabolcs Nagy
  2020-06-19 21:58                         ` sidneym
  0 siblings, 1 reply; 42+ messages in thread
From: Szabolcs Nagy @ 2020-06-18 21:42 UTC (permalink / raw)
  To: sidneym; +Cc: musl

* sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-06-18 11:37:05 -0500]:
> I attached the updated REPORT with warning output disabled, -w and
> -fno-rounding-math (See https://bugs.llvm.org/show_bug.cgi?id=45329)  along
> with the patch.  I've rebased a couple of times without any conflicts and
> the git repo is here: https://github.com/quic/musl/tree/hexagon

the fmal failures are a bit concerning:

fmal should be a tail call to fma if long double has the same
representation as double. (can you please verify this? there
should be a single branch instruction in fmal)

there are no fma failures with the same tests so fmal should
work fine too.

may be the libc-test code got miscompiled or somehow wrong?
or long double arithmetics is broken?

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-06-18 21:42                       ` Szabolcs Nagy
@ 2020-06-19 21:58                         ` sidneym
  2020-06-19 22:46                           ` Rich Felker
  0 siblings, 1 reply; 42+ messages in thread
From: sidneym @ 2020-06-19 21:58 UTC (permalink / raw)
  To: 'Szabolcs Nagy'; +Cc: musl


> -----Original Message-----
> From: Szabolcs Nagy <nsz@port70.net>
> Sent: Thursday, June 18, 2020 4:43 PM
> To: sidneym@codeaurora.org
> Cc: musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-06-18 11:37:05
> -0500]:
> > I attached the updated REPORT with warning output disabled, -w and
> > -fno-rounding-math (See https://bugs.llvm.org/show_bug.cgi?id=45329)
> > along with the patch.  I've rebased a couple of times without any
> > conflicts and the git repo is here:
> > https://github.com/quic/musl/tree/hexagon
> 
> the fmal failures are a bit concerning:
> 
> fmal should be a tail call to fma if long double has the same
representation as
> double. (can you please verify this? there should be a single branch
instruction
> in fmal)
> 
> there are no fma failures with the same tests so fmal should work fine
too.

In the case of fma the selected function comes from compiler-rt-builtins.
It looks like since fmal calls fma within the context of the c-library the
c-library's version is branched to.

compiler-rt-builtins for hexagon should include a fmal function that jumps
to the optimized fma, it does not but I can fix that.

I generally only use the tip-of-tree clang and that isn't generating correct
code when building fma.c.  When I use our internally release llvm tools fma
and fmal tests both pass.

Thanks

> 
> may be the libc-test code got miscompiled or somehow wrong?
> or long double arithmetics is broken?


^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-06-19 21:58                         ` sidneym
@ 2020-06-19 22:46                           ` Rich Felker
  2020-06-20  0:03                             ` [musl] strtok Robert Skopalík
  2020-06-20  2:29                             ` [musl] Hexagon DSP support sidneym
  0 siblings, 2 replies; 42+ messages in thread
From: Rich Felker @ 2020-06-19 22:46 UTC (permalink / raw)
  To: sidneym; +Cc: 'Szabolcs Nagy', musl

On Fri, Jun 19, 2020 at 04:58:53PM -0500, sidneym@codeaurora.org wrote:
> 
> > -----Original Message-----
> > From: Szabolcs Nagy <nsz@port70.net>
> > Sent: Thursday, June 18, 2020 4:43 PM
> > To: sidneym@codeaurora.org
> > Cc: musl@lists.openwall.com
> > Subject: Re: [musl] Hexagon DSP support
> > 
> > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-06-18 11:37:05
> > -0500]:
> > > I attached the updated REPORT with warning output disabled, -w and
> > > -fno-rounding-math (See https://bugs.llvm.org/show_bug.cgi?id=45329)
> > > along with the patch.  I've rebased a couple of times without any
> > > conflicts and the git repo is here:
> > > https://github.com/quic/musl/tree/hexagon
> > 
> > the fmal failures are a bit concerning:
> > 
> > fmal should be a tail call to fma if long double has the same
> representation as
> > double. (can you please verify this? there should be a single branch
> instruction
> > in fmal)
> > 
> > there are no fma failures with the same tests so fmal should work fine
> too.
> 
> In the case of fma the selected function comes from compiler-rt-builtins.
> It looks like since fmal calls fma within the context of the c-library the
> c-library's version is branched to.

Are you talking about how libc-test was built or how musl was built?
This kind of replacement is not valid in either place. musl is built
with -ffreestanding, and libc-test is expected to be built with
-fno-builtin.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* [musl] strtok
  2020-06-19 22:46                           ` Rich Felker
@ 2020-06-20  0:03                             ` Robert Skopalík
  2020-06-20  0:15                               ` Rich Felker
  2020-06-20  2:29                             ` [musl] Hexagon DSP support sidneym
  1 sibling, 1 reply; 42+ messages in thread
From: Robert Skopalík @ 2020-06-20  0:03 UTC (permalink / raw)
  To: musl; +Cc: Miroslav Němeček

Hello,

we are working on an OS for a STM32 MCU. We like how the reentrancy is solved in musl, but ... when two (or more) userspace programs using a strtok function are run, there might be a collision (because strtok uses a static var to save the pointer). We did not find any redirection mechanism from strtok to strtok_r. How is it meant pls? We do not want to force the users to write strtok_r into a non-threaded user program.

Is there some solution to make it work right?

Thank you

RS

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] strtok
  2020-06-20  0:03                             ` [musl] strtok Robert Skopalík
@ 2020-06-20  0:15                               ` Rich Felker
  2020-06-20  0:36                                 ` Robert Skopalík
                                                   ` (2 more replies)
  0 siblings, 3 replies; 42+ messages in thread
From: Rich Felker @ 2020-06-20  0:15 UTC (permalink / raw)
  To: Robert Skopalík; +Cc: musl, Miroslav Němeček

On Sat, Jun 20, 2020 at 12:03:12AM +0000, Robert Skopalík wrote:
> Hello,
> 
> we are working on an OS for a STM32 MCU. We like how the reentrancy
> is solved in musl, but ... when two (or more) userspace programs
> using a strtok function are run, there might be a collision (because
> strtok uses a static var to save the pointer). We did not find any
> redirection mechanism from strtok to strtok_r. How is it meant pls?
> We do not want to force the users to write strtok_r into a
> non-threaded user program.
> 
> Is there some solution to make it work right?
> 
> Thank you

If multiple programs are running, each needs its own execution context
including its own versions of all libc (and any other) global data.
Probably you should look into the ARM FDPIC ABI, which is the right
way to do this while still sharing program text for MMU-less
microcontrollers like the one you're working with. The tooling should
be mature now so that support could be added to musl, but making it
happen needs people who are interested in providing feedback and
testing.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] strtok
  2020-06-20  0:15                               ` Rich Felker
@ 2020-06-20  0:36                                 ` Robert Skopalík
  2020-06-20  0:46                                 ` Robert Skopalík
  2020-06-20  7:07                                 ` Patrick Oppenlander
  2 siblings, 0 replies; 42+ messages in thread
From: Robert Skopalík @ 2020-06-20  0:36 UTC (permalink / raw)
  To: Rich Felker; +Cc: musl, Miroslav Němeček

I see! Thank you.

We know fdpic. I guess we need to compile gcc toolchain with fdpic for this MCU. We tried that, no success :) I am afraid we are not experienced enough to make it right. We don't even know how the resulting gcc should be named - arm-our_os-eabi? :)

Could you pls point us to some literature - what to read to do it? And to connect it to musl the right way?

Thank you.

R

-----Original Message-----
From: Rich Felker [mailto:dalias@libc.org] 
Sent: Saturday, June 20, 2020 2:16 AM
To: Robert Skopalík
Cc: musl@lists.openwall.com; Miroslav Němeček
Subject: Re: [musl] strtok

On Sat, Jun 20, 2020 at 12:03:12AM +0000, Robert Skopalík wrote:
> Hello,
> 
> we are working on an OS for a STM32 MCU. We like how the reentrancy
> is solved in musl, but ... when two (or more) userspace programs
> using a strtok function are run, there might be a collision (because
> strtok uses a static var to save the pointer). We did not find any
> redirection mechanism from strtok to strtok_r. How is it meant pls?
> We do not want to force the users to write strtok_r into a
> non-threaded user program.
> 
> Is there some solution to make it work right?
> 
> Thank you

If multiple programs are running, each needs its own execution context
including its own versions of all libc (and any other) global data.
Probably you should look into the ARM FDPIC ABI, which is the right
way to do this while still sharing program text for MMU-less
microcontrollers like the one you're working with. The tooling should
be mature now so that support could be added to musl, but making it
happen needs people who are interested in providing feedback and
testing.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] strtok
  2020-06-20  0:15                               ` Rich Felker
  2020-06-20  0:36                                 ` Robert Skopalík
@ 2020-06-20  0:46                                 ` Robert Skopalík
  2020-06-20  1:44                                   ` Rich Felker
  2020-06-20  7:07                                 ` Patrick Oppenlander
  2 siblings, 1 reply; 42+ messages in thread
From: Robert Skopalík @ 2020-06-20  0:46 UTC (permalink / raw)
  To: Rich Felker; +Cc: musl, Miroslav Němeček

I wouldn't like to bother you more than neccessary, but if you don't mind (as I hope :), I have one more question:

Do we really need got table for a noMMU MCU? Fdpic uses it and I was looking for the answer what is it for pretty long - no success. Wouldn't it be enough just to keep the data segment offset in r9 and make all the data relative to it (in compiler)? That would get rid of the whole got table complexities. Bad idea? :)

Thanks

R

-----Original Message-----
From: Rich Felker [mailto:dalias@libc.org] 
Sent: Saturday, June 20, 2020 2:16 AM
To: Robert Skopalík
Cc: musl@lists.openwall.com; Miroslav Němeček
Subject: Re: [musl] strtok

On Sat, Jun 20, 2020 at 12:03:12AM +0000, Robert Skopalík wrote:
> Hello,
> 
> we are working on an OS for a STM32 MCU. We like how the reentrancy
> is solved in musl, but ... when two (or more) userspace programs
> using a strtok function are run, there might be a collision (because
> strtok uses a static var to save the pointer). We did not find any
> redirection mechanism from strtok to strtok_r. How is it meant pls?
> We do not want to force the users to write strtok_r into a
> non-threaded user program.
> 
> Is there some solution to make it work right?
> 
> Thank you

If multiple programs are running, each needs its own execution context
including its own versions of all libc (and any other) global data.
Probably you should look into the ARM FDPIC ABI, which is the right
way to do this while still sharing program text for MMU-less
microcontrollers like the one you're working with. The tooling should
be mature now so that support could be added to musl, but making it
happen needs people who are interested in providing feedback and
testing.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] strtok
  2020-06-20  0:46                                 ` Robert Skopalík
@ 2020-06-20  1:44                                   ` Rich Felker
  0 siblings, 0 replies; 42+ messages in thread
From: Rich Felker @ 2020-06-20  1:44 UTC (permalink / raw)
  To: Robert Skopalík; +Cc: musl, Miroslav Němeček

On Sat, Jun 20, 2020 at 12:46:43AM +0000, Robert Skopalík wrote:
> I wouldn't like to bother you more than neccessary, but if you don't
> mind (as I hope :), I have one more question:
> 
> Do we really need got table for a noMMU MCU? Fdpic uses it and I was
> looking for the answer what is it for pretty long - no success.
> Wouldn't it be enough just to keep the data segment offset in r9 and
> make all the data relative to it (in compiler)? That would get rid
> of the whole got table complexities. Bad idea? :)

That doesn't admit shared libraries, just multiple instances of the
same static-linked binary. It's not a supported ABI so you'd need to
hack up a toolchain and modified musl to do it.

On the other hand if you don't care about sharing text at all (might
be the case if yout text is expected to be very small anyway) you can
just use normal PIE binaries.

Rich


> -----Original Message-----
> From: Rich Felker [mailto:dalias@libc.org] 
> Sent: Saturday, June 20, 2020 2:16 AM
> To: Robert Skopalík
> Cc: musl@lists.openwall.com; Miroslav Němeček
> Subject: Re: [musl] strtok
> 
> On Sat, Jun 20, 2020 at 12:03:12AM +0000, Robert Skopalík wrote:
> > Hello,
> > 
> > we are working on an OS for a STM32 MCU. We like how the reentrancy
> > is solved in musl, but ... when two (or more) userspace programs
> > using a strtok function are run, there might be a collision (because
> > strtok uses a static var to save the pointer). We did not find any
> > redirection mechanism from strtok to strtok_r. How is it meant pls?
> > We do not want to force the users to write strtok_r into a
> > non-threaded user program.
> > 
> > Is there some solution to make it work right?
> > 
> > Thank you
> 
> If multiple programs are running, each needs its own execution context
> including its own versions of all libc (and any other) global data.
> Probably you should look into the ARM FDPIC ABI, which is the right
> way to do this while still sharing program text for MMU-less
> microcontrollers like the one you're working with. The tooling should
> be mature now so that support could be added to musl, but making it
> happen needs people who are interested in providing feedback and
> testing.
> 
> Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-06-19 22:46                           ` Rich Felker
  2020-06-20  0:03                             ` [musl] strtok Robert Skopalík
@ 2020-06-20  2:29                             ` sidneym
  2020-06-20  3:20                               ` Rich Felker
  1 sibling, 1 reply; 42+ messages in thread
From: sidneym @ 2020-06-20  2:29 UTC (permalink / raw)
  To: musl; +Cc: 'Szabolcs Nagy'



> -----Original Message-----
> From: Rich Felker <dalias@libc.org>
> Sent: Friday, June 19, 2020 5:46 PM
> To: sidneym@codeaurora.org
> Cc: 'Szabolcs Nagy' <nsz@port70.net>; musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> On Fri, Jun 19, 2020 at 04:58:53PM -0500, sidneym@codeaurora.org wrote:
> >
> > > -----Original Message-----
> > > From: Szabolcs Nagy <nsz@port70.net>
> > > Sent: Thursday, June 18, 2020 4:43 PM
> > > To: sidneym@codeaurora.org
> > > Cc: musl@lists.openwall.com
> > > Subject: Re: [musl] Hexagon DSP support
> > >
> > > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-06-18
> > > 11:37:05
> > > -0500]:
> > > > I attached the updated REPORT with warning output disabled, -w and
> > > > -fno-rounding-math (See
> > > > https://bugs.llvm.org/show_bug.cgi?id=45329)
> > > > along with the patch.  I've rebased a couple of times without any
> > > > conflicts and the git repo is here:
> > > > https://github.com/quic/musl/tree/hexagon
> > >
> > > the fmal failures are a bit concerning:
> > >
> > > fmal should be a tail call to fma if long double has the same
> > representation as
> > > double. (can you please verify this? there should be a single branch
> > instruction
> > > in fmal)
> > >
> > > there are no fma failures with the same tests so fmal should work
> > > fine
> > too.
> >
> > In the case of fma the selected function comes from
compiler-rt-builtins.
> > It looks like since fmal calls fma within the context of the c-library
> > the c-library's version is branched to.
> 
> Are you talking about how libc-test was built or how musl was built?
> This kind of replacement is not valid in either place. musl is built with
-
> ffreestanding, and libc-test is expected to be built with -fno-builtin.
> 
The link order is the reason.  The clang driver places
-lclang_rt.builtins-hexagon ahead of -lc and it happens that this library
includes an implementation of fma.  I think fma is something that was
introduced in error in compiler-rt.builtins because hexagon is the only arch
that has it.


> Rich


^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-06-20  2:29                             ` [musl] Hexagon DSP support sidneym
@ 2020-06-20  3:20                               ` Rich Felker
  2020-07-20 21:26                                 ` sidneym
  0 siblings, 1 reply; 42+ messages in thread
From: Rich Felker @ 2020-06-20  3:20 UTC (permalink / raw)
  To: sidneym; +Cc: musl, 'Szabolcs Nagy'

On Fri, Jun 19, 2020 at 09:29:04PM -0500, sidneym@codeaurora.org wrote:
> 
> 
> > -----Original Message-----
> > From: Rich Felker <dalias@libc.org>
> > Sent: Friday, June 19, 2020 5:46 PM
> > To: sidneym@codeaurora.org
> > Cc: 'Szabolcs Nagy' <nsz@port70.net>; musl@lists.openwall.com
> > Subject: Re: [musl] Hexagon DSP support
> > 
> > On Fri, Jun 19, 2020 at 04:58:53PM -0500, sidneym@codeaurora.org wrote:
> > >
> > > > -----Original Message-----
> > > > From: Szabolcs Nagy <nsz@port70.net>
> > > > Sent: Thursday, June 18, 2020 4:43 PM
> > > > To: sidneym@codeaurora.org
> > > > Cc: musl@lists.openwall.com
> > > > Subject: Re: [musl] Hexagon DSP support
> > > >
> > > > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-06-18
> > > > 11:37:05
> > > > -0500]:
> > > > > I attached the updated REPORT with warning output disabled, -w and
> > > > > -fno-rounding-math (See
> > > > > https://bugs.llvm.org/show_bug.cgi?id=45329)
> > > > > along with the patch.  I've rebased a couple of times without any
> > > > > conflicts and the git repo is here:
> > > > > https://github.com/quic/musl/tree/hexagon
> > > >
> > > > the fmal failures are a bit concerning:
> > > >
> > > > fmal should be a tail call to fma if long double has the same
> > > representation as
> > > > double. (can you please verify this? there should be a single branch
> > > instruction
> > > > in fmal)
> > > >
> > > > there are no fma failures with the same tests so fmal should work
> > > > fine
> > > too.
> > >
> > > In the case of fma the selected function comes from
> compiler-rt-builtins.
> > > It looks like since fmal calls fma within the context of the c-library
> > > the c-library's version is branched to.
> > 
> > Are you talking about how libc-test was built or how musl was built?
> > This kind of replacement is not valid in either place. musl is built with
> -
> > ffreestanding, and libc-test is expected to be built with -fno-builtin.
> > 
> The link order is the reason.  The clang driver places
> -lclang_rt.builtins-hexagon ahead of -lc and it happens that this library
> includes an implementation of fma.  I think fma is something that was
> introduced in error in compiler-rt.builtins because hexagon is the only arch
> that has it.

Yes, that's a bug. compiler-rt cannot define libc functions.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] strtok
  2020-06-20  0:15                               ` Rich Felker
  2020-06-20  0:36                                 ` Robert Skopalík
  2020-06-20  0:46                                 ` Robert Skopalík
@ 2020-06-20  7:07                                 ` Patrick Oppenlander
  2020-06-20 13:00                                   ` Robert Skopalík
  2 siblings, 1 reply; 42+ messages in thread
From: Patrick Oppenlander @ 2020-06-20  7:07 UTC (permalink / raw)
  To: musl

On Sat, Jun 20, 2020 at 10:15 AM Rich Felker <dalias@libc.org> wrote:
>
> If multiple programs are running, each needs its own execution context
> including its own versions of all libc (and any other) global data.
> Probably you should look into the ARM FDPIC ABI, which is the right
> way to do this while still sharing program text for MMU-less
> microcontrollers like the one you're working with. The tooling should
> be mature now so that support could be added to musl, but making it
> happen needs people who are interested in providing feedback and
> testing.
>

I'm very interested and will definitely be able to provide feedback & testing.

Apex (apexrtos.com) is waiting for musl FDPIC support so that I can
work on the kernel side. This is the RTOS with the Linux syscall
interface I think I might have mentioned some time ago.

Patrick

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] strtok
  2020-06-20  7:07                                 ` Patrick Oppenlander
@ 2020-06-20 13:00                                   ` Robert Skopalík
  2020-06-22  0:57                                     ` Bery Saidi
  0 siblings, 1 reply; 42+ messages in thread
From: Robert Skopalík @ 2020-06-20 13:00 UTC (permalink / raw)
  To: musl

Me tooo :)))

-----Original Message-----
From: Patrick Oppenlander [mailto:patrick.oppenlander@gmail.com] 
Sent: Saturday, June 20, 2020 9:07 AM
To: musl@lists.openwall.com
Subject: Re: [musl] strtok

On Sat, Jun 20, 2020 at 10:15 AM Rich Felker <dalias@libc.org> wrote:
>
> If multiple programs are running, each needs its own execution context
> including its own versions of all libc (and any other) global data.
> Probably you should look into the ARM FDPIC ABI, which is the right
> way to do this while still sharing program text for MMU-less
> microcontrollers like the one you're working with. The tooling should
> be mature now so that support could be added to musl, but making it
> happen needs people who are interested in providing feedback and
> testing.
>

I'm very interested and will definitely be able to provide feedback & testing.

Apex (apexrtos.com) is waiting for musl FDPIC support so that I can
work on the kernel side. This is the RTOS with the Linux syscall
interface I think I might have mentioned some time ago.

Patrick

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] strtok
  2020-06-20 13:00                                   ` Robert Skopalík
@ 2020-06-22  0:57                                     ` Bery Saidi
  0 siblings, 0 replies; 42+ messages in thread
From: Bery Saidi @ 2020-06-22  0:57 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 1257 bytes --]

I can also provide testing and feedback.
Regards,
On Sat, Jun 20, 2020 at 9:01 AM Robert Skopalík <rs@income.cz> wrote:

> Me tooo :)))
>
> -----Original Message-----
> From: Patrick Oppenlander [mailto:patrick.oppenlander@gmail.com]
> Sent: Saturday, June 20, 2020 9:07 AM
> To: musl@lists.openwall.com
> Subject: Re: [musl] strtok
>
> On Sat, Jun 20, 2020 at 10:15 AM Rich Felker <dalias@libc.org> wrote:
> >
> > If multiple programs are running, each needs its own execution context
> > including its own versions of all libc (and any other) global data.
> > Probably you should look into the ARM FDPIC ABI, which is the right
> > way to do this while still sharing program text for MMU-less
> > microcontrollers like the one you're working with. The tooling should
> > be mature now so that support could be added to musl, but making it
> > happen needs people who are interested in providing feedback and
> > testing.
> >
>
> I'm very interested and will definitely be able to provide feedback &
> testing.
>
> Apex (apexrtos.com) is waiting for musl FDPIC support so that I can
> work on the kernel side. This is the RTOS with the Linux syscall
> interface I think I might have mentioned some time ago.
>
> Patrick
>

[-- Attachment #2: Type: text/html, Size: 1886 bytes --]

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-06-20  3:20                               ` Rich Felker
@ 2020-07-20 21:26                                 ` sidneym
  2020-07-23 21:56                                   ` Szabolcs Nagy
  0 siblings, 1 reply; 42+ messages in thread
From: sidneym @ 2020-07-20 21:26 UTC (permalink / raw)
  To: 'Rich Felker'; +Cc: musl, 'Szabolcs Nagy'

[-- Attachment #1: Type: text/plain, Size: 3521 bytes --]



> -----Original Message-----
> From: Rich Felker <dalias@libc.org>
> Sent: Friday, June 19, 2020 10:21 PM
> To: sidneym@codeaurora.org
> Cc: musl@lists.openwall.com; 'Szabolcs Nagy' <nsz@port70.net>
> Subject: Re: [musl] Hexagon DSP support
> 
> On Fri, Jun 19, 2020 at 09:29:04PM -0500, sidneym@codeaurora.org wrote:
> >
> >
> > > -----Original Message-----
> > > From: Rich Felker <dalias@libc.org>
> > > Sent: Friday, June 19, 2020 5:46 PM
> > > To: sidneym@codeaurora.org
> > > Cc: 'Szabolcs Nagy' <nsz@port70.net>; musl@lists.openwall.com
> > > Subject: Re: [musl] Hexagon DSP support
> > >
> > > On Fri, Jun 19, 2020 at 04:58:53PM -0500, sidneym@codeaurora.org
> wrote:
> > > >
> > > > > -----Original Message-----
> > > > > From: Szabolcs Nagy <nsz@port70.net>
> > > > > Sent: Thursday, June 18, 2020 4:43 PM
> > > > > To: sidneym@codeaurora.org
> > > > > Cc: musl@lists.openwall.com
> > > > > Subject: Re: [musl] Hexagon DSP support
> > > > >
> > > > > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-06-18
> > > > > 11:37:05
> > > > > -0500]:
> > > > > > I attached the updated REPORT with warning output disabled, -w
> > > > > > and -fno-rounding-math (See
> > > > > > https://bugs.llvm.org/show_bug.cgi?id=45329)
> > > > > > along with the patch.  I've rebased a couple of times without
> > > > > > any conflicts and the git repo is here:
> > > > > > https://github.com/quic/musl/tree/hexagon
> > > > >
> > > > > the fmal failures are a bit concerning:
> > > > >
> > > > > fmal should be a tail call to fma if long double has the same
> > > > representation as
> > > > > double. (can you please verify this? there should be a single
> > > > > branch
> > > > instruction
> > > > > in fmal)
> > > > >
> > > > > there are no fma failures with the same tests so fmal should
> > > > > work fine
> > > > too.
> > > >
> > > > In the case of fma the selected function comes from
> > compiler-rt-builtins.
> > > > It looks like since fmal calls fma within the context of the
> > > > c-library the c-library's version is branched to.
> > >
> > > Are you talking about how libc-test was built or how musl was built?
> > > This kind of replacement is not valid in either place. musl is built
> > > with
> > -
> > > ffreestanding, and libc-test is expected to be built with
-fno-builtin.
> > >
> > The link order is the reason.  The clang driver places
> > -lclang_rt.builtins-hexagon ahead of -lc and it happens that this
> > library includes an implementation of fma.  I think fma is something
> > that was introduced in error in compiler-rt.builtins because hexagon
> > is the only arch that has it.
> 
> Yes, that's a bug. compiler-rt cannot define libc functions.

I removed fma/fmal/fmax/fmin/fabs from compiler-rt-builtins,
https://reviews.llvm.org/D82263
The comparison with musl can be found here:
https://github.com/quic/musl/compare/hexagon but I've also attached the
patch.

An assert in clang when building both musl and libc-test for hexagon was
fixed by, https://reviews.llvm.org/D80952 prior to this change
-frounding-math had to be used.

The test-results are also attached.  Everything is built with the
tip-of-tree llvm so sometimes results vary but these are the results I got
from this morning's clone.  The only notable difference in the results would
be that both fma and fmal fail and this is because of the compiler-rt
change.  I didn't add fma to musl because it require more complex assembly,
along the lines you saw in an earlier version with sqrt. 

Thanks for reviewing.


> 
> Rich

[-- Attachment #2: Add-Hexagon.diff --]
[-- Type: application/octet-stream, Size: 43210 bytes --]

[-- Attachment #3: REPORT --]
[-- Type: application/octet-stream, Size: 442197 bytes --]

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-07-20 21:26                                 ` sidneym
@ 2020-07-23 21:56                                   ` Szabolcs Nagy
  2020-07-24 17:49                                     ` sidneym
  2020-09-16 20:49                                     ` sidneym
  0 siblings, 2 replies; 42+ messages in thread
From: Szabolcs Nagy @ 2020-07-23 21:56 UTC (permalink / raw)
  To: sidneym; +Cc: 'Rich Felker', musl

* sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-07-20 16:26:58 -0500]:
> I removed fma/fmal/fmax/fmin/fabs from compiler-rt-builtins,
> https://reviews.llvm.org/D82263
> The comparison with musl can be found here:
> https://github.com/quic/musl/compare/hexagon but I've also attached the
> patch.
> 
> An assert in clang when building both musl and libc-test for hexagon was
> fixed by, https://reviews.llvm.org/D80952 prior to this change
> -frounding-math had to be used.
> 
> The test-results are also attached.  Everything is built with the
> tip-of-tree llvm so sometimes results vary but these are the results I got
> from this morning's clone.  The only notable difference in the results would
> be that both fma and fmal fail and this is because of the compiler-rt
> change.  I didn't add fma to musl because it require more complex assembly,
> along the lines you saw in an earlier version with sqrt. 


the fma and sqrt failures are still not fully explained,
e.g. this looks wrong:

src/math/special/fma.h:42: RN fma(0x1p+0,0x1p+0,-0x1p-1074) want 0x1p+0 got -0x1.fffffp-43 ulperr -4503599627370496.000 = -0x1p+52 + 0x0p+0

the only target specific bit in fma is a_clz_64 so i would
check that.

e.g. a_clz_64(1ULL << 42) should give 21
(this computation happens during the fma test case above).

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-07-23 21:56                                   ` Szabolcs Nagy
@ 2020-07-24 17:49                                     ` sidneym
  2020-09-16 20:49                                     ` sidneym
  1 sibling, 0 replies; 42+ messages in thread
From: sidneym @ 2020-07-24 17:49 UTC (permalink / raw)
  To: 'Szabolcs Nagy'; +Cc: 'Rich Felker', musl



> -----Original Message-----
> From: Szabolcs Nagy <nsz@port70.net>
> Sent: Thursday, July 23, 2020 4:56 PM
> To: sidneym@codeaurora.org
> Cc: 'Rich Felker' <dalias@libc.org>; musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-07-20
> 16:26:58 -0500]:
> > I removed fma/fmal/fmax/fmin/fabs from compiler-rt-builtins,
> > https://reviews.llvm.org/D82263
> > The comparison with musl can be found here:
> > https://github.com/quic/musl/compare/hexagon but I've also attached
> > the patch.
> >
> > An assert in clang when building both musl and libc-test for hexagon
> > was fixed by, https://reviews.llvm.org/D80952 prior to this change
> > -frounding-math had to be used.
> >
> > The test-results are also attached.  Everything is built with the
> > tip-of-tree llvm so sometimes results vary but these are the results I
> > got from this morning's clone.  The only notable difference in the
> > results would be that both fma and fmal fail and this is because of
> > the compiler-rt change.  I didn't add fma to musl because it require
> > more complex assembly, along the lines you saw in an earlier version
with
> sqrt.
> 
> 
> the fma and sqrt failures are still not fully explained, e.g. this looks
wrong:
> 
> src/math/special/fma.h:42: RN fma(0x1p+0,0x1p+0,-0x1p-1074) want 0x1p+0
> got -0x1.fffffp-43 ulperr -4503599627370496.000 = -0x1p+52 + 0x0p+0
> 
> the only target specific bit in fma is a_clz_64 so i would check that.
> 
> e.g. a_clz_64(1ULL << 42) should give 21 (this computation happens during
> the fma test case above).

Hexagon didn't have a_clz_64 implemented however I added this morning it and
noticed no differences.  I will update the patch with that routine included.

I did notice a compiler regression in how it compiled fma and have asked a
compiler person to take a look.  An older version of our internally
maintained compiler does produce the expected results for the values I used
but later versions do not.  Unfortunately changing optimization levels will
produce different results as well.

Thanks,




^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-07-23 21:56                                   ` Szabolcs Nagy
  2020-07-24 17:49                                     ` sidneym
@ 2020-09-16 20:49                                     ` sidneym
  2020-09-17  1:32                                       ` 'Rich Felker'
  1 sibling, 1 reply; 42+ messages in thread
From: sidneym @ 2020-09-16 20:49 UTC (permalink / raw)
  To: 'Szabolcs Nagy'; +Cc: 'Rich Felker', musl

[-- Attachment #1: Type: text/plain, Size: 3051 bytes --]



> -----Original Message-----
> From: sidneym@codeaurora.org <sidneym@codeaurora.org>
> Sent: Friday, July 24, 2020 12:50 PM
> To: 'Szabolcs Nagy' <nsz@port70.net>
> Cc: 'Rich Felker' <dalias@libc.org>; 'musl@lists.openwall.com'
> <musl@lists.openwall.com>
> Subject: RE: [musl] Hexagon DSP support
> 
> 
> 
> > -----Original Message-----
> > From: Szabolcs Nagy <nsz@port70.net>
> > Sent: Thursday, July 23, 2020 4:56 PM
> > To: sidneym@codeaurora.org
> > Cc: 'Rich Felker' <dalias@libc.org>; musl@lists.openwall.com
> > Subject: Re: [musl] Hexagon DSP support
> >
> > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-07-20
> > 16:26:58 -0500]:
> > > I removed fma/fmal/fmax/fmin/fabs from compiler-rt-builtins,
> > > https://reviews.llvm.org/D82263
> > > The comparison with musl can be found here:
> > > https://github.com/quic/musl/compare/hexagon but I've also attached
> > > the patch.
> > >
> > > An assert in clang when building both musl and libc-test for hexagon
> > > was fixed by, https://reviews.llvm.org/D80952 prior to this change
> > > -frounding-math had to be used.
> > >
> > > The test-results are also attached.  Everything is built with the
> > > tip-of-tree llvm so sometimes results vary but these are the results
> > > I got from this morning's clone.  The only notable difference in the
> > > results would be that both fma and fmal fail and this is because of
> > > the compiler-rt change.  I didn't add fma to musl because it require
> > > more complex assembly, along the lines you saw in an earlier version
> > > with
> > sqrt.
> >
> >
> > the fma and sqrt failures are still not fully explained, e.g. this looks
wrong:
> >
> > src/math/special/fma.h:42: RN fma(0x1p+0,0x1p+0,-0x1p-1074) want
> > 0x1p+0 got -0x1.fffffp-43 ulperr -4503599627370496.000 = -0x1p+52 +
> > 0x0p+0
> >
> > the only target specific bit in fma is a_clz_64 so i would check that.
> >
> > e.g. a_clz_64(1ULL << 42) should give 21 (this computation happens
> > during the fma test case above).
> 
> Hexagon didn't have a_clz_64 implemented however I added this morning it
> and noticed no differences.  I will update the patch with that routine
> included.
> 
> I did notice a compiler regression in how it compiled fma and have asked a
> compiler person to take a look.  An older version of our internally
maintained
> compiler does produce the expected results for the values I used but later
> versions do not.  Unfortunately changing optimization levels will produce
> different results as well.

I've attached updated test results and patch.  The patch doesn't change much
other than adding the above mentioned a_clz_64.  The only other change was
an update to pthread_arch.h for an api update so hexagon conforms with the
rest of musl.

Between updates to llvm and musl both fma and sqrt issues are resolved
provided I compile the library without optimization enabled.  No new tests
fail.

I guess I also need to know what the thoughts are about adding hexagon to
the mainline base.  There are no issues adding from this end.

Thanks,

[-- Attachment #2: add-hexagon.diff --]
[-- Type: application/octet-stream, Size: 43448 bytes --]

[-- Attachment #3: libc_test_REPORT --]
[-- Type: application/octet-stream, Size: 42187 bytes --]

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-09-16 20:49                                     ` sidneym
@ 2020-09-17  1:32                                       ` 'Rich Felker'
  2020-09-17 22:31                                         ` sidneym
  0 siblings, 1 reply; 42+ messages in thread
From: 'Rich Felker' @ 2020-09-17  1:32 UTC (permalink / raw)
  To: musl

On Wed, Sep 16, 2020 at 03:49:28PM -0500, sidneym@codeaurora.org wrote:
> 
> 
> > -----Original Message-----
> > From: sidneym@codeaurora.org <sidneym@codeaurora.org>
> > Sent: Friday, July 24, 2020 12:50 PM
> > To: 'Szabolcs Nagy' <nsz@port70.net>
> > Cc: 'Rich Felker' <dalias@libc.org>; 'musl@lists.openwall.com'
> > <musl@lists.openwall.com>
> > Subject: RE: [musl] Hexagon DSP support
> > 
> > 
> > 
> > > -----Original Message-----
> > > From: Szabolcs Nagy <nsz@port70.net>
> > > Sent: Thursday, July 23, 2020 4:56 PM
> > > To: sidneym@codeaurora.org
> > > Cc: 'Rich Felker' <dalias@libc.org>; musl@lists.openwall.com
> > > Subject: Re: [musl] Hexagon DSP support
> > >
> > > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-07-20
> > > 16:26:58 -0500]:
> > > > I removed fma/fmal/fmax/fmin/fabs from compiler-rt-builtins,
> > > > https://reviews.llvm.org/D82263
> > > > The comparison with musl can be found here:
> > > > https://github.com/quic/musl/compare/hexagon but I've also attached
> > > > the patch.
> > > >
> > > > An assert in clang when building both musl and libc-test for hexagon
> > > > was fixed by, https://reviews.llvm.org/D80952 prior to this change
> > > > -frounding-math had to be used.
> > > >
> > > > The test-results are also attached.  Everything is built with the
> > > > tip-of-tree llvm so sometimes results vary but these are the results
> > > > I got from this morning's clone.  The only notable difference in the
> > > > results would be that both fma and fmal fail and this is because of
> > > > the compiler-rt change.  I didn't add fma to musl because it require
> > > > more complex assembly, along the lines you saw in an earlier version
> > > > with
> > > sqrt.
> > >
> > >
> > > the fma and sqrt failures are still not fully explained, e.g. this looks
> wrong:
> > >
> > > src/math/special/fma.h:42: RN fma(0x1p+0,0x1p+0,-0x1p-1074) want
> > > 0x1p+0 got -0x1.fffffp-43 ulperr -4503599627370496.000 = -0x1p+52 +
> > > 0x0p+0
> > >
> > > the only target specific bit in fma is a_clz_64 so i would check that.
> > >
> > > e.g. a_clz_64(1ULL << 42) should give 21 (this computation happens
> > > during the fma test case above).
> > 
> > Hexagon didn't have a_clz_64 implemented however I added this morning it
> > and noticed no differences.  I will update the patch with that routine
> > included.
> > 
> > I did notice a compiler regression in how it compiled fma and have asked a
> > compiler person to take a look.  An older version of our internally
> maintained
> > compiler does produce the expected results for the values I used but later
> > versions do not.  Unfortunately changing optimization levels will produce
> > different results as well.
> 
> I've attached updated test results and patch.  The patch doesn't change much
> other than adding the above mentioned a_clz_64.  The only other change was
> an update to pthread_arch.h for an api update so hexagon conforms with the
> rest of musl.
> 
> Between updates to llvm and musl both fma and sqrt issues are resolved
> provided I compile the library without optimization enabled.  No new tests
> fail.
> 
> I guess I also need to know what the thoughts are about adding hexagon to
> the mainline base.  There are no issues adding from this end.

I'll post some review with the hope that this can move forward
upstream in musl soon. I might need some help figuring out how to get
a cross build environment to check things, but I'll follow up when I
do.

The review that follows is not 100% thorough but I think it's more
detailed than I've done for hexagon so far. Most of it's open to
discussion if you think anything I say is wrong.

> diff --git a/arch/hexagon/atomic_arch.h b/arch/hexagon/atomic_arch.h
> new file mode 100644
> index 00000000..ede55956
> --- /dev/null
> +++ b/arch/hexagon/atomic_arch.h
> @@ -0,0 +1,194 @@
> +#define a_ctz_32 a_ctz_32
> +static inline int a_ctz_32(unsigned long x)
> +{
> +	__asm__(
> +		"%0 = ct0(%0)\n\t"
> +		: "+r"(x));
> +	return x;
> +}
> +
> +#define a_ctz_64 a_ctz_64
> +static inline int a_ctz_64(uint64_t x)
> +{
> +	int count;
> +	__asm__(
> +		"%0 = ct0(%1)\n\t"
> +		: "=r"(count) : "r"(x));
> +	return count;
> +}
> +#define a_clz_64 a_clz_64
> +static inline int a_clz_64(uint64_t x)
> +{
> +        int count;
> +        __asm__(
> +                "%1 = brev(%1)\n\t"
> +                "%0 = ct0(%1)\n\t"
> +                : "=r"(count) : "r"(x));
> +        return count;
> +}

This should probably do just the brev in asm then return
a_ctz_64(result) so that the compiler has the freedom to schedule the
insns independently, unless there's a reason not to want it to do
that.

> +#define a_cas a_cas
> +static inline int a_cas(volatile int *p, int t, int s)
> +{
> +	int dummy;
> +	__asm__ __volatile__(
> +		"1:	%0 = memw_locked(%1)\n\t"
> +		"	{ p0 = cmp.eq(%0, %2)\n\t"
> +		"	  if (!p0.new) jump:nt 2f }\n\t"
> +		"	memw_locked(%1, p0) = %3\n\t"
> +		"	if (!p0) jump 1b\n\t"
> +		"2:	\n\t"
> +		: "=&r"(dummy)
> +		: "r"(p), "r"(t), "r"(s)
> +		: "p0", "memory" );
> +        return dummy;
> +}

I don't know the hexagon atomic model, but as far as I can tell these
at least "look right" in the sense of having right asm constraints.

> [...]
> +#define a_barrier a_barrier
> +static inline void a_barrier()
> +{
> +	__asm__ __volatile__ ("barrier" ::: "memory");
> +}

Is the barrier implied in memw_locked? If not, there need to be
explicit barriers in all the atomic functions.

> diff --git a/arch/hexagon/bits/alltypes.h.in b/arch/hexagon/bits/alltypes.h.in
> new file mode 100644
> index 00000000..9d770c7e
> --- /dev/null
> +++ b/arch/hexagon/bits/alltypes.h.in
> @@ -0,0 +1,26 @@
> +#define _Addr int
> +#define _Int64 long long
> +#define _Reg int
> +
> +#define __BYTE_ORDER 1234
> +#define __LONG_MAX 0x7fffffffL
> +
> +#ifndef __cplusplus
> +#ifdef __WCHAR_TYPE__
> +TYPEDEF __WCHAR_TYPE__ wchar_t;
> +#else
> +TYPEDEF long wchar_t;
> +#endif
> +#endif
> +
> +TYPEDEF float float_t;
> +TYPEDEF double double_t;
> +
> +#if !defined(__cplusplus)
> +TYPEDEF struct { _Alignas(8) long long __ll; long double __ld; } max_align_t;
> +#elif defined(__GNUC__)
> +TYPEDEF struct { __attribute__((__aligned__(8))) long long __ll; long double __ld; } max_align_t;
> +#else
> +TYPEDEF struct { alignas(8) long long __ll; long double __ld; } max_align_t;
> +#endif

As I understand, the Hexagon ABI has all scalar types aligned to their
size, so I don't think the alignas mess is needed here. It should just
work as unconditional:

TYPEDEF struct { long long __ll; long double __ld; } max_align_t;

> diff --git a/arch/hexagon/bits/setjmp.h b/arch/hexagon/bits/setjmp.h
> new file mode 100644
> index 00000000..5ee5e49f
> --- /dev/null
> +++ b/arch/hexagon/bits/setjmp.h
> @@ -0,0 +1,4 @@
> +
> +typedef struct {
> +	long regs[16];
> +} __jmp_buf[1] __attribute__((aligned (8)));

Use long long so no extension is needed here for alignment, and no
wrapper struct (which is not needed, and the member name regs is a
namespace violation):

typedef long long __jmp_buf[8];

> diff --git a/arch/hexagon/bits/signal.h b/arch/hexagon/bits/signal.h
> new file mode 100644
> index 00000000..7a3b36d0
> --- /dev/null
> +++ b/arch/hexagon/bits/signal.h
> @@ -0,0 +1,105 @@
> +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
> + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
> +
> +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
> +#define MINSIGSTKSZ 2048
> +#define SIGSTKSZ 8192
> +#endif
> +
> +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
> +typedef int greg_t, gregset_t[18];
> +typedef struct sigcontext
> +{
> +	unsigned long  r0,  r1,  r2,  r3;
> +	unsigned long  r4,  r5,  r6,  r7;
> +	unsigned long  r8,  r9, r10, r11;
> +	unsigned long r12, r13, r14, r15;
> +	unsigned long r16, r17, r18, r19;
> +	unsigned long r20, r21, r22, r23;
> +	unsigned long r24, r25, r26, r27;
> +	unsigned long r28, r29, r30, r31;
> +	unsigned long sa0;
> +	unsigned long lc0;
> +	unsigned long sa1;
> +	unsigned long lc1;
> +	unsigned long m0;
> +	unsigned long m1;
> +	unsigned long usr;
> +	unsigned long p3_0;
> +	unsigned long gp;
> +	unsigned long ugp;
> +	unsigned long pc;
> +	unsigned long cause;
> +	unsigned long badva;
> +	unsigned long pad1;
> +	unsigned long pad2;
> +	unsigned long pad3;
> +} __attribute__((__aligned__(8))) mcontext_t;
> +#else
> +typedef struct {
> +	unsigned long __regs[48];
> +} __attribute__((__aligned__(8))) mcontext_t;
> +#endif

If the pad members are really padding, can the last two just be
replaced by a long long so there's natural alignment with no
extension?

> [...]
> +typedef struct __ucontext {
> +	unsigned long uc_flags;
> +	struct __ucontext *uc_link;
> +	stack_t uc_stack;
> +	mcontext_t uc_mcontext;
> +	sigset_t uc_sigmask;
> +//	unsigned long long uc_regspace[64];
> +} ucontext_t;

Should the commented uc_regspace be removed?

> diff --git a/arch/hexagon/bits/stat.h b/arch/hexagon/bits/stat.h
> new file mode 100644
> index 00000000..55e81fd9
> --- /dev/null
> +++ b/arch/hexagon/bits/stat.h
> @@ -0,0 +1,20 @@
> +/* copied from kernel definition, but with padding replaced
> + * by the corresponding correctly-sized userspace types. */
> +struct stat {
> +	dev_t st_dev;
> +	ino_t st_ino;
> +	mode_t st_mode;
> +	nlink_t st_nlink;
> +	uid_t st_uid;
> +	gid_t st_gid;
> +	dev_t st_rdev;
> +	unsigned long __pad;
> +	off_t st_size;
> +	blksize_t st_blksize;
> +	int __pad2;
> +	blkcnt_t st_blocks;
> +	struct timespec st_atim;
> +	struct timespec st_mtim;
> +	struct timespec st_ctim;
> +	unsigned __unused[2];
> +};

No objection to doing this as-is, but since this looks like the modern
"standard" layout and we could probably deduplicate it by making
arch/generic provide it. That'd be a later patch to remove the other
existing duplicates (aarch64, riscv64, maybe others).

> diff --git a/arch/hexagon/bits/syscall.h.in b/arch/hexagon/bits/syscall.h.in
> new file mode 100644
> index 00000000..77ca3fa0
> --- /dev/null
> +++ b/arch/hexagon/bits/syscall.h.in
> @@ -0,0 +1,317 @@
> [...]
> +#define __NR_timer_create 107
> +#define __NR_timer_gettime 108
> +#define __NR_timer_getoverrun 109
> +#define __NR_timer_settime 110
> +#define __NR_timer_delete 111
> +#define __NR_clock_settime 112
> +#define __NR_clock_gettime 113

Some of these, e.g. clock_gettime, need to be renamed as in commit
5a105f19b5aae79dd302899e634b6b18b3dcd0d6.

> [...]
> +#define __NR_sched_rr_get_interval_time64 423
> +#define __NR_syscalls (__NR_sched_rr_get_interval_time64+1)
> +#define __NR_fcntl  __NR3264_fcntl
> +#define __NR_fstatfs  __NR3264_fstatfs
> +#define __NR_truncate  __NR3264_truncate
> +#define __NR_ftruncate  __NR3264_ftruncate
> +#define __NR_lseek  __NR3264_lseek
> +#define __NR_sendfile  __NR3264_sendfile
> +#define __NR_newfstatat  __NR3264_fstatat
> +#define __NR_fcntl64  __NR3264_fcntl
> +#define __NR_statfs64  __NR3264_statfs
> +#define __NR_fstatfs64  __NR3264_fstatfs
> +#define __NR_truncate64  __NR3264_truncate
> +#define __NR_ftruncate64  __NR3264_ftruncate
> +#define __NR__llseek  __NR3264_lseek
> +#define __NR_sendfile64  __NR3264_sendfile
> +#define __NR_fstatat64  __NR3264_fstatat
> +#define __NR_fstat64  __NR3264_fstat
> +#define __NR_mmap2  __NR3264_mmap
> +#define __NR_fadvise64_64  __NR3264_fadvise64

Is there a reason for these NR3264 redirections rather than just
defining directly with the public names?

> diff --git a/arch/hexagon/crt_arch.h b/arch/hexagon/crt_arch.h
> new file mode 100644
> index 00000000..331a797e
> --- /dev/null
> +++ b/arch/hexagon/crt_arch.h
> @@ -0,0 +1,35 @@
> +__asm__(
> +".weak _DYNAMIC \n"
> +".hidden _DYNAMIC \n"
> +".text \n"
> +".global " START " \n"
> +".type " START ", %function \n"
> +START ": \n"
> +"                                       // Find _DYNAMIC\n"
> +"       jump 1f\n"
> +".word  _DYNAMIC - .\n"
> +"1:     r2 = pc\n"
> +"       r2 = add(r2, #-4)\n"
> +"       r1 = memw(r2)\n"
> +"       r1 = add(r2, r1)\n"
> +"	r30 = #0			// Signals the end of backtrace\n"
> +"	r0 = r29			// Pointer to argc/argv\n"
> +"	r29 = and(r29, #-16)		// Align\n"
> +"	memw(r29+#-8) = r29\n"
> +"	r29 = add(r29, #-8)\n"
> +"	call " START "_c \n"
> +".size " START ", .-" START "\n"
> +);
> +
> +__asm__(
> +".section \".note.ABI-tag\", \"a\" \n"
> +".align 4 \n"
> +".long 1f - 0f		/* name length */ \n"
> +".long 3f - 2f		/* data length */ \n"
> +".long  1		/* note type */ \n"
> +"0:	.asciz \"GNU\"	/* vendor name seems like this should be MUSL but lldb doesn't agree.*/ \n"
> +"1:	.align 4		 \n"
> +"2:	.long 0	/* linux */ \n"
> +"	.long 3,0,0 \n"
> +"3:	.align 4 \n"
> +);

Is there a reason this needs to be here at all? Shouldn't the tooling
generate it if it's actually wanted/needed?

> diff --git a/arch/hexagon/reloc.h b/arch/hexagon/reloc.h
> new file mode 100644
> index 00000000..14085872
> --- /dev/null
> +++ b/arch/hexagon/reloc.h
> @@ -0,0 +1,25 @@
> +#include <endian.h>
> +
> +#if __BYTE_ORDER == __LITTLE_ENDIAN
> +#define ENDIAN_SUFFIX "el"
> +#else
> +#define ENDIAN_SUFFIX ""
> +#endif

bits/alltypes.h.in defined __BYTE_ORDER as 1234 (unconditionally
little endian). Does Hexagon (hw and abi) actually support both byte
orders? If not, I don't think there should be an endian suffix here at
all.

> diff --git a/include/elf.h b/include/elf.h
> index 549f92c1..54251c24 100644
> --- a/include/elf.h
> +++ b/include/elf.h
> @@ -3284,6 +3284,107 @@ enum
>  #define R_RISCV_SET32           56
>  #define R_RISCV_32_PCREL        57
>  
> +#define R_HEX_NONE               0
> [...]

I'd like to merge this separately first since it's independent of
whether hexagon is a supported host.

> diff --git a/src/fenv/hexagon/fenv.S b/src/fenv/hexagon/fenv.S
> new file mode 100644
> index 00000000..07b89764
> --- /dev/null
> +++ b/src/fenv/hexagon/fenv.S
> @@ -0,0 +1,143 @@
> +/*
> +The Hexagon user status register includes five status fields which work as
> +sticky flags for the five IEEE-defined exception conditions: inexact, overflow, underflow,
> +divide by zero, and invalid. A sticky flag is set when the corresponding exception occurs,
> +and remains set until explicitly cleared.

Please format for at most 80 columns. (Some source files have a few
longer lines, but if you're flowing text it should be flowed to 80 or
fewer.)

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-09-17  1:32                                       ` 'Rich Felker'
@ 2020-09-17 22:31                                         ` sidneym
  2020-09-18  1:08                                           ` Rich Felker
  0 siblings, 1 reply; 42+ messages in thread
From: sidneym @ 2020-09-17 22:31 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 16197 bytes --]



> -----Original Message-----
> From: 'Rich Felker' <dalias@libc.org>
> Sent: Wednesday, September 16, 2020 8:33 PM
> To: musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> On Wed, Sep 16, 2020 at 03:49:28PM -0500, sidneym@codeaurora.org wrote:
> >
> >
> > > -----Original Message-----
> > > From: sidneym@codeaurora.org <sidneym@codeaurora.org>
> > > Sent: Friday, July 24, 2020 12:50 PM
> > > To: 'Szabolcs Nagy' <nsz@port70.net>
> > > Cc: 'Rich Felker' <dalias@libc.org>; 'musl@lists.openwall.com'
> > > <musl@lists.openwall.com>
> > > Subject: RE: [musl] Hexagon DSP support
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Szabolcs Nagy <nsz@port70.net>
> > > > Sent: Thursday, July 23, 2020 4:56 PM
> > > > To: sidneym@codeaurora.org
> > > > Cc: 'Rich Felker' <dalias@libc.org>; musl@lists.openwall.com
> > > > Subject: Re: [musl] Hexagon DSP support
> > > >
> > > > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-07-20
> > > > 16:26:58 -0500]:
> > > > > I removed fma/fmal/fmax/fmin/fabs from compiler-rt-builtins,
> > > > > https://reviews.llvm.org/D82263
> > > > > The comparison with musl can be found here:
> > > > > https://github.com/quic/musl/compare/hexagon but I've also
> > > > > attached the patch.
> > > > >
> > > > > An assert in clang when building both musl and libc-test for
> > > > > hexagon was fixed by, https://reviews.llvm.org/D80952 prior to
> > > > > this change -frounding-math had to be used.
> > > > >
> > > > > The test-results are also attached.  Everything is built with
> > > > > the tip-of-tree llvm so sometimes results vary but these are the
> > > > > results I got from this morning's clone.  The only notable
> > > > > difference in the results would be that both fma and fmal fail
> > > > > and this is because of the compiler-rt change.  I didn't add fma
> > > > > to musl because it require more complex assembly, along the
> > > > > lines you saw in an earlier version with
> > > > sqrt.
> > > >
> > > >
> > > > the fma and sqrt failures are still not fully explained, e.g. this
> > > > looks
> > wrong:
> > > >
> > > > src/math/special/fma.h:42: RN fma(0x1p+0,0x1p+0,-0x1p-1074) want
> > > > 0x1p+0 got -0x1.fffffp-43 ulperr -4503599627370496.000 = -0x1p+52
> > > > 0x1p++
> > > > 0x0p+0
> > > >
> > > > the only target specific bit in fma is a_clz_64 so i would check
that.
> > > >
> > > > e.g. a_clz_64(1ULL << 42) should give 21 (this computation happens
> > > > during the fma test case above).
> > >
> > > Hexagon didn't have a_clz_64 implemented however I added this
> > > morning it and noticed no differences.  I will update the patch with
> > > that routine included.
> > >
> > > I did notice a compiler regression in how it compiled fma and have
> > > asked a compiler person to take a look.  An older version of our
> > > internally
> > maintained
> > > compiler does produce the expected results for the values I used but
> > > later versions do not.  Unfortunately changing optimization levels
> > > will produce different results as well.
> >
> > I've attached updated test results and patch.  The patch doesn't
> > change much other than adding the above mentioned a_clz_64.  The only
> > other change was an update to pthread_arch.h for an api update so
> > hexagon conforms with the rest of musl.
> >
> > Between updates to llvm and musl both fma and sqrt issues are resolved
> > provided I compile the library without optimization enabled.  No new
> > tests fail.
> >
> > I guess I also need to know what the thoughts are about adding hexagon
> > to the mainline base.  There are no issues adding from this end.
> 
> I'll post some review with the hope that this can move forward upstream in
> musl soon. I might need some help figuring out how to get a cross build
> environment to check things, but I'll follow up when I do.
> 
> The review that follows is not 100% thorough but I think it's more
detailed
> than I've done for hexagon so far. Most of it's open to discussion if you
think
> anything I say is wrong.
> 
> > diff --git a/arch/hexagon/atomic_arch.h b/arch/hexagon/atomic_arch.h
> > new file mode 100644 index 00000000..ede55956
> > --- /dev/null
> > +++ b/arch/hexagon/atomic_arch.h
> > @@ -0,0 +1,194 @@
> > +#define a_ctz_32 a_ctz_32
> > +static inline int a_ctz_32(unsigned long x) {
> > +	__asm__(
> > +		"%0 = ct0(%0)\n\t"
> > +		: "+r"(x));
> > +	return x;
> > +}
> > +
> > +#define a_ctz_64 a_ctz_64
> > +static inline int a_ctz_64(uint64_t x) {
> > +	int count;
> > +	__asm__(
> > +		"%0 = ct0(%1)\n\t"
> > +		: "=r"(count) : "r"(x));
> > +	return count;
> > +}
> > +#define a_clz_64 a_clz_64
> > +static inline int a_clz_64(uint64_t x) {
> > +        int count;
> > +        __asm__(
> > +                "%1 = brev(%1)\n\t"
> > +                "%0 = ct0(%1)\n\t"
> > +                : "=r"(count) : "r"(x));
> > +        return count;
> > +}
> 
> This should probably do just the brev in asm then return
> a_ctz_64(result) so that the compiler has the freedom to schedule the
insns
> independently, unless there's a reason not to want it to do that.

I used AARCH64's a_ctz_64 as a reference for this, but there are builtins
for these operations and I will use those instead, __builtin_clzll(x);

> 
> > +#define a_cas a_cas
> > +static inline int a_cas(volatile int *p, int t, int s) {
> > +	int dummy;
> > +	__asm__ __volatile__(
> > +		"1:	%0 = memw_locked(%1)\n\t"
> > +		"	{ p0 = cmp.eq(%0, %2)\n\t"
> > +		"	  if (!p0.new) jump:nt 2f }\n\t"
> > +		"	memw_locked(%1, p0) = %3\n\t"
> > +		"	if (!p0) jump 1b\n\t"
> > +		"2:	\n\t"
> > +		: "=&r"(dummy)
> > +		: "r"(p), "r"(t), "r"(s)
> > +		: "p0", "memory" );
> > +        return dummy;
> > +}
> 
> I don't know the hexagon atomic model, but as far as I can tell these at
least
> "look right" in the sense of having right asm constraints.
> 
> > [...]
> > +#define a_barrier a_barrier
> > +static inline void a_barrier()
> > +{
> > +	__asm__ __volatile__ ("barrier" ::: "memory"); }
> 
> Is the barrier implied in memw_locked? If not, there need to be explicit
> barriers in all the atomic functions.

Yes, if there is any memory access on the reserved address the reservation
is lost and the predicate is false.


> 
> > diff --git a/arch/hexagon/bits/alltypes.h.in
> > b/arch/hexagon/bits/alltypes.h.in new file mode 100644 index
> > 00000000..9d770c7e
> > --- /dev/null
> > +++ b/arch/hexagon/bits/alltypes.h.in
> > @@ -0,0 +1,26 @@
> > +#define _Addr int
> > +#define _Int64 long long
> > +#define _Reg int
> > +
> > +#define __BYTE_ORDER 1234
> > +#define __LONG_MAX 0x7fffffffL
> > +
> > +#ifndef __cplusplus
> > +#ifdef __WCHAR_TYPE__
> > +TYPEDEF __WCHAR_TYPE__ wchar_t;
> > +#else
> > +TYPEDEF long wchar_t;
> > +#endif
> > +#endif
> > +
> > +TYPEDEF float float_t;
> > +TYPEDEF double double_t;
> > +
> > +#if !defined(__cplusplus)
> > +TYPEDEF struct { _Alignas(8) long long __ll; long double __ld; }
> > +max_align_t; #elif defined(__GNUC__) TYPEDEF struct {
> > +__attribute__((__aligned__(8))) long long __ll; long double __ld; }
> > +max_align_t; #else TYPEDEF struct { alignas(8) long long __ll; long
> > +double __ld; } max_align_t; #endif
> 
> As I understand, the Hexagon ABI has all scalar types aligned to their
size, so I
> don't think the alignas mess is needed here. It should just work as
> unconditional:
> 
> TYPEDEF struct { long long __ll; long double __ld; } max_align_t;

True and I will remove the alignas stuff.


> 
> > diff --git a/arch/hexagon/bits/setjmp.h b/arch/hexagon/bits/setjmp.h
> > new file mode 100644 index 00000000..5ee5e49f
> > --- /dev/null
> > +++ b/arch/hexagon/bits/setjmp.h
> > @@ -0,0 +1,4 @@
> > +
> > +typedef struct {
> > +	long regs[16];
> > +} __jmp_buf[1] __attribute__((aligned (8)));
> 
> Use long long so no extension is needed here for alignment, and no wrapper
> struct (which is not needed, and the member name regs is a namespace
> violation):
> 
> typedef long long __jmp_buf[8];

OK 

> 
> > diff --git a/arch/hexagon/bits/signal.h b/arch/hexagon/bits/signal.h
> > new file mode 100644 index 00000000..7a3b36d0
> > --- /dev/null
> > +++ b/arch/hexagon/bits/signal.h
> > @@ -0,0 +1,105 @@
> > +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
> > + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) ||
> > + || defined(_BSD_SOURCE)
> > +
> > +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) ||
> > +defined(_BSD_SOURCE) #define MINSIGSTKSZ 2048 #define SIGSTKSZ
> 8192
> > +#endif
> > +
> > +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) typedef int
> greg_t,
> > +gregset_t[18]; typedef struct sigcontext {
> > +	unsigned long  r0,  r1,  r2,  r3;
> > +	unsigned long  r4,  r5,  r6,  r7;
> > +	unsigned long  r8,  r9, r10, r11;
> > +	unsigned long r12, r13, r14, r15;
> > +	unsigned long r16, r17, r18, r19;
> > +	unsigned long r20, r21, r22, r23;
> > +	unsigned long r24, r25, r26, r27;
> > +	unsigned long r28, r29, r30, r31;
> > +	unsigned long sa0;
> > +	unsigned long lc0;
> > +	unsigned long sa1;
> > +	unsigned long lc1;
> > +	unsigned long m0;
> > +	unsigned long m1;
> > +	unsigned long usr;
> > +	unsigned long p3_0;
> > +	unsigned long gp;
> > +	unsigned long ugp;
> > +	unsigned long pc;
> > +	unsigned long cause;
> > +	unsigned long badva;
> > +	unsigned long pad1;
> > +	unsigned long pad2;
> > +	unsigned long pad3;
> > +} __attribute__((__aligned__(8))) mcontext_t; #else typedef struct {
> > +	unsigned long __regs[48];
> > +} __attribute__((__aligned__(8))) mcontext_t; #endif
> 
> If the pad members are really padding, can the last two just be replaced
by a
> long long so there's natural alignment with no extension?

Yes, this would work.


> 
> > [...]
> > +typedef struct __ucontext {
> > +	unsigned long uc_flags;
> > +	struct __ucontext *uc_link;
> > +	stack_t uc_stack;
> > +	mcontext_t uc_mcontext;
> > +	sigset_t uc_sigmask;
> > +//	unsigned long long uc_regspace[64];
> > +} ucontext_t;
> 
> Should the commented uc_regspace be removed?

I missed that.


> 
> > diff --git a/arch/hexagon/bits/stat.h b/arch/hexagon/bits/stat.h new
> > file mode 100644 index 00000000..55e81fd9
> > --- /dev/null
> > +++ b/arch/hexagon/bits/stat.h
> > @@ -0,0 +1,20 @@
> > +/* copied from kernel definition, but with padding replaced
> > + * by the corresponding correctly-sized userspace types. */ struct
> > +stat {
> > +	dev_t st_dev;
> > +	ino_t st_ino;
> > +	mode_t st_mode;
> > +	nlink_t st_nlink;
> > +	uid_t st_uid;
> > +	gid_t st_gid;
> > +	dev_t st_rdev;
> > +	unsigned long __pad;
> > +	off_t st_size;
> > +	blksize_t st_blksize;
> > +	int __pad2;
> > +	blkcnt_t st_blocks;
> > +	struct timespec st_atim;
> > +	struct timespec st_mtim;
> > +	struct timespec st_ctim;
> > +	unsigned __unused[2];
> > +};
> 
> No objection to doing this as-is, but since this looks like the modern
> "standard" layout and we could probably deduplicate it by making
> arch/generic provide it. That'd be a later patch to remove the other
existing
> duplicates (aarch64, riscv64, maybe others).
> 
> > diff --git a/arch/hexagon/bits/syscall.h.in
> > b/arch/hexagon/bits/syscall.h.in new file mode 100644 index
> > 00000000..77ca3fa0
> > --- /dev/null
> > +++ b/arch/hexagon/bits/syscall.h.in
> > @@ -0,0 +1,317 @@
> > [...]
> > +#define __NR_timer_create 107
> > +#define __NR_timer_gettime 108
> > +#define __NR_timer_getoverrun 109
> > +#define __NR_timer_settime 110
> > +#define __NR_timer_delete 111
> > +#define __NR_clock_settime 112
> > +#define __NR_clock_gettime 113
> 
> Some of these, e.g. clock_gettime, need to be renamed as in commit
> 5a105f19b5aae79dd302899e634b6b18b3dcd0d6.
> 
> > [...]
> > +#define __NR_sched_rr_get_interval_time64 423 #define __NR_syscalls
> > +(__NR_sched_rr_get_interval_time64+1)
> > +#define __NR_fcntl  __NR3264_fcntl
> > +#define __NR_fstatfs  __NR3264_fstatfs #define __NR_truncate
> > +__NR3264_truncate #define __NR_ftruncate  __NR3264_ftruncate
> #define
> > +__NR_lseek  __NR3264_lseek #define __NR_sendfile
> __NR3264_sendfile
> > +#define __NR_newfstatat  __NR3264_fstatat #define __NR_fcntl64
> > +__NR3264_fcntl #define __NR_statfs64  __NR3264_statfs #define
> > +__NR_fstatfs64  __NR3264_fstatfs #define __NR_truncate64
> > +__NR3264_truncate #define __NR_ftruncate64  __NR3264_ftruncate
> > +#define __NR__llseek  __NR3264_lseek #define __NR_sendfile64
> > +__NR3264_sendfile #define __NR_fstatat64  __NR3264_fstatat #define
> > +__NR_fstat64  __NR3264_fstat #define __NR_mmap2  __NR3264_mmap
> > +#define __NR_fadvise64_64  __NR3264_fadvise64
> 
> Is there a reason for these NR3264 redirections rather than just defining
> directly with the public names?

This is also some carryover from an older port.  I think they are not
needed.


> 
> > diff --git a/arch/hexagon/crt_arch.h b/arch/hexagon/crt_arch.h new
> > file mode 100644 index 00000000..331a797e
> > --- /dev/null
> > +++ b/arch/hexagon/crt_arch.h
> > @@ -0,0 +1,35 @@
> > +__asm__(
> > +".weak _DYNAMIC \n"
> > +".hidden _DYNAMIC \n"
> > +".text \n"
> > +".global " START " \n"
> > +".type " START ", %function \n"
> > +START ": \n"
> > +"                                       // Find _DYNAMIC\n"
> > +"       jump 1f\n"
> > +".word  _DYNAMIC - .\n"
> > +"1:     r2 = pc\n"
> > +"       r2 = add(r2, #-4)\n"
> > +"       r1 = memw(r2)\n"
> > +"       r1 = add(r2, r1)\n"
> > +"	r30 = #0			// Signals the end of backtrace\n"
> > +"	r0 = r29			// Pointer to argc/argv\n"
> > +"	r29 = and(r29, #-16)		// Align\n"
> > +"	memw(r29+#-8) = r29\n"
> > +"	r29 = add(r29, #-8)\n"
> > +"	call " START "_c \n"
> > +".size " START ", .-" START "\n"
> > +);
> > +
> > +__asm__(
> > +".section \".note.ABI-tag\", \"a\" \n"
> > +".align 4 \n"
> > +".long 1f - 0f		/* name length */ \n"
> > +".long 3f - 2f		/* data length */ \n"
> > +".long  1		/* note type */ \n"
> > +"0:	.asciz \"GNU\"	/* vendor name seems like this should be
MUSL but
> lldb doesn't agree.*/ \n"
> > +"1:	.align 4		 \n"
> > +"2:	.long 0	/* linux */ \n"
> > +"	.long 3,0,0 \n"
> > +"3:	.align 4 \n"
> > +);
> 
> Is there a reason this needs to be here at all? Shouldn't the tooling
generate
> it if it's actually wanted/needed?

OK, this is here so lldb can select the right target allowing the same
version of lldb to work in multiple runtime environments. I need to take a
look at what the options are if this isn't a good place for this.

> 
> > diff --git a/arch/hexagon/reloc.h b/arch/hexagon/reloc.h new file mode
> > 100644 index 00000000..14085872
> > --- /dev/null
> > +++ b/arch/hexagon/reloc.h
> > @@ -0,0 +1,25 @@
> > +#include <endian.h>
> > +
> > +#if __BYTE_ORDER == __LITTLE_ENDIAN
> > +#define ENDIAN_SUFFIX "el"
> > +#else
> > +#define ENDIAN_SUFFIX ""
> > +#endif
> 
> bits/alltypes.h.in defined __BYTE_ORDER as 1234 (unconditionally little
> endian). Does Hexagon (hw and abi) actually support both byte orders? If
> not, I don't think there should be an endian suffix here at all.

No it does not I will remove it.

> 
> > diff --git a/include/elf.h b/include/elf.h index 549f92c1..54251c24
> > 100644
> > --- a/include/elf.h
> > +++ b/include/elf.h
> > @@ -3284,6 +3284,107 @@ enum
> >  #define R_RISCV_SET32           56
> >  #define R_RISCV_32_PCREL        57
> >
> > +#define R_HEX_NONE               0
> > [...]
> 
> I'd like to merge this separately first since it's independent of whether
> hexagon is a supported host.
> 
> > diff --git a/src/fenv/hexagon/fenv.S b/src/fenv/hexagon/fenv.S new
> > file mode 100644 index 00000000..07b89764
> > --- /dev/null
> > +++ b/src/fenv/hexagon/fenv.S
> > @@ -0,0 +1,143 @@
> > +/*
> > +The Hexagon user status register includes five status fields which
> > +work as sticky flags for the five IEEE-defined exception conditions:
> > +inexact, overflow, underflow, divide by zero, and invalid. A sticky
> > +flag is set when the corresponding exception occurs, and remains set
until
> explicitly cleared.
> 
> Please format for at most 80 columns. (Some source files have a few longer
> lines, but if you're flowing text it should be flowed to 80 or
> fewer.)

Will fix those lines and a couple of others I noticed.

The changes I made can be seen here:
https://github.com/quic/musl/commit/4d714f2defcd926b4f8c0425af363b382d3084cb

I've also attached an updated patch.

Thanks

[-- Attachment #2: add-hexagon.diff --]
[-- Type: application/octet-stream, Size: 42320 bytes --]

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-09-17 22:31                                         ` sidneym
@ 2020-09-18  1:08                                           ` Rich Felker
  2020-09-18  8:10                                             ` Szabolcs Nagy
  2020-09-20 13:12                                             ` sidneym
  0 siblings, 2 replies; 42+ messages in thread
From: Rich Felker @ 2020-09-18  1:08 UTC (permalink / raw)
  To: sidneym; +Cc: musl

On Thu, Sep 17, 2020 at 05:31:29PM -0500, sidneym@codeaurora.org wrote:
> 
> 
> > -----Original Message-----
> > From: 'Rich Felker' <dalias@libc.org>
> > Sent: Wednesday, September 16, 2020 8:33 PM
> > To: musl@lists.openwall.com
> > Subject: Re: [musl] Hexagon DSP support
> > 
> > On Wed, Sep 16, 2020 at 03:49:28PM -0500, sidneym@codeaurora.org wrote:
> > >
> > >
> > > > -----Original Message-----
> > > > From: sidneym@codeaurora.org <sidneym@codeaurora.org>
> > > > Sent: Friday, July 24, 2020 12:50 PM
> > > > To: 'Szabolcs Nagy' <nsz@port70.net>
> > > > Cc: 'Rich Felker' <dalias@libc.org>; 'musl@lists.openwall.com'
> > > > <musl@lists.openwall.com>
> > > > Subject: RE: [musl] Hexagon DSP support
> > > >
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Szabolcs Nagy <nsz@port70.net>
> > > > > Sent: Thursday, July 23, 2020 4:56 PM
> > > > > To: sidneym@codeaurora.org
> > > > > Cc: 'Rich Felker' <dalias@libc.org>; musl@lists.openwall.com
> > > > > Subject: Re: [musl] Hexagon DSP support
> > > > >
> > > > > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-07-20
> > > > > 16:26:58 -0500]:
> > > > > > I removed fma/fmal/fmax/fmin/fabs from compiler-rt-builtins,
> > > > > > https://reviews.llvm.org/D82263
> > > > > > The comparison with musl can be found here:
> > > > > > https://github.com/quic/musl/compare/hexagon but I've also
> > > > > > attached the patch.
> > > > > >
> > > > > > An assert in clang when building both musl and libc-test for
> > > > > > hexagon was fixed by, https://reviews.llvm.org/D80952 prior to
> > > > > > this change -frounding-math had to be used.
> > > > > >
> > > > > > The test-results are also attached.  Everything is built with
> > > > > > the tip-of-tree llvm so sometimes results vary but these are the
> > > > > > results I got from this morning's clone.  The only notable
> > > > > > difference in the results would be that both fma and fmal fail
> > > > > > and this is because of the compiler-rt change.  I didn't add fma
> > > > > > to musl because it require more complex assembly, along the
> > > > > > lines you saw in an earlier version with
> > > > > sqrt.
> > > > >
> > > > >
> > > > > the fma and sqrt failures are still not fully explained, e.g. this
> > > > > looks
> > > wrong:
> > > > >
> > > > > src/math/special/fma.h:42: RN fma(0x1p+0,0x1p+0,-0x1p-1074) want
> > > > > 0x1p+0 got -0x1.fffffp-43 ulperr -4503599627370496.000 = -0x1p+52
> > > > > 0x1p++
> > > > > 0x0p+0
> > > > >
> > > > > the only target specific bit in fma is a_clz_64 so i would check
> that.
> > > > >
> > > > > e.g. a_clz_64(1ULL << 42) should give 21 (this computation happens
> > > > > during the fma test case above).
> > > >
> > > > Hexagon didn't have a_clz_64 implemented however I added this
> > > > morning it and noticed no differences.  I will update the patch with
> > > > that routine included.
> > > >
> > > > I did notice a compiler regression in how it compiled fma and have
> > > > asked a compiler person to take a look.  An older version of our
> > > > internally
> > > maintained
> > > > compiler does produce the expected results for the values I used but
> > > > later versions do not.  Unfortunately changing optimization levels
> > > > will produce different results as well.
> > >
> > > I've attached updated test results and patch.  The patch doesn't
> > > change much other than adding the above mentioned a_clz_64.  The only
> > > other change was an update to pthread_arch.h for an api update so
> > > hexagon conforms with the rest of musl.
> > >
> > > Between updates to llvm and musl both fma and sqrt issues are resolved
> > > provided I compile the library without optimization enabled.  No new
> > > tests fail.
> > >
> > > I guess I also need to know what the thoughts are about adding hexagon
> > > to the mainline base.  There are no issues adding from this end.
> > 
> > I'll post some review with the hope that this can move forward upstream in
> > musl soon. I might need some help figuring out how to get a cross build
> > environment to check things, but I'll follow up when I do.
> > 
> > The review that follows is not 100% thorough but I think it's more
> detailed
> > than I've done for hexagon so far. Most of it's open to discussion if you
> think
> > anything I say is wrong.
> > 
> > > diff --git a/arch/hexagon/atomic_arch.h b/arch/hexagon/atomic_arch.h
> > > new file mode 100644 index 00000000..ede55956
> > > --- /dev/null
> > > +++ b/arch/hexagon/atomic_arch.h
> > > @@ -0,0 +1,194 @@
> > > +#define a_ctz_32 a_ctz_32
> > > +static inline int a_ctz_32(unsigned long x) {
> > > +	__asm__(
> > > +		"%0 = ct0(%0)\n\t"
> > > +		: "+r"(x));
> > > +	return x;
> > > +}
> > > +
> > > +#define a_ctz_64 a_ctz_64
> > > +static inline int a_ctz_64(uint64_t x) {
> > > +	int count;
> > > +	__asm__(
> > > +		"%0 = ct0(%1)\n\t"
> > > +		: "=r"(count) : "r"(x));
> > > +	return count;
> > > +}
> > > +#define a_clz_64 a_clz_64
> > > +static inline int a_clz_64(uint64_t x) {
> > > +        int count;
> > > +        __asm__(
> > > +                "%1 = brev(%1)\n\t"
> > > +                "%0 = ct0(%1)\n\t"
> > > +                : "=r"(count) : "r"(x));
> > > +        return count;
> > > +}
> > 
> > This should probably do just the brev in asm then return
> > a_ctz_64(result) so that the compiler has the freedom to schedule the
> insns
> > independently, unless there's a reason not to want it to do that.
> 
> I used AARCH64's a_ctz_64 as a reference for this, but there are builtins
> for these operations and I will use those instead, __builtin_clzll(x);

No, builtins of that sort aren't used in musl for various reasons.
This one might be technically okay (as opposed to others that can
produce circular definitions and such), but the style preference is
still to write it as an asm statement.

> > > +#define a_cas a_cas
> > > +static inline int a_cas(volatile int *p, int t, int s) {
> > > +	int dummy;
> > > +	__asm__ __volatile__(
> > > +		"1:	%0 = memw_locked(%1)\n\t"
> > > +		"	{ p0 = cmp.eq(%0, %2)\n\t"
> > > +		"	  if (!p0.new) jump:nt 2f }\n\t"
> > > +		"	memw_locked(%1, p0) = %3\n\t"
> > > +		"	if (!p0) jump 1b\n\t"
> > > +		"2:	\n\t"
> > > +		: "=&r"(dummy)
> > > +		: "r"(p), "r"(t), "r"(s)
> > > +		: "p0", "memory" );
> > > +        return dummy;
> > > +}
> > 
> > I don't know the hexagon atomic model, but as far as I can tell these at
> least
> > "look right" in the sense of having right asm constraints.
> > 
> > > [...]
> > > +#define a_barrier a_barrier
> > > +static inline void a_barrier()
> > > +{
> > > +	__asm__ __volatile__ ("barrier" ::: "memory"); }
> > 
> > Is the barrier implied in memw_locked? If not, there need to be explicit
> > barriers in all the atomic functions.
> 
> Yes, if there is any memory access on the reserved address the reservation
> is lost and the predicate is false.

That's not what a barrier means. The question is whether it orders all
access to *other* memory, not the address with the reservation on it.
In other words, musl's a_*() atomics need to be full seq_cst model
operations, not relaxed atomics.

> > > diff --git a/arch/hexagon/crt_arch.h b/arch/hexagon/crt_arch.h new
> > > file mode 100644 index 00000000..331a797e
> > > --- /dev/null
> > > +++ b/arch/hexagon/crt_arch.h
> > > @@ -0,0 +1,35 @@
> > > +__asm__(
> > > +".weak _DYNAMIC \n"
> > > +".hidden _DYNAMIC \n"
> > > +".text \n"
> > > +".global " START " \n"
> > > +".type " START ", %function \n"
> > > +START ": \n"
> > > +"                                       // Find _DYNAMIC\n"
> > > +"       jump 1f\n"
> > > +".word  _DYNAMIC - .\n"
> > > +"1:     r2 = pc\n"
> > > +"       r2 = add(r2, #-4)\n"
> > > +"       r1 = memw(r2)\n"
> > > +"       r1 = add(r2, r1)\n"
> > > +"	r30 = #0			// Signals the end of backtrace\n"
> > > +"	r0 = r29			// Pointer to argc/argv\n"
> > > +"	r29 = and(r29, #-16)		// Align\n"
> > > +"	memw(r29+#-8) = r29\n"
> > > +"	r29 = add(r29, #-8)\n"
> > > +"	call " START "_c \n"
> > > +".size " START ", .-" START "\n"
> > > +);
> > > +
> > > +__asm__(
> > > +".section \".note.ABI-tag\", \"a\" \n"
> > > +".align 4 \n"
> > > +".long 1f - 0f		/* name length */ \n"
> > > +".long 3f - 2f		/* data length */ \n"
> > > +".long  1		/* note type */ \n"
> > > +"0:	.asciz \"GNU\"	/* vendor name seems like this should be
> MUSL but
> > lldb doesn't agree.*/ \n"
> > > +"1:	.align 4		 \n"
> > > +"2:	.long 0	/* linux */ \n"
> > > +"	.long 3,0,0 \n"
> > > +"3:	.align 4 \n"
> > > +);
> > 
> > Is there a reason this needs to be here at all? Shouldn't the tooling
> generate
> > it if it's actually wanted/needed?
> 
> OK, this is here so lldb can select the right target allowing the same
> version of lldb to work in multiple runtime environments. I need to take a
> look at what the options are if this isn't a good place for this.

OK, please follow up with what you find. I'm pretty sure this belongs
in the tooling though (as something the compiler emits or the
assembler emits based on how it's invoked and what its target is) not
in a file in libc.

> > > diff --git a/arch/hexagon/reloc.h b/arch/hexagon/reloc.h new file mode
> > > 100644 index 00000000..14085872
> > > --- /dev/null
> > > +++ b/arch/hexagon/reloc.h
> > > @@ -0,0 +1,25 @@
> > > +#include <endian.h>
> > > +
> > > +#if __BYTE_ORDER == __LITTLE_ENDIAN
> > > +#define ENDIAN_SUFFIX "el"
> > > +#else
> > > +#define ENDIAN_SUFFIX ""
> > > +#endif
> > 
> > bits/alltypes.h.in defined __BYTE_ORDER as 1234 (unconditionally little
> > endian). Does Hexagon (hw and abi) actually support both byte orders? If
> > not, I don't think there should be an endian suffix here at all.
> 
> No it does not I will remove it.

OK. Make sure the compiler target support has the right ldso name too
(I think that's /lib/ld-musl-hexagon.so.1, right?).

> > > diff --git a/src/fenv/hexagon/fenv.S b/src/fenv/hexagon/fenv.S new
> > > file mode 100644 index 00000000..07b89764
> > > --- /dev/null
> > > +++ b/src/fenv/hexagon/fenv.S
> > > @@ -0,0 +1,143 @@
> > > +/*
> > > +The Hexagon user status register includes five status fields which
> > > +work as sticky flags for the five IEEE-defined exception conditions:
> > > +inexact, overflow, underflow, divide by zero, and invalid. A sticky
> > > +flag is set when the corresponding exception occurs, and remains set
> until
> > explicitly cleared.
> > 
> > Please format for at most 80 columns. (Some source files have a few longer
> > lines, but if you're flowing text it should be flowed to 80 or
> > fewer.)
> 
> Will fix those lines and a couple of others I noticed.
> 
> The changes I made can be seen here:
> https://github.com/quic/musl/commit/4d714f2defcd926b4f8c0425af363b382d3084cb
> 
> I've also attached an updated patch.

OK. I haven't looked at it yet but I wanted to go ahead and get you
replies to the content in the email body. If there's anything else in
the patch that needs commenting on I'll follow up soon, probably
tomorrow.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-09-18  1:08                                           ` Rich Felker
@ 2020-09-18  8:10                                             ` Szabolcs Nagy
  2020-09-20 13:12                                             ` sidneym
  1 sibling, 0 replies; 42+ messages in thread
From: Szabolcs Nagy @ 2020-09-18  8:10 UTC (permalink / raw)
  To: Rich Felker; +Cc: sidneym, musl

* Rich Felker <dalias@libc.org> [2020-09-17 21:08:07 -0400]:
> On Thu, Sep 17, 2020 at 05:31:29PM -0500, sidneym@codeaurora.org wrote:
> > > -----Original Message-----
> > > From: 'Rich Felker' <dalias@libc.org>
> > > Sent: Wednesday, September 16, 2020 8:33 PM
> > > To: musl@lists.openwall.com
> > > Subject: Re: [musl] Hexagon DSP support
> > > 
> > > On Wed, Sep 16, 2020 at 03:49:28PM -0500, sidneym@codeaurora.org wrote:
> > > >
> > > > +__asm__(
> > > > +".section \".note.ABI-tag\", \"a\" \n"
> > > > +".align 4 \n"
> > > > +".long 1f - 0f		/* name length */ \n"
> > > > +".long 3f - 2f		/* data length */ \n"
> > > > +".long  1		/* note type */ \n"
> > > > +"0:	.asciz \"GNU\"	/* vendor name seems like this should be
> > MUSL but
> > > lldb doesn't agree.*/ \n"
> > > > +"1:	.align 4		 \n"
> > > > +"2:	.long 0	/* linux */ \n"
> > > > +"	.long 3,0,0 \n"
> > > > +"3:	.align 4 \n"
> > > > +);
> > > 
> > > Is there a reason this needs to be here at all? Shouldn't the tooling
> > generate
> > > it if it's actually wanted/needed?
> > 
> > OK, this is here so lldb can select the right target allowing the same
> > version of lldb to work in multiple runtime environments. I need to take a
> > look at what the options are if this isn't a good place for this.
> 
> OK, please follow up with what you find. I'm pretty sure this belongs
> in the tooling though (as something the compiler emits or the
> assembler emits based on how it's invoked and what its target is) not
> in a file in libc.

that gnu abi note specifies the minimum supported
kernel version (linux 3.0.0 in this case) and in glibc
it is explicitly added to all glibc dsos and to *crt1.o
(so it depends on the libc not other tooling).

i don't think the debugger should need this unless there
was some linux abi change, in glibc it is used to check
against the runtime kernel version and abort (or fail
dlopen) if that is too old, but musl has no such logic.

see comments about abi note in:
https://sourceware.org/git?p=glibc.git;a=blob;f=csu/abi-note.c
https://sourceware.org/git?p=glibc.git;a=blob;f=abi-tags
see how it is used in dlopen:
https://sourceware.org/git?p=glibc.git;a=blob;f=elf/dl-load.c;h=646c5dca40efcc9ba9f39dbda8b189864792216d;hb=HEAD#l1819


^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-09-18  1:08                                           ` Rich Felker
  2020-09-18  8:10                                             ` Szabolcs Nagy
@ 2020-09-20 13:12                                             ` sidneym
  2020-09-20 17:17                                               ` 'Rich Felker'
  1 sibling, 1 reply; 42+ messages in thread
From: sidneym @ 2020-09-20 13:12 UTC (permalink / raw)
  To: 'Rich Felker'; +Cc: musl



> -----Original Message-----
> From: Rich Felker <dalias@libc.org>
> Sent: Thursday, September 17, 2020 8:08 PM
> To: sidneym@codeaurora.org
> Cc: musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> On Thu, Sep 17, 2020 at 05:31:29PM -0500, sidneym@codeaurora.org wrote:
> >
> >
> > > -----Original Message-----
> > > From: 'Rich Felker' <dalias@libc.org>
> > > Sent: Wednesday, September 16, 2020 8:33 PM
> > > To: musl@lists.openwall.com
> > > Subject: Re: [musl] Hexagon DSP support
> > >
> > > On Wed, Sep 16, 2020 at 03:49:28PM -0500, sidneym@codeaurora.org
> wrote:
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: sidneym@codeaurora.org <sidneym@codeaurora.org>
> > > > > Sent: Friday, July 24, 2020 12:50 PM
> > > > > To: 'Szabolcs Nagy' <nsz@port70.net>
> > > > > Cc: 'Rich Felker' <dalias@libc.org>; 'musl@lists.openwall.com'
> > > > > <musl@lists.openwall.com>
> > > > > Subject: RE: [musl] Hexagon DSP support
> > > > >
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Szabolcs Nagy <nsz@port70.net>
> > > > > > Sent: Thursday, July 23, 2020 4:56 PM
> > > > > > To: sidneym@codeaurora.org
> > > > > > Cc: 'Rich Felker' <dalias@libc.org>; musl@lists.openwall.com
> > > > > > Subject: Re: [musl] Hexagon DSP support
> > > > > >
> > > > > > * sidneym@codeaurora.org <sidneym@codeaurora.org> [2020-07-
> 20
> > > > > > 16:26:58 -0500]:
> > > > > > > I removed fma/fmal/fmax/fmin/fabs from compiler-rt-builtins,
> > > > > > > https://reviews.llvm.org/D82263 The comparison with musl can
> > > > > > > be found here:
> > > > > > > https://github.com/quic/musl/compare/hexagon but I've also
> > > > > > > attached the patch.
> > > > > > >
> > > > > > > An assert in clang when building both musl and libc-test for
> > > > > > > hexagon was fixed by, https://reviews.llvm.org/D80952 prior
> > > > > > > to this change -frounding-math had to be used.
> > > > > > >
> > > > > > > The test-results are also attached.  Everything is built
> > > > > > > with the tip-of-tree llvm so sometimes results vary but
> > > > > > > these are the results I got from this morning's clone.  The
> > > > > > > only notable difference in the results would be that both
> > > > > > > fma and fmal fail and this is because of the compiler-rt
> > > > > > > change.  I didn't add fma to musl because it require more
> > > > > > > complex assembly, along the lines you saw in an earlier
> > > > > > > version with
> > > > > > sqrt.
> > > > > >
> > > > > >
> > > > > > the fma and sqrt failures are still not fully explained, e.g.
> > > > > > this looks
> > > > wrong:
> > > > > >
> > > > > > src/math/special/fma.h:42: RN fma(0x1p+0,0x1p+0,-0x1p-1074)
> > > > > > want
> > > > > > 0x1p+0 got -0x1.fffffp-43 ulperr -4503599627370496.000 =
> > > > > > 0x1p+-0x1p+52
> > > > > > 0x1p++
> > > > > > 0x0p+0
> > > > > >
> > > > > > the only target specific bit in fma is a_clz_64 so i would
> > > > > > check
> > that.
> > > > > >
> > > > > > e.g. a_clz_64(1ULL << 42) should give 21 (this computation
> > > > > > happens during the fma test case above).
> > > > >
> > > > > Hexagon didn't have a_clz_64 implemented however I added this
> > > > > morning it and noticed no differences.  I will update the patch
> > > > > with that routine included.
> > > > >
> > > > > I did notice a compiler regression in how it compiled fma and
> > > > > have asked a compiler person to take a look.  An older version
> > > > > of our internally
> > > > maintained
> > > > > compiler does produce the expected results for the values I used
> > > > > but later versions do not.  Unfortunately changing optimization
> > > > > levels will produce different results as well.
> > > >
> > > > I've attached updated test results and patch.  The patch doesn't
> > > > change much other than adding the above mentioned a_clz_64.  The
> > > > only other change was an update to pthread_arch.h for an api
> > > > update so hexagon conforms with the rest of musl.
> > > >
> > > > Between updates to llvm and musl both fma and sqrt issues are
> > > > resolved provided I compile the library without optimization
> > > > enabled.  No new tests fail.
> > > >
> > > > I guess I also need to know what the thoughts are about adding
> > > > hexagon to the mainline base.  There are no issues adding from this
> end.
> > >
> > > I'll post some review with the hope that this can move forward
> > > upstream in musl soon. I might need some help figuring out how to
> > > get a cross build environment to check things, but I'll follow up when
I do.
> > >
> > > The review that follows is not 100% thorough but I think it's more
> > detailed
> > > than I've done for hexagon so far. Most of it's open to discussion
> > > if you
> > think
> > > anything I say is wrong.
> > >
> > > > diff --git a/arch/hexagon/atomic_arch.h
> > > > b/arch/hexagon/atomic_arch.h new file mode 100644 index
> > > > 00000000..ede55956
> > > > --- /dev/null
> > > > +++ b/arch/hexagon/atomic_arch.h
> > > > @@ -0,0 +1,194 @@
> > > > +#define a_ctz_32 a_ctz_32
> > > > +static inline int a_ctz_32(unsigned long x) {
> > > > +	__asm__(
> > > > +		"%0 = ct0(%0)\n\t"
> > > > +		: "+r"(x));
> > > > +	return x;
> > > > +}
> > > > +
> > > > +#define a_ctz_64 a_ctz_64
> > > > +static inline int a_ctz_64(uint64_t x) {
> > > > +	int count;
> > > > +	__asm__(
> > > > +		"%0 = ct0(%1)\n\t"
> > > > +		: "=r"(count) : "r"(x));
> > > > +	return count;
> > > > +}
> > > > +#define a_clz_64 a_clz_64
> > > > +static inline int a_clz_64(uint64_t x) {
> > > > +        int count;
> > > > +        __asm__(
> > > > +                "%1 = brev(%1)\n\t"
> > > > +                "%0 = ct0(%1)\n\t"
> > > > +                : "=r"(count) : "r"(x));
> > > > +        return count;
> > > > +}
> > >
> > > This should probably do just the brev in asm then return
> > > a_ctz_64(result) so that the compiler has the freedom to schedule
> > > the
> > insns
> > > independently, unless there's a reason not to want it to do that.
> >
> > I used AARCH64's a_ctz_64 as a reference for this, but there are
> > builtins for these operations and I will use those instead,
> > __builtin_clzll(x);
> 
> No, builtins of that sort aren't used in musl for various reasons.
> This one might be technically okay (as opposed to others that can produce
> circular definitions and such), but the style preference is still to write
it as an
> asm statement.

OK, will restore the inlines.

> 
> > > > +#define a_cas a_cas
> > > > +static inline int a_cas(volatile int *p, int t, int s) {
> > > > +	int dummy;
> > > > +	__asm__ __volatile__(
> > > > +		"1:	%0 = memw_locked(%1)\n\t"
> > > > +		"	{ p0 = cmp.eq(%0, %2)\n\t"
> > > > +		"	  if (!p0.new) jump:nt 2f }\n\t"
> > > > +		"	memw_locked(%1, p0) = %3\n\t"
> > > > +		"	if (!p0) jump 1b\n\t"
> > > > +		"2:	\n\t"
> > > > +		: "=&r"(dummy)
> > > > +		: "r"(p), "r"(t), "r"(s)
> > > > +		: "p0", "memory" );
> > > > +        return dummy;
> > > > +}
> > >
> > > I don't know the hexagon atomic model, but as far as I can tell
> > > these at
> > least
> > > "look right" in the sense of having right asm constraints.
> > >
> > > > [...]
> > > > +#define a_barrier a_barrier
> > > > +static inline void a_barrier()
> > > > +{
> > > > +	__asm__ __volatile__ ("barrier" ::: "memory"); }
> > >
> > > Is the barrier implied in memw_locked? If not, there need to be
> > > explicit barriers in all the atomic functions.
> >
> > Yes, if there is any memory access on the reserved address the
> > reservation is lost and the predicate is false.
> 
> That's not what a barrier means. The question is whether it orders all
access
> to *other* memory, not the address with the reservation on it.
> In other words, musl's a_*() atomics need to be full seq_cst model
> operations, not relaxed atomics.

Per our spec:
"Threads in the Hexagon processor follow a sequentially consistent memory
model at a packet
granularity. Threads interleave their memory operations with one another in
an arbitrary but
fair manner. This results in a consistent program order that is globally
observable by all
threads in the same order."  


> 
> > > > diff --git a/arch/hexagon/crt_arch.h b/arch/hexagon/crt_arch.h new
> > > > file mode 100644 index 00000000..331a797e
> > > > --- /dev/null
> > > > +++ b/arch/hexagon/crt_arch.h
> > > > @@ -0,0 +1,35 @@
> > > > +__asm__(
> > > > +".weak _DYNAMIC \n"
> > > > +".hidden _DYNAMIC \n"
> > > > +".text \n"
> > > > +".global " START " \n"
> > > > +".type " START ", %function \n"
> > > > +START ": \n"
> > > > +"                                       // Find _DYNAMIC\n"
> > > > +"       jump 1f\n"
> > > > +".word  _DYNAMIC - .\n"
> > > > +"1:     r2 = pc\n"
> > > > +"       r2 = add(r2, #-4)\n"
> > > > +"       r1 = memw(r2)\n"
> > > > +"       r1 = add(r2, r1)\n"
> > > > +"	r30 = #0			// Signals the end of
> backtrace\n"
> > > > +"	r0 = r29			// Pointer to argc/argv\n"
> > > > +"	r29 = and(r29, #-16)		// Align\n"
> > > > +"	memw(r29+#-8) = r29\n"
> > > > +"	r29 = add(r29, #-8)\n"
> > > > +"	call " START "_c \n"
> > > > +".size " START ", .-" START "\n"
> > > > +);
> > > > +
> > > > +__asm__(
> > > > +".section \".note.ABI-tag\", \"a\" \n"
> > > > +".align 4 \n"
> > > > +".long 1f - 0f		/* name length */ \n"
> > > > +".long 3f - 2f		/* data length */ \n"
> > > > +".long  1		/* note type */ \n"
> > > > +"0:	.asciz \"GNU\"	/* vendor name seems like this should be
> > MUSL but
> > > lldb doesn't agree.*/ \n"
> > > > +"1:	.align 4		 \n"
> > > > +"2:	.long 0	/* linux */ \n"
> > > > +"	.long 3,0,0 \n"
> > > > +"3:	.align 4 \n"
> > > > +);
> > >
> > > Is there a reason this needs to be here at all? Shouldn't the
> > > tooling
> > generate
> > > it if it's actually wanted/needed?
> >
> > OK, this is here so lldb can select the right target allowing the same
> > version of lldb to work in multiple runtime environments. I need to
> > take a look at what the options are if this isn't a good place for this.
> 
> OK, please follow up with what you find. I'm pretty sure this belongs in
the
> tooling though (as something the compiler emits or the assembler emits
> based on how it's invoked and what its target is) not in a file in libc.
> 

Szabolcs noted that gnu crt adds a similar note.  I know that lldb's
RefineModuleDetailsFromNote uses this to select the OS but will remove it
for now while other options are looked at.


> > > > diff --git a/arch/hexagon/reloc.h b/arch/hexagon/reloc.h new file
> > > > mode
> > > > 100644 index 00000000..14085872
> > > > --- /dev/null
> > > > +++ b/arch/hexagon/reloc.h
> > > > @@ -0,0 +1,25 @@
> > > > +#include <endian.h>
> > > > +
> > > > +#if __BYTE_ORDER == __LITTLE_ENDIAN #define ENDIAN_SUFFIX "el"
> > > > +#else
> > > > +#define ENDIAN_SUFFIX ""
> > > > +#endif
> > >
> > > bits/alltypes.h.in defined __BYTE_ORDER as 1234 (unconditionally
> > > little endian). Does Hexagon (hw and abi) actually support both byte
> > > orders? If not, I don't think there should be an endian suffix here at
all.
> >
> > No it does not I will remove it.
> 
> OK. Make sure the compiler target support has the right ldso name too (I
> think that's /lib/ld-musl-hexagon.so.1, right?).

Yes, that is the name.


> 
> > > > diff --git a/src/fenv/hexagon/fenv.S b/src/fenv/hexagon/fenv.S new
> > > > file mode 100644 index 00000000..07b89764
> > > > --- /dev/null
> > > > +++ b/src/fenv/hexagon/fenv.S
> > > > @@ -0,0 +1,143 @@
> > > > +/*
> > > > +The Hexagon user status register includes five status fields
> > > > +which work as sticky flags for the five IEEE-defined exception
> conditions:
> > > > +inexact, overflow, underflow, divide by zero, and invalid. A
> > > > +sticky flag is set when the corresponding exception occurs, and
> > > > +remains set
> > until
> > > explicitly cleared.
> > >
> > > Please format for at most 80 columns. (Some source files have a few
> > > longer lines, but if you're flowing text it should be flowed to 80
> > > or
> > > fewer.)
> >
> > Will fix those lines and a couple of others I noticed.
> >
> > The changes I made can be seen here:
> >
> https://github.com/quic/musl/commit/4d714f2defcd926b4f8c0425af363b382
> d
> > 3084cb
> >
> > I've also attached an updated patch.
> 
> OK. I haven't looked at it yet but I wanted to go ahead and get you
replies to
> the content in the email body. If there's anything else in the patch that
needs
> commenting on I'll follow up soon, probably tomorrow.
> 
> Rich


^ permalink raw reply	[flat|nested] 42+ messages in thread

* Re: [musl] Hexagon DSP support
  2020-09-20 13:12                                             ` sidneym
@ 2020-09-20 17:17                                               ` 'Rich Felker'
  2020-09-21 14:09                                                 ` sidneym
  0 siblings, 1 reply; 42+ messages in thread
From: 'Rich Felker' @ 2020-09-20 17:17 UTC (permalink / raw)
  To: sidneym; +Cc: musl

On Sun, Sep 20, 2020 at 08:12:47AM -0500, sidneym@codeaurora.org wrote:
> > > > > [...]
> > > > > +#define a_barrier a_barrier
> > > > > +static inline void a_barrier()
> > > > > +{
> > > > > +	__asm__ __volatile__ ("barrier" ::: "memory"); }
> > > >
> > > > Is the barrier implied in memw_locked? If not, there need to be
> > > > explicit barriers in all the atomic functions.
> > >
> > > Yes, if there is any memory access on the reserved address the
> > > reservation is lost and the predicate is false.
> > 
> > That's not what a barrier means. The question is whether it orders all
> access
> > to *other* memory, not the address with the reservation on it.
> > In other words, musl's a_*() atomics need to be full seq_cst model
> > operations, not relaxed atomics.
> 
> Per our spec:
> "Threads in the Hexagon processor follow a sequentially consistent memory
> model at a packet
> granularity. Threads interleave their memory operations with one another in
> an arbitrary but
> fair manner. This results in a consistent program order that is globally
> observable by all
> threads in the same order."  

Can you clarify or provide a reference for what 'packet granularity'
means? If there's actually a full builtin seq_cst order I don't see
what the barrier instruction exists for to begin with.

Rich

^ permalink raw reply	[flat|nested] 42+ messages in thread

* RE: [musl] Hexagon DSP support
  2020-09-20 17:17                                               ` 'Rich Felker'
@ 2020-09-21 14:09                                                 ` sidneym
  0 siblings, 0 replies; 42+ messages in thread
From: sidneym @ 2020-09-21 14:09 UTC (permalink / raw)
  To: 'Rich Felker'; +Cc: musl



> -----Original Message-----
> From: 'Rich Felker' <dalias@libc.org>
> Sent: Sunday, September 20, 2020 12:17 PM
> To: sidneym@codeaurora.org
> Cc: musl@lists.openwall.com
> Subject: Re: [musl] Hexagon DSP support
> 
> On Sun, Sep 20, 2020 at 08:12:47AM -0500, sidneym@codeaurora.org wrote:
> > > > > > [...]
> > > > > > +#define a_barrier a_barrier
> > > > > > +static inline void a_barrier() {
> > > > > > +	__asm__ __volatile__ ("barrier" ::: "memory"); }
> > > > >
> > > > > Is the barrier implied in memw_locked? If not, there need to be
> > > > > explicit barriers in all the atomic functions.
> > > >
> > > > Yes, if there is any memory access on the reserved address the
> > > > reservation is lost and the predicate is false.
> > >
> > > That's not what a barrier means. The question is whether it orders
> > > all
> > access
> > > to *other* memory, not the address with the reservation on it.
> > > In other words, musl's a_*() atomics need to be full seq_cst model
> > > operations, not relaxed atomics.
> >
> > Per our spec:
> > "Threads in the Hexagon processor follow a sequentially consistent
> > memory model at a packet granularity. Threads interleave their memory
> > operations with one another in an arbitrary but fair manner. This
> > results in a consistent program order that is globally observable by
> > all threads in the same order."
> 
> Can you clarify or provide a reference for what 'packet granularity'
> means? If there's actually a full builtin seq_cst order I don't see what
the
> barrier instruction exists for to begin with.
> 

Packet granularity is like instruction granularity, every operation within
the packet happens in parallel.  There is an exception since packets can
have dual stores.  They happen in a prescribed order.  A packet has 4 slots
but dual stores must be in slots 0 & 1.  Stores in slot 1 happen before
stores in slot 0.  Slot 0  is the highest address in the packet so the store
order would appear as it would if you disassembled the code.

barrier is used for thread-to-external-memory.  All observers in the "global
shared domain" would see the store after the barrier finished.
"For devices external to the Hexagon processor, the processor follows a
weakly-ordered
memory model. Explicit synchronization is required to ensure order between
memory
accesses."


> Rich


^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2020-09-21 14:10 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-15 13:19 [musl] Hexagon DSP support sidneym
2020-04-15 16:30 ` Rich Felker
2020-04-15 17:50   ` sidneym
2020-04-15 18:06     ` Szabolcs Nagy
2020-04-15 18:22       ` sidneym
2020-04-16  9:36         ` Szabolcs Nagy
2020-04-16 15:34           ` Rich Felker
2020-04-16 16:26             ` sidneym
2020-04-16 16:34               ` 'Rich Felker'
2020-04-15 18:26       ` Rich Felker
2020-04-15 19:12         ` sidneym
2020-04-15 19:29           ` 'Rich Felker'
2020-04-30 22:44             ` sidneym
2020-04-30 23:51               ` Rich Felker
2020-05-05 23:37                 ` sidneym
2020-05-06  0:59                   ` Rich Felker
2020-06-18 16:37                     ` sidneym
2020-06-18 21:42                       ` Szabolcs Nagy
2020-06-19 21:58                         ` sidneym
2020-06-19 22:46                           ` Rich Felker
2020-06-20  0:03                             ` [musl] strtok Robert Skopalík
2020-06-20  0:15                               ` Rich Felker
2020-06-20  0:36                                 ` Robert Skopalík
2020-06-20  0:46                                 ` Robert Skopalík
2020-06-20  1:44                                   ` Rich Felker
2020-06-20  7:07                                 ` Patrick Oppenlander
2020-06-20 13:00                                   ` Robert Skopalík
2020-06-22  0:57                                     ` Bery Saidi
2020-06-20  2:29                             ` [musl] Hexagon DSP support sidneym
2020-06-20  3:20                               ` Rich Felker
2020-07-20 21:26                                 ` sidneym
2020-07-23 21:56                                   ` Szabolcs Nagy
2020-07-24 17:49                                     ` sidneym
2020-09-16 20:49                                     ` sidneym
2020-09-17  1:32                                       ` 'Rich Felker'
2020-09-17 22:31                                         ` sidneym
2020-09-18  1:08                                           ` Rich Felker
2020-09-18  8:10                                             ` Szabolcs Nagy
2020-09-20 13:12                                             ` sidneym
2020-09-20 17:17                                               ` 'Rich Felker'
2020-09-21 14:09                                                 ` sidneym
2020-04-15 18:55 ` Fangrui Song

mailing list of musl libc

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://inbox.vuxu.org/musl

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V1 musl musl/ http://inbox.vuxu.org/musl \
		musl@inbox.vuxu.org
	public-inbox-index musl

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.vuxu.org/vuxu.archive.musl


code repositories for the project(s) associated with this inbox:

	https://git.vuxu.org/mirror/musl/

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git