From: utzoo!decvax!cca!jfw.mit-ccc@Mit-Mc@sri-unix Newsgroups: net.unix-wizards Title: pcc and uldiv for V7 PDP11 Article-I.D.: sri-unix.4293 Posted: Sun Nov 21 21:28:36 1982 Received: Mon Nov 22 04:49:42 1982 Date: 19 Nov 1982 16:12:41-EST uldiv and ulrem are generated by the PCC when it compiles something involving unsigned longs. They are analogous to ldiv and lrem. If you have floating point, I long ago wrote the routines to do what uldiv and ulrem are to do. /**** uldiv.c, by John Woods, October 9, 1982 ****/ unsigned long uldiv(a,b) unsigned long a,b; { return((unsigned long)((double)a / (double)b)); } unsigned long auldiv(a,b) unsigned long *a,b; { return(*a = ((unsigned long)((double)*a / (double)b))); } unsigned long ulmul(a,b) unsigned long a,b; { return((unsigned long)((double)a * (double)b)); } unsigned long aulmul(a,b) unsigned long *a,b; { return(*a = ((unsigned long)((double)*a * (double)b))); } /****************/ The following is a massaged assembly language version which avoids some of the overhead of C procedure discipline: (It was compiled -S by PCC and -O'd by me). /**** uldiv.s, by John Woods, October 9, 1982 ****/ .text .globl uldiv uldiv: / line 2, file "uldiv.c" setl movif 2.(sp),fr0 cfcc bpl 1f addf $050200,fr0 1: movif 6.(sp),fr1 cfcc bpl 1f addf $050200,fr1 1: divf fr1,fr0 movfi fr0,-(sp) seti mov (sp)+,r0 mov (sp)+,r1 rts pc .globl fltused .globl auldiv auldiv: / line 5, file "uldiv.c" mov 2.(sp),r1 mov (r1)+,r0 mov (r1),r1 mov r1,-(sp) mov r0,-(sp) setl movif (sp)+,fr0 cfcc bpl 1f addf $050200,fr0 1: movif 4.(sp),fr1 cfcc bpl 1f addf $050200,fr1 1: divf fr1,fr0 movfi fr0,-(sp) seti mov (sp)+,r0 mov (sp)+,r1 mov 2.(sp),r2 mov r0,(r2)+ mov r1,(r2) rts pc .globl fltused .globl ulmul ulmul: / line 8, file "uldiv.c" setl movif 2.(sp),fr0 seti cfcc bpl 1f addf $050200,fr0 1: setl movif 6.(sp),fr1 cfcc bpl 1f addf $050200,fr1 1: mulf fr1,fr0 movfi fr0,-(sp) seti mov (sp)+,r0 mov (sp)+,r1 rts pc .globl fltused .globl aulmul aulmul: / line 11, file "uldiv.c" mov 2.(sp),r1 mov (r1)+,r0 mov (r1),r1 mov r1,-(sp) mov r0,-(sp) setl movif (sp)+,fr0 cfcc bpl 1f addf $050200,fr0 1: setl movif 4.(sp),fr1 cfcc bpl 1f addf $050200,fr1 1: mulf fr1,fr0 movfi fr0,-(sp) seti mov (sp)+,r0 mov (sp)+,r1 mov 2.(sp),r2 mov r0,(r2)+ mov r1,(r2) rts pc .globl fltused .data