Do not memcpy 16 to 10.
Various minor improvements: add default args properly with --noconf export *LD_LIBRARY_PATH if there is an already installed shared libparrot do not conf if only make parrot_config is needed
Silences probe on darwin and fixes probe on Solaris.
NUMVAL_SIZE is not good enough, esp. wrong for x86_64
The old fetch_buf_?e_nn() converters took only 2 args, but the nv converters take now 3. So add intermediate inlined special versions. Fixed a couple of remaining const'ness issues and bswap64 lines. Hardcode "%.16g" for the strtoflt128 buf. Still does not work yet though.
The __float128 cast does not work, so use snprintf and strtoflt128. Add -lquadmath to gcc when i_quadmath succeeds. Fixed ROUND_NUM_TO 3rd arguments with the new _DIG defines
print_n/nc/i/ic and the say variants go through a full Parrot_io_printf with 3 va_start/va_end scenarios and a custom format string parser, and through char* -> STRING->char* conversion until the fixed FLOATVAL_FMT or INTVAL_FMT printf is done. Just to print a single int or number. This also lost precision for non-double floatval's - if cast to (double). Now avoided.
Add more needed precisions to numeric tests, tested with intel long double. Change a magic number in t/library/test_more.t 888.81<=>888.82 1e-2 was not stable enough for intel long double Fix src/dynoplibs/sys.ops doublesize to numvalsize. This only works for double.
va_list does not support float, long double nor __float128 on most systems. Promote FLOATVAL to double to avoid that.
…t to converters Convert endianness upfront does not work. Some converters work on native floats, to do compiler casts. They need to know the packfile byteorder. Other bitfiddling converters work only on little-endian, so we also need to know the packfile byteorder, and they also need to convert endianness back to to the target format. Refactor bswap64, as it only works with 64bit registers. Tested with HAS_INT64. So there are two bswap64 API's, one for fast native conversion via a register and one with two unsigned char * args, which might point to the same buffer, for easier in-place conversion. Added dummy ROUND_NUM_TO macro, which needs to round a long number down to the given precision (when converting upwards). Can be done with sprintf, but need to find a better way. Simplify converter casts with unions. Replace SWAB_12 with SWAB_10. TODO: Need to check the last two bytes.
All tests pass now, just __float128 has problems printing certain numbers properly. E.g. __float128 is probed for %.17Lg fmt, which prints 3.8 as 3.7999999999999998
intel and pcc does not support va_arg float arguments. Sounds weird but so it is. float still has problems