📄 pa-risc2.s
字号:
.PROCEND ;-----------------------------------------------------------------------------;;void bn_sqr_comba4(BN_ULONG *r, BN_ULONG *a); arg0 = r_ptr; arg1 = a_ptr;bn_sqr_comba4 .proc .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE .EXPORT bn_sqr_comba4,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN .entry .align 64 STD %r3,0(%sp) ; save r3 STD %r4,8(%sp) ; save r4 STD %r5,16(%sp) ; save r5 STD %r6,24(%sp) ; save r6 ; ; Zero out carries ; COPY %r0,c1 COPY %r0,c2 COPY %r0,c3 LDO 128(%sp),%sp ; bump stack DEPDI,Z -1,32,33,high_mask ; Create Mask 0xffffffff80000000L DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 ; ; Load up all of the values we are going to use ; FLDD 0(a_ptr),a0 FLDD 8(a_ptr),a1 FLDD 16(a_ptr),a2 FLDD 24(a_ptr),a3 FLDD 32(a_ptr),a4 FLDD 40(a_ptr),a5 FLDD 48(a_ptr),a6 FLDD 56(a_ptr),a7 SQR_ADD_C a0L,a0R,c1,c2,c3 STD c1,0(r_ptr) ; r[0] = c1; COPY %r0,c1 SQR_ADD_C2 a1L,a1R,a0L,a0R,c2,c3,c1 STD c2,8(r_ptr) ; r[1] = c2; COPY %r0,c2 SQR_ADD_C a1L,a1R,c3,c1,c2 SQR_ADD_C2 a2L,a2R,a0L,a0R,c3,c1,c2 STD c3,16(r_ptr) ; r[2] = c3; COPY %r0,c3 SQR_ADD_C2 a3L,a3R,a0L,a0R,c1,c2,c3 SQR_ADD_C2 a2L,a2R,a1L,a1R,c1,c2,c3 STD c1,24(r_ptr) ; r[3] = c1; COPY %r0,c1 SQR_ADD_C a2L,a2R,c2,c3,c1 SQR_ADD_C2 a3L,a3R,a1L,a1R,c2,c3,c1 STD c2,32(r_ptr) ; r[4] = c2; COPY %r0,c2 SQR_ADD_C2 a3L,a3R,a2L,a2R,c3,c1,c2 STD c3,40(r_ptr) ; r[5] = c3; COPY %r0,c3 SQR_ADD_C a3L,a3R,c1,c2,c3 STD c1,48(r_ptr) ; r[6] = c1; STD c2,56(r_ptr) ; r[7] = c2; .EXIT LDD -104(%sp),%r6 ; restore r6 LDD -112(%sp),%r5 ; restore r5 LDD -120(%sp),%r4 ; restore r4 BVE (%rp) LDD,MB -128(%sp),%r3 .PROCEND ;---------------------------------------------------------------------------MUL_ADD_C .macro A0L,A0R,B0L,B0R,C1,C2,C3 XMPYU A0L,B0R,ftemp1 ; m1 = bl*ht FSTD ftemp1,-16(%sp) ; XMPYU A0R,B0L,ftemp2 ; m = bh*lt FSTD ftemp2,-8(%sp) ; XMPYU A0R,B0R,ftemp3 ; lt = bl*lt FSTD ftemp3,-32(%sp) XMPYU A0L,B0L,ftemp4 ; ht = bh*ht FSTD ftemp4,-24(%sp) ; LDD -8(%sp),m ; r21 = m LDD -16(%sp),m1 ; r19 = m1 ADD,L m,m1,m ; m+m1 DEPD,Z m,31,32,temp3 ; (m+m1<<32) LDD -24(%sp),ht ; r24 = ht CMPCLR,*>>= m,m1,%r0 ; if (m < m1) ADD,L ht,high_one,ht ; ht+=high_one EXTRD,U m,31,32,temp1 ; m >> 32 LDD -32(%sp),lt ; lt ADD,L ht,temp1,ht ; ht+= m>>32 ADD lt,temp3,lt ; lt = lt+m1 ADD,DC ht,%r0,ht ; ht++ ADD C1,lt,C1 ; c1=c1+lt ADD,DC ht,%r0,ht ; bump c3 if overflow,nullify otherwise ADD C2,ht,C2 ; c2 = c2 + ht ADD,DC C3,%r0,C3 ; add in carry (c3++).endm;;void bn_mul_comba8(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b); arg0 = r_ptr; arg1 = a_ptr; arg2 = b_ptr;bn_mul_comba8 .proc .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE .EXPORT bn_mul_comba8,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN .entry .align 64 STD %r3,0(%sp) ; save r3 STD %r4,8(%sp) ; save r4 STD %r5,16(%sp) ; save r5 STD %r6,24(%sp) ; save r6 FSTD %fr12,32(%sp) ; save r6 FSTD %fr13,40(%sp) ; save r7 ; ; Zero out carries ; COPY %r0,c1 COPY %r0,c2 COPY %r0,c3 LDO 128(%sp),%sp ; bump stack DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 ; ; Load up all of the values we are going to use ; FLDD 0(a_ptr),a0 FLDD 8(a_ptr),a1 FLDD 16(a_ptr),a2 FLDD 24(a_ptr),a3 FLDD 32(a_ptr),a4 FLDD 40(a_ptr),a5 FLDD 48(a_ptr),a6 FLDD 56(a_ptr),a7 FLDD 0(b_ptr),b0 FLDD 8(b_ptr),b1 FLDD 16(b_ptr),b2 FLDD 24(b_ptr),b3 FLDD 32(b_ptr),b4 FLDD 40(b_ptr),b5 FLDD 48(b_ptr),b6 FLDD 56(b_ptr),b7 MUL_ADD_C a0L,a0R,b0L,b0R,c1,c2,c3 STD c1,0(r_ptr) COPY %r0,c1 MUL_ADD_C a0L,a0R,b1L,b1R,c2,c3,c1 MUL_ADD_C a1L,a1R,b0L,b0R,c2,c3,c1 STD c2,8(r_ptr) COPY %r0,c2 MUL_ADD_C a2L,a2R,b0L,b0R,c3,c1,c2 MUL_ADD_C a1L,a1R,b1L,b1R,c3,c1,c2 MUL_ADD_C a0L,a0R,b2L,b2R,c3,c1,c2 STD c3,16(r_ptr) COPY %r0,c3 MUL_ADD_C a0L,a0R,b3L,b3R,c1,c2,c3 MUL_ADD_C a1L,a1R,b2L,b2R,c1,c2,c3 MUL_ADD_C a2L,a2R,b1L,b1R,c1,c2,c3 MUL_ADD_C a3L,a3R,b0L,b0R,c1,c2,c3 STD c1,24(r_ptr) COPY %r0,c1 MUL_ADD_C a4L,a4R,b0L,b0R,c2,c3,c1 MUL_ADD_C a3L,a3R,b1L,b1R,c2,c3,c1 MUL_ADD_C a2L,a2R,b2L,b2R,c2,c3,c1 MUL_ADD_C a1L,a1R,b3L,b3R,c2,c3,c1 MUL_ADD_C a0L,a0R,b4L,b4R,c2,c3,c1 STD c2,32(r_ptr) COPY %r0,c2 MUL_ADD_C a0L,a0R,b5L,b5R,c3,c1,c2 MUL_ADD_C a1L,a1R,b4L,b4R,c3,c1,c2 MUL_ADD_C a2L,a2R,b3L,b3R,c3,c1,c2 MUL_ADD_C a3L,a3R,b2L,b2R,c3,c1,c2 MUL_ADD_C a4L,a4R,b1L,b1R,c3,c1,c2 MUL_ADD_C a5L,a5R,b0L,b0R,c3,c1,c2 STD c3,40(r_ptr) COPY %r0,c3 MUL_ADD_C a6L,a6R,b0L,b0R,c1,c2,c3 MUL_ADD_C a5L,a5R,b1L,b1R,c1,c2,c3 MUL_ADD_C a4L,a4R,b2L,b2R,c1,c2,c3 MUL_ADD_C a3L,a3R,b3L,b3R,c1,c2,c3 MUL_ADD_C a2L,a2R,b4L,b4R,c1,c2,c3 MUL_ADD_C a1L,a1R,b5L,b5R,c1,c2,c3 MUL_ADD_C a0L,a0R,b6L,b6R,c1,c2,c3 STD c1,48(r_ptr) COPY %r0,c1 MUL_ADD_C a0L,a0R,b7L,b7R,c2,c3,c1 MUL_ADD_C a1L,a1R,b6L,b6R,c2,c3,c1 MUL_ADD_C a2L,a2R,b5L,b5R,c2,c3,c1 MUL_ADD_C a3L,a3R,b4L,b4R,c2,c3,c1 MUL_ADD_C a4L,a4R,b3L,b3R,c2,c3,c1 MUL_ADD_C a5L,a5R,b2L,b2R,c2,c3,c1 MUL_ADD_C a6L,a6R,b1L,b1R,c2,c3,c1 MUL_ADD_C a7L,a7R,b0L,b0R,c2,c3,c1 STD c2,56(r_ptr) COPY %r0,c2 MUL_ADD_C a7L,a7R,b1L,b1R,c3,c1,c2 MUL_ADD_C a6L,a6R,b2L,b2R,c3,c1,c2 MUL_ADD_C a5L,a5R,b3L,b3R,c3,c1,c2 MUL_ADD_C a4L,a4R,b4L,b4R,c3,c1,c2 MUL_ADD_C a3L,a3R,b5L,b5R,c3,c1,c2 MUL_ADD_C a2L,a2R,b6L,b6R,c3,c1,c2 MUL_ADD_C a1L,a1R,b7L,b7R,c3,c1,c2 STD c3,64(r_ptr) COPY %r0,c3 MUL_ADD_C a2L,a2R,b7L,b7R,c1,c2,c3 MUL_ADD_C a3L,a3R,b6L,b6R,c1,c2,c3 MUL_ADD_C a4L,a4R,b5L,b5R,c1,c2,c3 MUL_ADD_C a5L,a5R,b4L,b4R,c1,c2,c3 MUL_ADD_C a6L,a6R,b3L,b3R,c1,c2,c3 MUL_ADD_C a7L,a7R,b2L,b2R,c1,c2,c3 STD c1,72(r_ptr) COPY %r0,c1 MUL_ADD_C a7L,a7R,b3L,b3R,c2,c3,c1 MUL_ADD_C a6L,a6R,b4L,b4R,c2,c3,c1 MUL_ADD_C a5L,a5R,b5L,b5R,c2,c3,c1 MUL_ADD_C a4L,a4R,b6L,b6R,c2,c3,c1 MUL_ADD_C a3L,a3R,b7L,b7R,c2,c3,c1 STD c2,80(r_ptr) COPY %r0,c2 MUL_ADD_C a4L,a4R,b7L,b7R,c3,c1,c2 MUL_ADD_C a5L,a5R,b6L,b6R,c3,c1,c2 MUL_ADD_C a6L,a6R,b5L,b5R,c3,c1,c2 MUL_ADD_C a7L,a7R,b4L,b4R,c3,c1,c2 STD c3,88(r_ptr) COPY %r0,c3 MUL_ADD_C a7L,a7R,b5L,b5R,c1,c2,c3 MUL_ADD_C a6L,a6R,b6L,b6R,c1,c2,c3 MUL_ADD_C a5L,a5R,b7L,b7R,c1,c2,c3 STD c1,96(r_ptr) COPY %r0,c1 MUL_ADD_C a6L,a6R,b7L,b7R,c2,c3,c1 MUL_ADD_C a7L,a7R,b6L,b6R,c2,c3,c1 STD c2,104(r_ptr) COPY %r0,c2 MUL_ADD_C a7L,a7R,b7L,b7R,c3,c1,c2 STD c3,112(r_ptr) STD c1,120(r_ptr) .EXIT FLDD -88(%sp),%fr13 FLDD -96(%sp),%fr12 LDD -104(%sp),%r6 ; restore r6 LDD -112(%sp),%r5 ; restore r5 LDD -120(%sp),%r4 ; restore r4 BVE (%rp) LDD,MB -128(%sp),%r3 .PROCEND ;-----------------------------------------------------------------------------;;void bn_mul_comba4(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b); arg0 = r_ptr; arg1 = a_ptr; arg2 = b_ptr;bn_mul_comba4 .proc .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE .EXPORT bn_mul_comba4,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN .entry .align 64 STD %r3,0(%sp) ; save r3 STD %r4,8(%sp) ; save r4 STD %r5,16(%sp) ; save r5 STD %r6,24(%sp) ; save r6 FSTD %fr12,32(%sp) ; save r6 FSTD %fr13,40(%sp) ; save r7 ; ; Zero out carries ; COPY %r0,c1 COPY %r0,c2 COPY %r0,c3 LDO 128(%sp),%sp ; bump stack DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 ; ; Load up all of the values we are going to use ; FLDD 0(a_ptr),a0 FLDD 8(a_ptr),a1 FLDD 16(a_ptr),a2 FLDD 24(a_ptr),a3 FLDD 0(b_ptr),b0 FLDD 8(b_ptr),b1 FLDD 16(b_ptr),b2 FLDD 24(b_ptr),b3 MUL_ADD_C a0L,a0R,b0L,b0R,c1,c2,c3 STD c1,0(r_ptr) COPY %r0,c1 MUL_ADD_C a0L,a0R,b1L,b1R,c2,c3,c1 MUL_ADD_C a1L,a1R,b0L,b0R,c2,c3,c1 STD c2,8(r_ptr) COPY %r0,c2 MUL_ADD_C a2L,a2R,b0L,b0R,c3,c1,c2 MUL_ADD_C a1L,a1R,b1L,b1R,c3,c1,c2 MUL_ADD_C a0L,a0R,b2L,b2R,c3,c1,c2 STD c3,16(r_ptr) COPY %r0,c3 MUL_ADD_C a0L,a0R,b3L,b3R,c1,c2,c3 MUL_ADD_C a1L,a1R,b2L,b2R,c1,c2,c3 MUL_ADD_C a2L,a2R,b1L,b1R,c1,c2,c3 MUL_ADD_C a3L,a3R,b0L,b0R,c1,c2,c3 STD c1,24(r_ptr) COPY %r0,c1 MUL_ADD_C a3L,a3R,b1L,b1R,c2,c3,c1 MUL_ADD_C a2L,a2R,b2L,b2R,c2,c3,c1 MUL_ADD_C a1L,a1R,b3L,b3R,c2,c3,c1 STD c2,32(r_ptr) COPY %r0,c2 MUL_ADD_C a2L,a2R,b3L,b3R,c3,c1,c2 MUL_ADD_C a3L,a3R,b2L,b2R,c3,c1,c2 STD c3,40(r_ptr) COPY %r0,c3 MUL_ADD_C a3L,a3R,b3L,b3R,c1,c2,c3 STD c1,48(r_ptr) STD c2,56(r_ptr) .EXIT FLDD -88(%sp),%fr13 FLDD -96(%sp),%fr12 LDD -104(%sp),%r6 ; restore r6 LDD -112(%sp),%r5 ; restore r5 LDD -120(%sp),%r4 ; restore r4 BVE (%rp) LDD,MB -128(%sp),%r3 .PROCEND ;--- not PIC .SPACE $TEXT$;--- not PIC .SUBSPA $CODE$;--- not PIC .SPACE $PRIVATE$,SORT=16;--- not PIC .IMPORT $global$,DATA;--- not PIC .SPACE $TEXT$;--- not PIC .SUBSPA $CODE$;--- not PIC .SUBSPA $LIT$,ACCESS=0x2c;--- not PIC C$7;--- not PIC .ALIGN 8;--- not PIC .STRINGZ "Division would overflow (%d)\n" .END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -