Isn't also TYPE_SUBTYPE wrong in the big endian case? It seems to me that on a 64bit big endian machine both subtype and type would always end up being 0.
like so?
#define TYPE_SUBTYPE(X,Y) (((Y)|((X)<<16)) << (sizeof(ptrdiff_t) - 32))
Yes, it is currently not correct for 64-bit bit endian.
And I cannot see how a lot of code in pike would work at all if the union trick does not do so, we use union assignments in several places.
On a related note, can anyone come up with anything to put in the wasted 40 bits of struct svalue? :)