GMP MIPS64 divrem_1.asm bug?

Himlin, Bob bob.himlin at
Thu Sep 25 20:36:21 CEST 2008



I am running GMP on a Cavium Networks Octeon board, and trying to use
64-bit mode, e.g. mabi=64.  The software package was originally complied
and runs on the same hardware in 32-bit mode (mabi=n32).  I have run
into the following issue with mpn/mips64/divrem_1.asm, which uses ADDU
instead of DADDU to manipulate addresses.  The first example that
tripped me up (though there are others, I am sure), is the last few
lines of the following snip, which uses ADDU instead of DADDU to adjust
a passed-in pointer, inadvertently making it a 32-bit address, then
tries to access memory at that address causing a segmentation fault.


      sll   $2,$4,3
      addu  $2,$2,-8
      dli   $3,0x8000000000000000
      and   $3,$8,$3
      beq   $3,$0,.L177
      addu  $14,$14,$2
      beq   $7,$0,.L494
      dsll  $2,$8,1
      sll   $2,$7,3
      addu  $2,$2,$6
      ld    $13,-8($2)


I am interested to hear if there is a simple solution to this - how is
it that the library is used on MIPS64 with this error?  Do not all
MIPS64 behave the same way?


Thank you,

Bob Himlin

ViaSat, Inc.

bob.himlin at


-------------- next part --------------
An HTML attachment was scrubbed...

More information about the gmp-bugs mailing list