* Eric W. Biederman ebiederman@lnxi.com [030915 13:10]:
Ron how so? If romcc compiles it should work. I don't have any excuse for romcc to behave different depending on what compiler compiles it.
But there is a difference in the resulting romcc depending on whether you compile it for AMD64 or IA32. I tracked it down to lines 211 and 212: /* Long on the destination platform */ typedef unsigned long ulong_t; typedef long long_t;
The IA32 version of the size_of() function will return 4 when it gets a pointer or a long, whereas the AMD64 version will return 8.
The function transform_to_arch_instruction checks the result of size_of() in the OP_COPY branch of the big case statement and fails with an internal compiler error if the size is not 1, 2 or 4.
Since IA32 code (including AMD64 special registers) is the only target platform currently supported, it should be OK to change above typedefs to 4 byte types. If this seems not appropriate it might make sense to seperate the platform dependent code into several files and have an additional target for AMD64 long mode.
Stefan