RCS file: RCS/hppa.s,v retrieving revision 1.1 diff -c -r1.1 hppa.s *** /tmp/,RCSt1a27769 Sat Dec 17 17:44:22 1994 --- hppa.s Sat Dec 17 17:44:09 1994 *************** *** 0 **** --- 1,259 ---- + ; This is the assembler source for Hewlett-Packard Company's PA-RISC + ; hardware. It is tested with HP-UX 9.X, and probably works for other + ; operating systems as well. + ; Assumes the HP-UX assembler, others may work as well. + ; Written by LaMont Jones . + .data + .import global_precision,data ; unsigned short + .import $global$,data + ; define a bunch of temp regs by name, so we can move them if we need to. + prec .reg %r31 + T1 .reg %r19 + T2 .reg %r20 + T3 .reg %r21 + T4 .reg %r22 + T5 .reg %arg3 + T6 .reg %arg2 + T7 .reg %ret0 + T8 .reg %ret1 + #define setc subi -1,%r0,%r0 + ; P_ADDC(unitptr r1, unitptr r2, boolean carry) + ; *r1 += *r2+carry; return final carry + ; the loop is unrolled to 8 words at a time, after we get precision to + ; a multiple of 8. + .code + .proc + .callinfo + P_ADDC + .enter + addil L%global_precision-$global$,%dp + ldh R%global_precision-$global$(%r1),prec + add,= %r0,%arg2,%r0 ; clear carry bit, check carry arg + setc + sh2addl prec,%arg0,%arg0 ; LSU+1 + extru,<> prec,31,3,T8 + b pa8s + sh2addl prec,%arg1,%arg1 ; LSU+1 + ; do the non multiple of 8 portion of precision + bb,>= T8,31,pa2 + dep %r0,31,3,prec + ldwm -4(%arg1),T2 + ldw -4(%arg0),T1 + addc T1,T2,T1 + addib,= -1,T8,pa8s + stwm T1,-4(%arg0) + pa2 ldw -4(%arg0),T1 + ldw -4(%arg1),T2 + ldw -8(%arg0),T3 + ldwm -8(%arg1),T4 + addc T1,T2,T1 + addc T3,T4,T3 + stw T1,-4(%arg0) + addib,> -2,T8,pa2 + stwm T3,-8(%arg0) + pa8s comb,=,n %r0,prec,pa_done + pa8 ldw -4(%arg0),T1 + ldw -4(%arg1),T2 + ldw -8(%arg0),T3 + ldw -8(%arg1),T4 + ldw -12(%arg0),T5 + ldw -12(%arg1),T6 + ldw -16(%arg0),T7 + ldw -16(%arg1),T8 + addc T1,T2,T1 + addc T3,T4,T3 + addc T5,T6,T5 + addc T7,T8,T7 + stw T1,-4(%arg0) + stw T3,-8(%arg0) + stw T5,-12(%arg0) + stw T7,-16(%arg0) + ldw -20(%arg0),T1 + ldw -20(%arg1),T2 + ldw -24(%arg0),T3 + ldw -24(%arg1),T4 + ldw -28(%arg0),T5 + ldw -28(%arg1),T6 + ldw -32(%arg0),T7 + ldwm -32(%arg1),T8 + addc T1,T2,T1 + addc T3,T4,T3 + addc T5,T6,T5 + addc T7,T8,T7 + stw T1,-20(%arg0) + stw T3,-24(%arg0) + stw T5,-28(%arg0) + addib,> -8,prec,pa8 + stwm T7,-32(%arg0) + pa_done addc %r0,%r0,%ret0 ; return final carry bit + .leave + .procend + .export P_ADDC,entry + ; P_SUBB(unitptr r1, unitptr r2, boolean borrow) + ; *r1 -= *r2+borrow; return final borrow + .code + .proc + .callinfo + P_SUBB + .enter + addil L%global_precision-$global$,%dp + ldh R%global_precision-$global$(%r1),prec + add,<> %r0,%arg2,%r0 ; set borrow bit, check carry arg + setc + sh2addl prec,%arg0,%arg0 ; LSU+1 + extru,<> prec,31,3,T8 + b ps8s + sh2addl prec,%arg1,%arg1 ; LSU+1 + bb,>= T8,31,ps2 + dep %r0,31,3,prec + ; do the non multiple of 8 portion of precision + ldwm -4(%arg1),T2 + ldw -4(%arg0),T1 + subb T1,T2,T1 + addib,= -1,T8,ps8s + stwm T1,-4(%arg0) + ps2 ldw -4(%arg0),T1 + ldw -4(%arg1),T2 + ldw -8(%arg0),T3 + ldwm -8(%arg1),T4 + subb T1,T2,T1 + subb T3,T4,T3 + stw T1,-4(%arg0) + addib,> -2,T8,ps2 + stwm T3,-8(%arg0) + ps8s comb,=,n %r0,prec,ps_done + ps8 ldw -4(%arg0),T1 + ldw -4(%arg1),T2 + ldw -8(%arg0),T3 + ldw -8(%arg1),T4 + ldw -12(%arg0),T5 + ldw -12(%arg1),T6 + ldw -16(%arg0),T7 + ldw -16(%arg1),T8 + subb T1,T2,T1 + subb T3,T4,T3 + subb T5,T6,T5 + subb T7,T8,T7 + stw T1,-4(%arg0) + stw T3,-8(%arg0) + stw T5,-12(%arg0) + stw T7,-16(%arg0) + ldw -20(%arg0),T1 + ldw -20(%arg1),T2 + ldw -24(%arg0),T3 + ldw -24(%arg1),T4 + ldw -28(%arg0),T5 + ldw -28(%arg1),T6 + ldw -32(%arg0),T7 + ldwm -32(%arg1),T8 + subb T1,T2,T1 + subb T3,T4,T3 + subb T5,T6,T5 + subb T7,T8,T7 + stw T1,-20(%arg0) + stw T3,-24(%arg0) + stw T5,-28(%arg0) + addib,> -8,prec,ps8 + stwm T7,-32(%arg0) + ps_done addc %r0,%r0,%ret0 ; return final carry bit + subi 1,%ret0,%ret0 ; invert sense + .leave + .procend + .export P_SUBB,entry + ; boolean P_ROTL(unitptr r1,boolean carry) + ; rotate *r1 left one bit, return MSB. carry becomes LSB. + .code + .proc + .callinfo + P_ROTL + .enter + addil L%global_precision-$global$,%dp + ldh R%global_precision-$global$(%r1),prec + add,= %r0,%arg1,%r0 ; clear carry bit, check carry arg + setc + extru,<> prec,31,3,T8 + b pr8s + sh2addl prec,%arg0,%arg0 ; LSU+1 + ; do the non multiple of 8 portion of precision + bb,>= T8,31,pr2 + dep %r0,31,3,prec + ldwm -4(%arg0),T1 + addc T1,T1,T1 + addib,= -1,T8,pr8s + stw T1,0(%arg0) + pr2 ldw -4(%arg0),T1 + ldw -8(%arg0),T2 + addc T1,T1,T1 + addc T2,T2,T2 + stw T1,-4(%arg0) + addib,> -2,T8,pr2 + stwm T2,-8(%arg0) + pr8s comb,=,n %r0,prec,pr_done + pr8 ldw -4(%arg0),T1 + ldw -8(%arg0),T2 + ldw -12(%arg0),T3 + ldw -16(%arg0),T4 + ldw -20(%arg0),T5 + ldw -24(%arg0),T6 + ldw -28(%arg0),T7 + ldw -32(%arg0),T8 + addc T1,T1,T1 + addc T2,T2,T2 + addc T3,T3,T3 + addc T4,T4,T4 + addc T5,T5,T5 + addc T6,T6,T6 + addc T7,T7,T7 + addc T8,T8,T8 + stw T1,-4(%arg0) + stw T2,-8(%arg0) + stw T3,-12(%arg0) + stw T4,-16(%arg0) + stw T5,-20(%arg0) + stw T6,-24(%arg0) + stw T7,-28(%arg0) + addib,> -8,prec,pr8 + stwm T8,-32(%arg0) + pr_done addc %r0,%r0,%ret0 ; return final carry bit + .leave + .procend + .export P_ROTL,entry + ; boolean P_CMP(unitptr r1,unitptr r2) + ; return -1, 0, or +1 if r1 <, ==, or > r2 + .code + .proc + .callinfo + P_CMP + .enter + addil L%global_precision-$global$,%dp + ldh R%global_precision-$global$(%r1),prec + ldws,ma 4(%arg0),T1 + bb,>= prec,31,pc2 + ldws,ma 4(%arg1),T2 + addi,> -1,prec,prec ; if (precision==1 && T1==T2) + comb,=,n %T1,T2,pc_eq ; return 0; + sub,<<= T1,T2,r0 ; if (T1>T2) return 1; + movib,tr,n 1,%ret0,pc_done + sub,>>= T1,T2,r0 ; if (T1T2) return 1; + movib,tr,n 1,%ret0,pc_done + ldws,ma 4(%arg1),T4 + sub,>>= T1,T2,r0 ; if (T1T4) return 1; + movib,tr,n 1,%ret0,pc_done + ldws,ma 4(%arg1),T2 + sub,>>= T3,T4,r0 ; if (T3,n -2,prec,pc2l + ldws,ma 4(%arg0),T3 + pc_eq copy %r0,%ret0 + pc_done .leave + .procend + .export P_CMP,entry + .end =================================================================== RCS file: RCS/platform.h,v retrieving revision 1.1 diff -c -r1.1 platform.h *** /tmp/,RCSt1a27769 Sat Dec 17 17:44:23 1994 --- platform.h Sat Dec 17 17:40:24 1994 *************** *** 197,202 **** --- 197,214 ---- #define PLATFORM_SPECIFIED #endif /* mc68000 */ + #if defined(__hppa) && defined(__hpux) + #define MERRITT + #define UNIT32 + #define mp_addc P_ADDC + #define mp_subb P_SUBB + #define mp_rotate_left P_ROTL + #define mp_compare P_CMP + #define unitfill0(r,ct) memset((void*)r,0,(ct)*sizeof(unit)) + #define mp_move(d,s) memcpy((void*)d,(void*)s,global_precision*sizeof(unit)) + #define PLATFORM_SPECIFIED + #endif + /* Add additional platforms here ... */ /**************** End of system specification ************************/ =================================================================== RCS file: RCS/makefile,v retrieving revision 1.9 diff -c -r1.9 makefile *** /tmp/,RCSt1a27769 Sat Dec 17 17:44:24 1994 --- makefile Sat Dec 17 17:38:31 1994 *************** *** 128,133 **** --- 128,138 ---- $(ASM) -o $@ _zmatch.s rm -f _zmatch.s + hppa.o: hppa.s + $(CPP) $(ASMDEF) hppa.s | grep -v '^# ' > _hppa.s + $(ASM) -o $@ _hppa.s + rm -f _hppa.s + sparc.o: sparc.S $(CPP) $(ASMDEF) sparc.S | grep -v '^# ' > _sparc.s $(ASM) -o $@ _sparc.s *************** *** 364,376 **** # HP series 700 pa-risc running HP/UX with HP's ANSI cc # UNTESTED for PGP 2.5 hpux-pa-ansi: ! $(MAKE) all CPP=/usr/lib/cpp \ CFLAGS="$(RSAINCDIR) -Aa +O3 +Obb5000 -D_HPUX_SOURCE -DHIGHFIRST \ -DUNIX -DPORTABLE -DUSE_SELECT -DIDEA32 -DMERRITT" # HP series 700/800 pa-risc running HP/UX 9.* with cc hpux9-pa-ansi: ! $(MAKE) all CPP=/lib/cpp \ CFLAGS="$(RSAINCDIR) -Ae -D_HPUX_SOURCE +O3 +Onolimit -DHIGHFIRST \ -DUNIX -DPORTABLE -DUSE_SELECT -DIDEA32 -DMERRITT" --- 369,381 ---- # HP series 700 pa-risc running HP/UX with HP's ANSI cc # UNTESTED for PGP 2.5 hpux-pa-ansi: ! $(MAKE) all CPP=/usr/lib/cpp OBJS_EXT=hppa.o \ CFLAGS="$(RSAINCDIR) -Aa +O3 +Obb5000 -D_HPUX_SOURCE -DHIGHFIRST \ -DUNIX -DPORTABLE -DUSE_SELECT -DIDEA32 -DMERRITT" # HP series 700/800 pa-risc running HP/UX 9.* with cc hpux9-pa-ansi: ! $(MAKE) all CPP=/lib/cpp OBJS_EXT=hppa.o \ CFLAGS="$(RSAINCDIR) -Ae -D_HPUX_SOURCE +O3 +Onolimit -DHIGHFIRST \ -DUNIX -DPORTABLE -DUSE_SELECT -DIDEA32 -DMERRITT" *************** *** 378,384 **** # HP series 700 pa-risc running HP/UX with gcc # UNTESTED for PGP 2.5 hpux-pa-gcc: ! $(MAKE) all CC=gcc LD=gcc \ CFLAGS="$(RSAINCDIR) -O2 -D_HPUX_SOURCE -DHIGHFIRST -DUNIX \ -DPORTABLE -DUSE_SELECT -DIDEA32 -DMERRITT" --- 383,389 ---- # HP series 700 pa-risc running HP/UX with gcc # UNTESTED for PGP 2.5 hpux-pa-gcc: ! $(MAKE) all CC=gcc LD=gcc OBJS_EXT=hppa.o \ CFLAGS="$(RSAINCDIR) -O2 -D_HPUX_SOURCE -DHIGHFIRST -DUNIX \ -DPORTABLE -DUSE_SELECT -DIDEA32 -DMERRITT" *************** *** 385,391 **** # HP series 700 pa-risc running HP/UX with HP's standard cc: use unproto # UNTESTED for PGP 2.5 hpux-pa: unproto/cpp ! $(MAKE) all \ CFLAGS="-tp,./unproto/cpp $(RSAINCDIR) -DHIGHFIRST \ -DUNIX -DPORTABLE -DUSE_SELECT -DIDEA32 -DMERRITT" --- 390,396 ---- # HP series 700 pa-risc running HP/UX with HP's standard cc: use unproto # UNTESTED for PGP 2.5 hpux-pa: unproto/cpp ! $(MAKE) all OBJS_EXT=hppa.o \ CFLAGS="-tp,./unproto/cpp $(RSAINCDIR) -DHIGHFIRST \ -DUNIX -DPORTABLE -DUSE_SELECT -DIDEA32 -DMERRITT"