libc: fix undefined behavior in int64_to_float128
When negating a signed integer, the integer must not be LLONG_MIN, as
negating that value would not change the sign. GCC's -ftrapv mode
detects cases like this reliably.
In this case, on sparc64 with -O2 (but not -O0 or -O1),
countLeadingZeros64(LLONG_MIN) returned 48 instead of the desired 0, and
int64_to_float128(LLONG_MIN) returned -0x1p+14 instead of the desired
-0x1p+63.
The same pattern is used in several other conversion functions. These
will be fixed in a follow-up commit once the lint tests for msg_380 and
msg_381 on sparc64 work again.
Align loading of physical memory with virt68k, and stop keeping two
copies of this information (one in the phys_seg_list[] and one in
mem_clusters[]; the latter is now gone).
Use the data structure from <m68k/seglist.h> to describe the memory
configuration extracted from linux bootinfo. Align virt68k's memory
loading with mvme68k (which will also get some changes in a follow-on
commit). This will be used as a template to eventually merge this
code for all m68k platforms.
tests/libc: test long double operations more thoroughly
For lint, the tests msg_380.c and msg_381.c fail, which is probably due
to a bug in the softfloat implementation.
The tests are intended to yield the same results on all platforms, as
they do not exercise any tricky rounding details.