Jeff Law <l...@redhat.com> writes: > On 01/07/2013 02:52 PM, Richard Sandiford wrote: > >>> 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. >> >> Right. That combination hasn't really been defined. What happens >> for plain doubles? Do you pass those in FPRs or GPRs? > IIRC we defined doubles as 32bits wide in our old port. We simply > didn't support 64bit wide doubles. I don't remember what mechanism we > used to make this happen.
Ah, yeah. >>> 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? >> >> Not sure, sorry. > IIRC I simply disabled muldi3_internal2 and I think we defined away > everything related to timode except register-register moves. AIUI the problem that Jürgen's hitting is that _muldi3.o in libgcc actually contains __multi3 on 64-bit targets, because LIBGCC2_UNITS_PER_WORD == 8. Presumably _mulsi3.o would then contain __muldi3 where needed, but that file doesn't exist. So he was trying to add it. If this worked in 4.3 then I assume something has changed in the last few years. Richard