Jeff Law <l...@redhat.com> writes:
> On 01/06/2013 03:56 PM, "Jürgen Urban" wrote:
>> Hello,
>>
>> I created a patch from scratch to support MIPS r5900 used in the
>> Playstation 2, but I have some problems with it. The attached patch
>> only works with the latest binutils from CVS. The binutils forces the
>> compiler to use r5900 compatible instructions which is good to find
>> errors in the GCC. Later I will try to submit a patch here, but first
>> I need some help. The MIPS r5900 supports 32 bit, 64 bit and 128 bit
>> data accesses on a 32 Bit address bus. It supports instructions from
>> MIPS ISA I, II, III, IV and has additional instructions, but none of
>> them are complete. On each ISA level there are instructions missing.
>> It can run MIPS ABI o32, n32 and o64 code, as long as unsupported
>> instructions are not used or emulated by the operating system and the
>> addresses keep in the first 32 bit. My patch adds support for r5900
>> and tries to disable the following unsupported instructions: ll, sc,
>> dmult, ddiv, cvt.w.s, 64 bit FPU instructions. ll and sc is disabled
>> with "-mno-llsc" and works. cvt.w.s is replaced by trunc.w.s. This
>> seems to work. I disabled 64 bit FPU instructions by "-msoft-float".
>> This works, but using "-msingle-float" fails. This would be the
>> better configuration. There are still 64 bit FPU instructions used
>> (e.g. "dmfc1   $2,$f0" when using "long double" multiplication). So
>> "-msingle-float" doesn't seem to work on generic mips64-linux-gnu. I
>> tried to disable dmult and ddiv (see mips.md). Disabling worked, but
>> now muldi3 calls itself in libgcc2. I thought this should work,
>> because I got this working with GCC 4.3, but the latest GCC version
>> is a problem. multi3 is calling muldi3, so that muldi3 should be able
>> to use mulsi3, because it is the same C code in libgcc2. Can someone
>> get me some hints or comments? How can this be debugged?
>>
>> Does someone know how to enable TImode in MIPS ABI o32 (this doesn't
>> need to use the 128 bit instructions at the moment)? There is some
>> old code for the Playstation 2 which needs this. I know that TImode
>> is supported in ABI n32, but some code uses also the 32 bit FPU and
>> FPU registers are not available with "-msoft-float" in inline
>> assembler.
>>
>> What is the best way to change the alignment to 128 bit for all
>> structures and stack in any MIPS ABI? Much old code for the
>> Playstation 2 expects this.
> Hmm, I did a R5900 port back in the late 90s...  Did that port never get 
> contributed (yes, my memory is that bad these days)

I remember there was talk in the early 2000s of contributing it, but we
never had time.  I think the MIPS copro support was from the r5900 port --
so it's effectively dead at the moment -- and the MODE_HAS_* stuff was
from a refresh of it.  Both of those made their way in, but I think that
was about it.

Richard

Reply via email to