
Johan Rede wrote:
Do both platforms support uint64_t?
No, they support __int64 and long long. uint64_t can be typedef'ed as unsigned __int64 or unsigned long long.
How is long double implemented in the VAX FP mode? Is it the same as double, or does it have more than 8 bytes?
On Tru64 and AlphaVMS (in both VAX FP modes and IEEE), there are two types of long double: 128-bit long double and 64-bit long double. iVMS supports only 128-bit double. On Tru64 V5.0 and later, 128-bit long double is the default, but 64-bit long double can be requested by compiling with -long_double_size 64 switch. On VMS, it would be /l_double_size=[64,128] switch, but the default on VMS has always been 128-bit long double. When /l_double_size=64 is specified on iVMS, the compiler issues a warning and ignores the option. The 64-bit long double is rarely used nowadays and this is why we have dropped it for iVMS. I think, it would be completely reasonable if your library asserts if the code was compiled for 64-bit long double. You can recognize this case by checking the __X_FLOAT macro: for 64-bit long double it is predefined as 0, otherwise, it is predefined as 1.
How does the sign bit work in the VAX FP mode? Is it the leading bit of the leading byte? Do you reverse the sign of a number simply by flipping the sign bit?
The thing is that, while internal representation of (deprecated) 64-bit long double depends on the floating-point mode, for 128-bit long double, the internal representation is the same in all FP modes. If you want to support VAX FP modes, this is another reason to support only 128-bit long double across the board.
Based on the results I posted yesterday, is it correct to say that fpclassify library passes the tests on both VMS platforms?
That is correct. It has passed all tests on both VMS platforms, in both full ieee mode and fast ieee mode.
This is good!
Could you run the attached version of the inspect tool on both platforms in VAX FP mode.
Attached results in the following order: AlphaVMS G_FLOAT D_FLOAT iVMS G_FLOAT D_FLOAT AlphaVMS ======== CXXC::_5> @build inspect HP C++ V7.1-018 for OpenVMS Alpha V7.3-2 AlphaServer 4100 5/533 4MB *** G_FLOAT This platform is big-endian. BOOST_LITTTLE_ENDIAN is defined. ---------- float -------------------- 0 00 00 00 00 sn.min -- -- -- -- -sn.min -- -- -- -- n.min/256 00 00 00 00 n.min/2 00 00 00 00 -n.min/2 00 00 00 00 n.min 80 00 00 00 1 80 40 00 00 3/4 40 40 00 00 4/3 aa 40 ab aa max ff 7f ff ff inf -- -- -- -- q.nan -- -- -- -- s.nan -- -- -- -- ---------- double ------------------- 0 00 00 00 00 00 00 00 00 sn.min -- -- -- -- -- -- -- -- -sn.min -- -- -- -- -- -- -- -- n.min/256 00 00 00 00 00 00 00 00 n.min/2 00 00 00 00 00 00 00 00 -n.min/2 00 00 00 00 00 00 00 00 n.min 10 00 00 00 00 00 00 00 1 10 40 00 00 00 00 00 00 3/4 08 40 00 00 00 00 00 00 4/3 15 40 55 55 55 55 55 55 max ff 7f ff ff ff ff ff ff inf -- -- -- -- -- -- -- -- q.nan -- -- -- -- -- -- -- -- s.nan -- -- -- -- -- -- -- -- ---------- long double -------------- 0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 sn.min -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -sn.min -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- n.min/256 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 n.min/2 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 -n.min/2 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 80 n.min 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 3f 3/4 00 00 00 00 00 00 00 00 00 00 00 00 00 80 fe 3f 4/3 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ff 3f max ff ff ff ff ff ff ff ff ff ff ff ff ff ff fe 7f inf -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- q.nan -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- s.nan -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- *** D_FLOAT This platform is big-endian. BOOST_LITTTLE_ENDIAN is defined. ---------- float -------------------- 0 00 00 00 00 sn.min -- -- -- -- -sn.min -- -- -- -- n.min/256 00 00 00 00 n.min/2 00 00 00 00 -n.min/2 00 00 00 00 n.min 80 00 00 00 1 80 40 00 00 3/4 40 40 00 00 4/3 aa 40 ab aa max ff 7f ff ff inf -- -- -- -- q.nan -- -- -- -- s.nan -- -- -- -- ---------- double ------------------- 0 00 00 00 00 00 00 00 00 sn.min -- -- -- -- -- -- -- -- -sn.min -- -- -- -- -- -- -- -- n.min/256 00 00 00 00 00 00 00 00 n.min/2 00 00 00 00 00 00 00 00 -n.min/2 00 00 00 00 00 00 00 00 n.min 80 00 00 00 00 00 00 00 1 80 40 00 00 00 00 00 00 3/4 40 40 00 00 00 00 00 00 4/3 aa 40 aa aa aa aa a8 aa max ff 7f ff ff ff ff f8 ff inf -- -- -- -- -- -- -- -- q.nan -- -- -- -- -- -- -- -- s.nan -- -- -- -- -- -- -- -- ---------- long double -------------- 0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 sn.min -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -sn.min -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- n.min/256 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 n.min/2 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 -n.min/2 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 80 n.min 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 3f 3/4 00 00 00 00 00 00 00 00 00 00 00 00 00 80 fe 3f 4/3 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ff 3f max ff ff ff ff ff ff ff ff ff ff ff ff ff ff fe 7f inf -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- q.nan -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- s.nan -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- CXXC::_5> iVMS ==== ICXX::_2> @build inspect HP C++ V7.2-021 on OpenVMS IA64 V8.3 HP rx2600 (1.30GHz/3.0MB) *** G_FLOAT This platform is big-endian. BOOST_LITTTLE_ENDIAN is defined. ---------- float -------------------- 0 00 00 00 00 sn.min -- -- -- -- -sn.min -- -- -- -- n.min/256 00 00 00 00 n.min/2 00 00 00 00 -n.min/2 00 00 00 00 n.min 80 00 00 00 1 80 40 00 00 3/4 40 40 00 00 4/3 aa 40 ab aa max ff 7f ff ff inf -- -- -- -- q.nan -- -- -- -- s.nan -- -- -- -- ---------- double ------------------- 0 00 00 00 00 00 00 00 00 sn.min -- -- -- -- -- -- -- -- -sn.min -- -- -- -- -- -- -- -- n.min/256 00 00 00 00 00 00 00 00 n.min/2 00 00 00 00 00 00 00 00 -n.min/2 00 00 00 00 00 00 00 00 n.min 10 00 00 00 00 00 00 00 1 10 40 00 00 00 00 00 00 3/4 08 40 00 00 00 00 00 00 4/3 15 40 55 55 55 55 55 55 max ff 7f ff ff ff ff ff ff inf -- -- -- -- -- -- -- -- q.nan -- -- -- -- -- -- -- -- s.nan -- -- -- -- -- -- -- -- ---------- long double -------------- 0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 sn.min -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -sn.min -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- n.min/256 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 n.min/2 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 -n.min/2 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 80 n.min 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 3f 3/4 00 00 00 00 00 00 00 00 00 00 00 00 00 80 fe 3f 4/3 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ff 3f max ff ff ff ff ff ff ff ff ff ff ff ff ff ff fe 7f inf -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- q.nan -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- s.nan -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- *** D_FLOAT This platform is big-endian. BOOST_LITTTLE_ENDIAN is defined. ---------- float -------------------- 0 00 00 00 00 sn.min -- -- -- -- -sn.min -- -- -- -- n.min/256 00 00 00 00 n.min/2 00 00 00 00 -n.min/2 00 00 00 00 n.min 80 00 00 00 1 80 40 00 00 3/4 40 40 00 00 4/3 aa 40 ab aa max ff 7f ff ff inf -- -- -- -- q.nan -- -- -- -- s.nan -- -- -- -- ---------- double ------------------- 0 00 00 00 00 00 00 00 00 sn.min -- -- -- -- -- -- -- -- -sn.min -- -- -- -- -- -- -- -- n.min/256 00 00 00 00 00 00 00 00 n.min/2 00 00 00 00 00 00 00 00 -n.min/2 00 00 00 00 00 00 00 00 n.min 80 00 00 00 00 00 00 00 1 80 40 00 00 00 00 00 00 3/4 40 40 00 00 00 00 00 00 4/3 aa 40 aa aa aa aa a8 aa max ff 7f ff ff ff ff f8 ff inf -- -- -- -- -- -- -- -- q.nan -- -- -- -- -- -- -- -- s.nan -- -- -- -- -- -- -- -- ---------- long double -------------- 0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 sn.min -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -sn.min -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- n.min/256 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 n.min/2 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 -n.min/2 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 80 n.min 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 3f 3/4 00 00 00 00 00 00 00 00 00 00 00 00 00 80 fe 3f 4/3 55 55 55 55 55 55 55 55 55 55 55 55 55 55 ff 3f max ff ff ff ff ff ff ff ff ff ff ff ff ff ff fe 7f inf -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- q.nan -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- s.nan -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ICXX::_2>