#include #include static int fd = -1; static unsigned long __attribute__((used)) udivmod4 (unsigned long x, unsigned long y, unsigned long *rp) { unsigned long q, mask, data[2]; if (fd < 0) { fd = open ("/tmp/div_data", O_CREAT | O_APPEND | O_WRONLY, 0660); fcntl (fd, F_SETFD, FD_CLOEXEC); } data[0] = x; data[1] = y; write (fd, data, sizeof(data)); q = 0; mask = 1; while ((long) y > 0 && y < x) y <<= 1, mask <<= 1; do { if (y <= x) { q += mask; x -= y; } mask >>= 1; y >>= 1; } while (mask); *rp = x; return q; } asm(" \n\ .align 4 \n\ .globl __divqu \n\ .type __divqu, @function \n\ __divqu: \n\ lda $sp, -46*8($sp) \n\ bsr $28, saveregs \n\ ldgp $29, 0($28) \n\ mov $24, $16 \n\ mov $25, $17 \n\ lda $18, 44*8($sp) \n\ bsr $26, udivmod4 !samegp \n\ mov $0, $27 \n\ bsr $28, loadregs \n\ lda $sp, 46*8($sp) \n\ ret $31, ($23), 1 \n\ \n\ .align 4 \n\ .globl __remqu \n\ .type __remqu, @function \n\ __remqu: \n\ lda $sp, -46*8($sp) \n\ bsr $28, saveregs \n\ ldgp $29, 0($28) \n\ mov $24, $16 \n\ mov $25, $17 \n\ lda $18, 44*8($sp) \n\ bsr $26, udivmod4 !samegp \n\ ldq $27, 44*8($sp) \n\ bsr $28, loadregs \n\ lda $sp, 46*8($sp) \n\ ret $31, ($23), 1 \n\ \n\ .align 4 \n\ .globl __divq \n\ .type __divq, @function \n\ __divq: \n\ lda $sp, -46*8($sp) \n\ bsr $28, saveregs \n\ ldgp $29, 0($28) \n\ negq $24, $16 \n\ negq $25, $17 \n\ cmovge $24, $24, $16 \n\ cmovge $25, $25, $17 \n\ lda $18, 44*8($sp) \n\ bsr $26, udivmod4 !samegp \n\ ldq $24, 17*8($sp) \n\ ldq $25, 18*8($sp) \n\ negq $0, $27 \n\ xor $24, $25, $28 \n\ cmovge $28, $0, $27 \n\ bsr $28, loadregs \n\ lda $sp, 46*8($sp) \n\ ret $31, ($23), 1 \n\ \n\ .align 4 \n\ .globl __remq \n\ .type __remq, @function \n\ __remq: \n\ lda $sp, -46*8($sp) \n\ bsr $28, saveregs \n\ ldgp $29, 0($28) \n\ negq $24, $16 \n\ negq $25, $17 \n\ cmovge $24, $24, $16 \n\ cmovge $25, $25, $17 \n\ lda $18, 44*8($sp) \n\ bsr $26, udivmod4 !samegp \n\ ldq $27, 44*8($sp) \n\ ldq $24, 17*8($sp) \n\ negq $27, $28 \n\ cmovlt $24, $28, $27 \n\ bsr $28, loadregs \n\ lda $sp, 46*8($sp) \n\ ret $31, ($23), 1 \n\ \n\ .align 4 \n\ saveregs: \n\ stq $0, 0*8($sp) \n\ stq $1, 1*8($sp) \n\ stq $2, 2*8($sp) \n\ stq $3, 3*8($sp) \n\ stq $4, 4*8($sp) \n\ stq $5, 5*8($sp) \n\ stq $6, 6*8($sp) \n\ stq $7, 7*8($sp) \n\ stq $8, 8*8($sp) \n\ stq $16, 9*8($sp) \n\ stq $17, 10*8($sp) \n\ stq $18, 11*8($sp) \n\ stq $19, 12*8($sp) \n\ stq $20, 13*8($sp) \n\ stq $21, 14*8($sp) \n\ stq $22, 15*8($sp) \n\ stq $23, 16*8($sp) \n\ stq $24, 17*8($sp) \n\ stq $25, 18*8($sp) \n\ stq $26, 19*8($sp) \n\ stq $29, 20*8($sp) \n\ stt $f0, 21*8($sp) \n\ stt $f1, 22*8($sp) \n\ stt $f10, 23*8($sp) \n\ stt $f11, 24*8($sp) \n\ stt $f12, 25*8($sp) \n\ stt $f13, 26*8($sp) \n\ stt $f14, 27*8($sp) \n\ stt $f15, 28*8($sp) \n\ stt $f16, 29*8($sp) \n\ stt $f17, 30*8($sp) \n\ stt $f18, 31*8($sp) \n\ stt $f19, 32*8($sp) \n\ stt $f20, 33*8($sp) \n\ stt $f21, 34*8($sp) \n\ stt $f22, 35*8($sp) \n\ stt $f23, 36*8($sp) \n\ stt $f24, 37*8($sp) \n\ stt $f25, 38*8($sp) \n\ stt $f26, 39*8($sp) \n\ stt $f27, 40*8($sp) \n\ stt $f28, 41*8($sp) \n\ stt $f29, 42*8($sp) \n\ stt $f30, 43*8($sp) \n\ ret $31, ($28), 0 \n\ \n\ .align 4 \n\ loadregs: \n\ ldq $0, 0*8($sp) \n\ ldq $1, 1*8($sp) \n\ ldq $2, 2*8($sp) \n\ ldq $3, 3*8($sp) \n\ ldq $4, 4*8($sp) \n\ ldq $5, 5*8($sp) \n\ ldq $6, 6*8($sp) \n\ ldq $7, 7*8($sp) \n\ ldq $8, 8*8($sp) \n\ ldq $16, 9*8($sp) \n\ ldq $17, 10*8($sp) \n\ ldq $18, 11*8($sp) \n\ ldq $19, 12*8($sp) \n\ ldq $20, 13*8($sp) \n\ ldq $21, 14*8($sp) \n\ ldq $22, 15*8($sp) \n\ ldq $23, 16*8($sp) \n\ ldq $24, 17*8($sp) \n\ ldq $25, 18*8($sp) \n\ ldq $26, 19*8($sp) \n\ ldq $29, 20*8($sp) \n\ ldt $f0, 21*8($sp) \n\ ldt $f1, 22*8($sp) \n\ ldt $f10, 23*8($sp) \n\ ldt $f11, 24*8($sp) \n\ ldt $f12, 25*8($sp) \n\ ldt $f13, 26*8($sp) \n\ ldt $f14, 27*8($sp) \n\ ldt $f15, 28*8($sp) \n\ ldt $f16, 29*8($sp) \n\ ldt $f17, 30*8($sp) \n\ ldt $f18, 31*8($sp) \n\ ldt $f19, 32*8($sp) \n\ ldt $f20, 33*8($sp) \n\ ldt $f21, 34*8($sp) \n\ ldt $f22, 35*8($sp) \n\ ldt $f23, 36*8($sp) \n\ ldt $f24, 37*8($sp) \n\ ldt $f25, 38*8($sp) \n\ ldt $f26, 39*8($sp) \n\ ldt $f27, 40*8($sp) \n\ ldt $f28, 41*8($sp) \n\ ldt $f29, 42*8($sp) \n\ ldt $f30, 43*8($sp) \n\ ret $31, ($28), 0 \n\ ");