| Ilya Zakharevich on Mon, 1 Apr 2002 16:54:45 -0500 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| GP/PARI 2.1.3: ix86 assembler for divll |
Try compiling this (e.g., append it to src/gp/gp.c)
void
ddummyy(ulong a)
{
(void)divll(a, 1000000000);
}
On ix86, this produces the following assembler:
.align 2
.globl _ddummyy
_ddummyy:
movl 4(%esp),%eax
movl _hiremainder,%edx
/APP
divl $1000000000
/NO_APP
movl %edx,_hiremainder
ret
which results in the following message from gas:
{stdin}: Assembler messages:
{stdin}:9343: Error: operands given don't match any known 386 instruction
In fact, this particular call to divll() may be a result of inlining
divis() into convi() (see src/kernel/none/mp.c). Such an inlining is
observed in Math::Pari on one particular flavor of Linux with one
particular version of gcc with one particular build of Perl ;-).
Recall that Math::Pari compiles PARI with the same flags as perl was
compiled.
Obviously, the flags restricting the arguments of the assembler for
divll() are not restrictive enough. Can somebody improve the
situation?
Yours,
Ilya