div.pl   [plain text]


#!/usr/local/bin/perl

sub bn_div64
	{
	local($data)=<<'EOF';
 #
 # What follows was taken directly from the C compiler with a few
 # hacks to redo the lables.
 #
.text
        .set noreorder
	.set volatile
	.align 3
	.globl bn_div64
	.ent bn_div64
bn_div64:
	ldgp $29,0($27)
bn_div64..ng:
	lda $30,-48($30)
	.frame $30,48,$26,0
	stq $26,0($30)
	stq $9,8($30)
	stq $10,16($30)
	stq $11,24($30)
	stq $12,32($30)
	stq $13,40($30)
	.mask 0x4003e00,-48
	.prologue 1
	bis $16,$16,$9
	bis $17,$17,$10
	bis $18,$18,$11
	bis $31,$31,$13
	bis $31,2,$12
	bne $11,$9119
	lda $0,-1
	br $31,$9136
	.align 4
$9119:
	bis $11,$11,$16
	jsr $26,BN_num_bits_word
	ldgp $29,0($26)
	subq $0,64,$1
	beq $1,$9120
	bis $31,1,$1
	sll $1,$0,$1
	cmpule $9,$1,$1
	bne $1,$9120
 #	lda $16,_IO_stderr_
 #	lda $17,$C32
 #	bis $0,$0,$18
 #	jsr $26,fprintf
 #	ldgp $29,0($26)
	jsr $26,abort
	ldgp $29,0($26)
	.align 4
$9120:
	bis $31,64,$3
	cmpult $9,$11,$2
	subq $3,$0,$1
	addl $1,$31,$0
	subq $9,$11,$1
	cmoveq $2,$1,$9
	beq $0,$9122
	zapnot $0,15,$2
	subq $3,$0,$1
	sll $11,$2,$11
	sll $9,$2,$3
	srl $10,$1,$1
	sll $10,$2,$10
	bis $3,$1,$9
$9122:
	srl $11,32,$5
	zapnot $11,15,$6
	lda $7,-1
	.align 5
$9123:
	srl $9,32,$1
	subq $1,$5,$1
	bne $1,$9126
	zapnot $7,15,$27
	br $31,$9127
	.align 4
$9126:
	bis $9,$9,$24
	bis $5,$5,$25
	divqu $24,$25,$27
$9127:
	srl $10,32,$4
	.align 5
$9128:
	mulq $27,$5,$1
	subq $9,$1,$3
	zapnot $3,240,$1
	bne $1,$9129
	mulq $6,$27,$2
	sll $3,32,$1
	addq $1,$4,$1
	cmpule $2,$1,$2
	bne $2,$9129
	subq $27,1,$27
	br $31,$9128
	.align 4
$9129:
	mulq $27,$6,$1
	mulq $27,$5,$4
	srl $1,32,$3
	sll $1,32,$1
	addq $4,$3,$4
	cmpult $10,$1,$2
	subq $10,$1,$10
	addq $2,$4,$2
	cmpult $9,$2,$1
	bis $2,$2,$4
	beq $1,$9134
	addq $9,$11,$9
	subq $27,1,$27
$9134:
	subl $12,1,$12
	subq $9,$4,$9
	beq $12,$9124
	sll $27,32,$13
	sll $9,32,$2
	srl $10,32,$1
	sll $10,32,$10
	bis $2,$1,$9
	br $31,$9123
	.align 4
$9124:
	bis $13,$27,$0
$9136:
	ldq $26,0($30)
	ldq $9,8($30)
	ldq $10,16($30)
	ldq $11,24($30)
	ldq $12,32($30)
	ldq $13,40($30)
	addq $30,48,$30
	ret $31,($26),1
	.end bn_div64
EOF
	&asm_add($data);
	}

1;