1/* 2 * Public domain. 3 */ 4 5#include <machine/asm.h> 6#include <libm-alias-double.h> 7 8#define PARMS 4 /* no space for saved regs */ 9#define DVDND PARMS 10#define DVSOR DVDND+8 11#define QUOP DVSOR+8 12 13 .text 14ENTRY (__remquo) 15 16 fldl DVSOR(%esp) 17 fldl DVDND(%esp) 181: fprem1 19 fstsw %ax 20 sahf 21 jp 1b 22 fstp %st(1) 23 /* Compute the congruent of the quotient. */ 24 movl %eax, %ecx 25 shrl $8, %eax 26 shrl $12, %ecx 27 andl $4, %ecx 28 andl $3, %eax 29 orl %eax, %ecx 30 leal (%ecx,%ecx,2),%ecx 31 movl $0xef2a60, %eax 32 shrl %cl, %eax 33 andl $7, %eax 34 movl QUOP(%esp), %ecx 35 movl DVDND+4(%esp), %edx 36 xorl DVSOR+4(%esp), %edx 37 testl $0x80000000, %edx 38 jz 1f 39 negl %eax 401: movl %eax, (%ecx) 41 42 ret 43END (__remquo) 44libm_alias_double (__remquo, remquo) 45