⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppc64-mont.pl

📁 著名的开源密码源代码
💻 PL
📖 第 1 页 / 共 2 页
字号:
	 insrdi	$t0,$t2,16,16	 add	$t3,$t3,$carry	 srdi	$carry,$t3,16	fmadd	$T1a,$N0,$nc,$T1a	fmadd	$T1b,$N0,$nd,$T1b	 insrdi	$t0,$t3,16,0		; 0..63 bits	fmadd	$T2a,$N1,$nc,$T2a	fmadd	$T2b,$N1,$nd,$T2b	 add	$t4,$t4,$carry	fmadd	$T3a,$N2,$nc,$T3a	fmadd	$T3b,$N2,$nd,$T3b	 srdi	$carry,$t4,16	fmadd	$dota,$N3,$nc,$dota	fmadd	$dotb,$N3,$nd,$dotb	 add	$t5,$t5,$carry	 srdi	$carry,$t5,16	 insrdi	$t4,$t5,16,32	fctid	$T0a,$T0a	fctid	$T0b,$T0b	 add	$t6,$t6,$carry	fctid	$T1a,$T1a	fctid	$T1b,$T1b	 srdi	$carry,$t6,16	fctid	$T2a,$T2a	fctid	$T2b,$T2b	 insrdi	$t4,$t6,16,16	fctid	$T3a,$T3a	fctid	$T3b,$T3b	 add	$t7,$t7,$carry	 insrdi	$t4,$t7,16,0		; 64..127 bits	 srdi	$carry,$t7,16		; upper 33 bits	stfd	$T0a,`$FRAME+0`($sp)	stfd	$T0b,`$FRAME+8`($sp)	stfd	$T1a,`$FRAME+16`($sp)	stfd	$T1b,`$FRAME+24`($sp)	stfd	$T2a,`$FRAME+32`($sp)	stfd	$T2b,`$FRAME+40`($sp)	stfd	$T3a,`$FRAME+48`($sp)	stfd	$T3b,`$FRAME+56`($sp)	 std	$t0,8($tp)		; tp[j-1]	 stdu	$t4,16($tp)		; tp[j]	bdnz-	L1st	fctid	$dota,$dota	fctid	$dotb,$dotb	ld	$t0,`$FRAME+0`($sp)	ld	$t1,`$FRAME+8`($sp)	ld	$t2,`$FRAME+16`($sp)	ld	$t3,`$FRAME+24`($sp)	ld	$t4,`$FRAME+32`($sp)	ld	$t5,`$FRAME+40`($sp)	ld	$t6,`$FRAME+48`($sp)	ld	$t7,`$FRAME+56`($sp)	stfd	$dota,`$FRAME+64`($sp)	stfd	$dotb,`$FRAME+72`($sp)	add	$t0,$t0,$carry		; can not overflow	srdi	$carry,$t0,16	add	$t1,$t1,$carry	srdi	$carry,$t1,16	insrdi	$t0,$t1,16,32	add	$t2,$t2,$carry	srdi	$carry,$t2,16	insrdi	$t0,$t2,16,16	add	$t3,$t3,$carry	srdi	$carry,$t3,16	insrdi	$t0,$t3,16,0		; 0..63 bits	add	$t4,$t4,$carry	srdi	$carry,$t4,16	add	$t5,$t5,$carry	srdi	$carry,$t5,16	insrdi	$t4,$t5,16,32	add	$t6,$t6,$carry	srdi	$carry,$t6,16	insrdi	$t4,$t6,16,16	add	$t7,$t7,$carry	insrdi	$t4,$t7,16,0		; 64..127 bits	srdi	$carry,$t7,16		; upper 33 bits	ld	$t6,`$FRAME+64`($sp)	ld	$t7,`$FRAME+72`($sp)	std	$t0,8($tp)		; tp[j-1]	stdu	$t4,16($tp)		; tp[j]	add	$t6,$t6,$carry		; can not overflow	srdi	$carry,$t6,16	add	$t7,$t7,$carry	insrdi	$t6,$t7,48,0	srdi	$ovf,$t7,48	std	$t6,8($tp)		; tp[num-1]	slwi	$t7,$num,2	subf	$nap_d,$t7,$nap_d	; rewind pointer	li	$i,8			; i=1.align	5Louter:	ldx	$t3,$bp,$i	; bp[i]	ld	$t6,`$FRAME+$TRANSFER+8`($sp)	; tp[0]	mulld	$t7,$a0,$t3	; ap[0]*bp[i]	addi	$tp,$sp,`$FRAME+$TRANSFER`	add	$t7,$t7,$t6	; ap[0]*bp[i]+tp[0]	li	$carry,0	mulld	$t7,$t7,$n0	; tp[0]*n0	mtctr	$j	; transfer bp[i] to FPU as 4x16-bit values	extrdi	$t0,$t3,16,48	extrdi	$t1,$t3,16,32	extrdi	$t2,$t3,16,16	extrdi	$t3,$t3,16,0	std	$t0,`$FRAME+0`($sp)	std	$t1,`$FRAME+8`($sp)	std	$t2,`$FRAME+16`($sp)	std	$t3,`$FRAME+24`($sp)	; transfer (ap[0]*bp[i]+tp[0])*n0 to FPU as 4x16-bit values	extrdi	$t4,$t7,16,48	extrdi	$t5,$t7,16,32	extrdi	$t6,$t7,16,16	extrdi	$t7,$t7,16,0	std	$t4,`$FRAME+32`($sp)	std	$t5,`$FRAME+40`($sp)	std	$t6,`$FRAME+48`($sp)	std	$t7,`$FRAME+56`($sp)	lfd	$A0,8($nap_d)		; load a[j] in double format	lfd	$A1,16($nap_d)	lfd	$A2,24($nap_d)		; load a[j+1] in double format	lfd	$A3,32($nap_d)	lfd	$N0,40($nap_d)		; load n[j] in double format	lfd	$N1,48($nap_d)	lfd	$N2,56($nap_d)		; load n[j+1] in double format	lfdu	$N3,64($nap_d)	lfd	$ba,`$FRAME+0`($sp)	lfd	$bb,`$FRAME+8`($sp)	lfd	$bc,`$FRAME+16`($sp)	lfd	$bd,`$FRAME+24`($sp)	lfd	$na,`$FRAME+32`($sp)	lfd	$nb,`$FRAME+40`($sp)	lfd	$nc,`$FRAME+48`($sp)	lfd	$nd,`$FRAME+56`($sp)	fcfid	$ba,$ba	fcfid	$bb,$bb	fcfid	$bc,$bc	fcfid	$bd,$bd	fcfid	$na,$na	fcfid	$nb,$nb	fcfid	$nc,$nc	fcfid	$nd,$nd	fmul	$T1a,$A1,$ba	fmul	$T1b,$A1,$bb	fmul	$T2a,$A2,$ba	fmul	$T2b,$A2,$bb	fmul	$T3a,$A3,$ba	fmul	$T3b,$A3,$bb	fmul	$T0a,$A0,$ba	fmul	$T0b,$A0,$bb	fmadd	$T1a,$A0,$bc,$T1a	fmadd	$T1b,$A0,$bd,$T1b	fmadd	$T2a,$A1,$bc,$T2a	fmadd	$T2b,$A1,$bd,$T2b	fmadd	$T3a,$A2,$bc,$T3a	fmadd	$T3b,$A2,$bd,$T3b	fmul	$dota,$A3,$bc	fmul	$dotb,$A3,$bd	fmadd	$T1a,$N1,$na,$T1a	fmadd	$T1b,$N1,$nb,$T1b	 lfd	$A0,8($nap_d)		; load a[j] in double format	 lfd	$A1,16($nap_d)	fmadd	$T2a,$N2,$na,$T2a	fmadd	$T2b,$N2,$nb,$T2b	 lfd	$A2,24($nap_d)		; load a[j+1] in double format	 lfd	$A3,32($nap_d)	fmadd	$T3a,$N3,$na,$T3a	fmadd	$T3b,$N3,$nb,$T3b	fmadd	$T0a,$N0,$na,$T0a	fmadd	$T0b,$N0,$nb,$T0b	fmadd	$T1a,$N0,$nc,$T1a	fmadd	$T1b,$N0,$nd,$T1b	fmadd	$T2a,$N1,$nc,$T2a	fmadd	$T2b,$N1,$nd,$T2b	fmadd	$T3a,$N2,$nc,$T3a	fmadd	$T3b,$N2,$nd,$T3b	fmadd	$dota,$N3,$nc,$dota	fmadd	$dotb,$N3,$nd,$dotb	fctid	$T0a,$T0a	fctid	$T0b,$T0b	fctid	$T1a,$T1a	fctid	$T1b,$T1b	fctid	$T2a,$T2a	fctid	$T2b,$T2b	fctid	$T3a,$T3a	fctid	$T3b,$T3b	stfd	$T0a,`$FRAME+0`($sp)	stfd	$T0b,`$FRAME+8`($sp)	stfd	$T1a,`$FRAME+16`($sp)	stfd	$T1b,`$FRAME+24`($sp)	stfd	$T2a,`$FRAME+32`($sp)	stfd	$T2b,`$FRAME+40`($sp)	stfd	$T3a,`$FRAME+48`($sp)	stfd	$T3b,`$FRAME+56`($sp).align	5Linner:	fmul	$T1a,$A1,$ba	fmul	$T1b,$A1,$bb	fmul	$T2a,$A2,$ba	fmul	$T2b,$A2,$bb	lfd	$N0,40($nap_d)		; load n[j] in double format	lfd	$N1,48($nap_d)	fmul	$T3a,$A3,$ba	fmul	$T3b,$A3,$bb	fmadd	$T0a,$A0,$ba,$dota	fmadd	$T0b,$A0,$bb,$dotb	lfd	$N2,56($nap_d)		; load n[j+1] in double format	lfdu	$N3,64($nap_d)	fmadd	$T1a,$A0,$bc,$T1a	fmadd	$T1b,$A0,$bd,$T1b	fmadd	$T2a,$A1,$bc,$T2a	fmadd	$T2b,$A1,$bd,$T2b	 lfd	$A0,8($nap_d)		; load a[j] in double format	 lfd	$A1,16($nap_d)	fmadd	$T3a,$A2,$bc,$T3a	fmadd	$T3b,$A2,$bd,$T3b	fmul	$dota,$A3,$bc	fmul	$dotb,$A3,$bd	 lfd	$A2,24($nap_d)		; load a[j+1] in double format	 lfd	$A3,32($nap_d)	fmadd	$T1a,$N1,$na,$T1a	fmadd	$T1b,$N1,$nb,$T1b	 ld	$t0,`$FRAME+0`($sp)	 ld	$t1,`$FRAME+8`($sp)	fmadd	$T2a,$N2,$na,$T2a	fmadd	$T2b,$N2,$nb,$T2b	 ld	$t2,`$FRAME+16`($sp)	 ld	$t3,`$FRAME+24`($sp)	fmadd	$T3a,$N3,$na,$T3a	fmadd	$T3b,$N3,$nb,$T3b	 add	$t0,$t0,$carry		; can not overflow	 ld	$t4,`$FRAME+32`($sp)	 ld	$t5,`$FRAME+40`($sp)	fmadd	$T0a,$N0,$na,$T0a	fmadd	$T0b,$N0,$nb,$T0b	 srdi	$carry,$t0,16	 add	$t1,$t1,$carry	 srdi	$carry,$t1,16	 ld	$t6,`$FRAME+48`($sp)	 ld	$t7,`$FRAME+56`($sp)	fmadd	$T1a,$N0,$nc,$T1a	fmadd	$T1b,$N0,$nd,$T1b	 insrdi	$t0,$t1,16,32	 ld	$t1,8($tp)		; tp[j]	fmadd	$T2a,$N1,$nc,$T2a	fmadd	$T2b,$N1,$nd,$T2b	 add	$t2,$t2,$carry	fmadd	$T3a,$N2,$nc,$T3a	fmadd	$T3b,$N2,$nd,$T3b	 srdi	$carry,$t2,16	 insrdi	$t0,$t2,16,16	fmadd	$dota,$N3,$nc,$dota	fmadd	$dotb,$N3,$nd,$dotb	 add	$t3,$t3,$carry	 ldu	$t2,16($tp)		; tp[j+1]	 srdi	$carry,$t3,16	 insrdi	$t0,$t3,16,0		; 0..63 bits	 add	$t4,$t4,$carry	fctid	$T0a,$T0a	fctid	$T0b,$T0b	 srdi	$carry,$t4,16	fctid	$T1a,$T1a	fctid	$T1b,$T1b	 add	$t5,$t5,$carry	fctid	$T2a,$T2a	fctid	$T2b,$T2b	 srdi	$carry,$t5,16	 insrdi	$t4,$t5,16,32	fctid	$T3a,$T3a	fctid	$T3b,$T3b	 add	$t6,$t6,$carry	 srdi	$carry,$t6,16	 insrdi	$t4,$t6,16,16	stfd	$T0a,`$FRAME+0`($sp)	stfd	$T0b,`$FRAME+8`($sp)	 add	$t7,$t7,$carry	 addc	$t3,$t0,$t1	stfd	$T1a,`$FRAME+16`($sp)	stfd	$T1b,`$FRAME+24`($sp)	 insrdi	$t4,$t7,16,0		; 64..127 bits	 srdi	$carry,$t7,16		; upper 33 bits	stfd	$T2a,`$FRAME+32`($sp)	stfd	$T2b,`$FRAME+40`($sp)	 adde	$t5,$t4,$t2	stfd	$T3a,`$FRAME+48`($sp)	stfd	$T3b,`$FRAME+56`($sp)	 addze	$carry,$carry	 std	$t3,-16($tp)		; tp[j-1]	 std	$t5,-8($tp)		; tp[j]	bdnz-	Linner	fctid	$dota,$dota	fctid	$dotb,$dotb	ld	$t0,`$FRAME+0`($sp)	ld	$t1,`$FRAME+8`($sp)	ld	$t2,`$FRAME+16`($sp)	ld	$t3,`$FRAME+24`($sp)	ld	$t4,`$FRAME+32`($sp)	ld	$t5,`$FRAME+40`($sp)	ld	$t6,`$FRAME+48`($sp)	ld	$t7,`$FRAME+56`($sp)	stfd	$dota,`$FRAME+64`($sp)	stfd	$dotb,`$FRAME+72`($sp)	add	$t0,$t0,$carry		; can not overflow	srdi	$carry,$t0,16	add	$t1,$t1,$carry	srdi	$carry,$t1,16	insrdi	$t0,$t1,16,32	add	$t2,$t2,$carry	ld	$t1,8($tp)		; tp[j]	srdi	$carry,$t2,16	insrdi	$t0,$t2,16,16	add	$t3,$t3,$carry	ldu	$t2,16($tp)		; tp[j+1]	srdi	$carry,$t3,16	insrdi	$t0,$t3,16,0		; 0..63 bits	add	$t4,$t4,$carry	srdi	$carry,$t4,16	add	$t5,$t5,$carry	srdi	$carry,$t5,16	insrdi	$t4,$t5,16,32	add	$t6,$t6,$carry	srdi	$carry,$t6,16	insrdi	$t4,$t6,16,16	add	$t7,$t7,$carry	insrdi	$t4,$t7,16,0		; 64..127 bits	srdi	$carry,$t7,16		; upper 33 bits	ld	$t6,`$FRAME+64`($sp)	ld	$t7,`$FRAME+72`($sp)	addc	$t3,$t0,$t1	adde	$t5,$t4,$t2	addze	$carry,$carry	std	$t3,-16($tp)		; tp[j-1]	std	$t5,-8($tp)		; tp[j]	add	$carry,$carry,$ovf	; comsume upmost overflow	add	$t6,$t6,$carry		; can not overflow	srdi	$carry,$t6,16	add	$t7,$t7,$carry	insrdi	$t6,$t7,48,0	srdi	$ovf,$t7,48	std	$t6,0($tp)		; tp[num-1]	slwi	$t7,$num,2	addi	$i,$i,8	subf	$nap_d,$t7,$nap_d	; rewind pointer	cmpw	$i,$num	blt-	Louter	subf	$np,$num,$np	; rewind np	addi	$j,$j,1		; restore counter	subfc	$i,$i,$i	; j=0 and "clear" XER[CA]	addi	$tp,$sp,`$FRAME+$TRANSFER+8`	addi	$t4,$sp,`$FRAME+$TRANSFER+16`	addi	$t5,$np,8	addi	$t6,$rp,8	mtctr	$j.align	4Lsub:	ldx	$t0,$tp,$i	ldx	$t1,$np,$i	ldx	$t2,$t4,$i	ldx	$t3,$t5,$i	subfe	$t0,$t1,$t0	; tp[j]-np[j]	subfe	$t2,$t3,$t2	; tp[j+1]-np[j+1]	stdx	$t0,$rp,$i	stdx	$t2,$t6,$i	addi	$i,$i,16	bdnz-	Lsub	li	$i,0	subfe	$ovf,$i,$ovf	; handle upmost overflow bit	and	$ap,$tp,$ovf	andc	$np,$rp,$ovf	or	$ap,$ap,$np	; ap=borrow?tp:rp	addi	$t7,$ap,8	mtctr	$j.align	4Lcopy:				; copy or in-place refresh	ldx	$t0,$ap,$i	ldx	$t1,$t7,$i	std	$i,8($nap_d)	; zap nap_d	std	$i,16($nap_d)	std	$i,24($nap_d)	std	$i,32($nap_d)	std	$i,40($nap_d)	std	$i,48($nap_d)	std	$i,56($nap_d)	stdu	$i,64($nap_d)	stdx	$t0,$rp,$i	stdx	$t1,$t6,$i	stdx	$i,$tp,$i	; zap tp at once	stdx	$i,$t4,$i	addi	$i,$i,16	bdnz-	Lcopy	$POP	r14,`2*$SIZE_T`($sp)	$POP	r15,`3*$SIZE_T`($sp)	$POP	r16,`4*$SIZE_T`($sp)	$POP	r17,`5*$SIZE_T`($sp)	$POP	r18,`6*$SIZE_T`($sp)	$POP	r19,`7*$SIZE_T`($sp)	$POP	r20,`8*$SIZE_T`($sp)	$POP	r21,`9*$SIZE_T`($sp)	$POP	r22,`10*$SIZE_T`($sp)	$POP	r23,`11*$SIZE_T`($sp)	lfd	f14,`12*$SIZE_T+0`($sp)	lfd	f15,`12*$SIZE_T+8`($sp)	lfd	f16,`12*$SIZE_T+16`($sp)	lfd	f17,`12*$SIZE_T+24`($sp)	lfd	f18,`12*$SIZE_T+32`($sp)	lfd	f19,`12*$SIZE_T+40`($sp)	lfd	f20,`12*$SIZE_T+48`($sp)	lfd	f21,`12*$SIZE_T+56`($sp)	lfd	f22,`12*$SIZE_T+64`($sp)	lfd	f23,`12*$SIZE_T+72`($sp)	lfd	f24,`12*$SIZE_T+80`($sp)	lfd	f25,`12*$SIZE_T+88`($sp)	$POP	$sp,0($sp)	li	r3,1	; signal "handled"	blr	.long	0.asciz  "Montgomery Multiplication for PPC64, CRYPTOGAMS by <appro\@fy.chalmers.se>"___$code =~ s/\`([^\`]*)\`/eval $1/gem;print $code;close STDOUT;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -