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.
Although I certainly don't understand all the implications, I changed lines 211 and 212 to:
typedef unsigned int ulong_t; typedef int long_t;
and made romcc on an Opteron based system running the 8.2 beta. Romcc got further, but failed with the following:
console.c: 136.35: Incompatible types in initializer
As an experiment I went ahead and commented out the code in console.c that it was complaining about. The next failure was a malloc error with a HUGE malloc value ... So I gave up and built a PC with a standard Intel 32-bit processor, reloaded everything, and romcc appears to work just fine. It built a ROM image, at least.
I thought I might get lucky building on the Opteron system with the changes, but not today.
Thanks for your help.
Regards,
Craig
========================================================== Craig C. Forney email : cforney@opus.com Opus Innovations LLC www : http://www.opus.com ==========================================================