Commit 43ce9cdd authored by Andy Polyakov's avatar Andy Polyakov
Browse files

PPC assembly pack: update from master branch.

Includes multiple updates: AES module to comply with more ABI
flavors, SHA512 for PPC32, .size directives.
parent 011f8989
Loading
Loading
Loading
Loading
+10 −13
Original line number Original line Diff line number Diff line
@@ -68,7 +68,7 @@ $key="r5";
$Tbl0="r3";
$Tbl0="r3";
$Tbl1="r6";
$Tbl1="r6";
$Tbl2="r7";
$Tbl2="r7";
$Tbl3="r2";
$Tbl3=$out;	# stay away from "r2"; $out is offloaded to stack


$s0="r8";
$s0="r8";
$s1="r9";
$s1="r9";
@@ -76,7 +76,7 @@ $s2="r10";
$s3="r11";
$s3="r11";


$t0="r12";
$t0="r12";
$t1="r13";
$t1="r0";	# stay away from "r13";
$t2="r14";
$t2="r14";
$t3="r15";
$t3="r15";


@@ -100,9 +100,6 @@ $acc13="r29";
$acc14="r30";
$acc14="r30";
$acc15="r31";
$acc15="r31";


# stay away from TLS pointer
if ($SIZE_T==8)	{ die if ($t1 ne "r13");  $t1="r0";		}
else		{ die if ($Tbl3 ne "r2"); $Tbl3=$t0; $t0="r0";	}
$mask80=$Tbl2;
$mask80=$Tbl2;
$mask1b=$Tbl3;
$mask1b=$Tbl3;


@@ -337,8 +334,7 @@ $code.=<<___;
	$STU	$sp,-$FRAME($sp)
	$STU	$sp,-$FRAME($sp)
	mflr	r0
	mflr	r0


	$PUSH	$toc,`$FRAME-$SIZE_T*20`($sp)
	$PUSH	$out,`$FRAME-$SIZE_T*19`($sp)
	$PUSH	r13,`$FRAME-$SIZE_T*19`($sp)
	$PUSH	r14,`$FRAME-$SIZE_T*18`($sp)
	$PUSH	r14,`$FRAME-$SIZE_T*18`($sp)
	$PUSH	r15,`$FRAME-$SIZE_T*17`($sp)
	$PUSH	r15,`$FRAME-$SIZE_T*17`($sp)
	$PUSH	r16,`$FRAME-$SIZE_T*16`($sp)
	$PUSH	r16,`$FRAME-$SIZE_T*16`($sp)
@@ -371,6 +367,7 @@ Lenc_unaligned_ok:
	lwz	$s3,12($inp)
	lwz	$s3,12($inp)
	bl	LAES_Te
	bl	LAES_Te
	bl	Lppc_AES_encrypt_compact
	bl	Lppc_AES_encrypt_compact
	$POP	$out,`$FRAME-$SIZE_T*19`($sp)
	stw	$s0,0($out)
	stw	$s0,0($out)
	stw	$s1,4($out)
	stw	$s1,4($out)
	stw	$s2,8($out)
	stw	$s2,8($out)
@@ -417,6 +414,7 @@ Lenc_xpage:


	bl	LAES_Te
	bl	LAES_Te
	bl	Lppc_AES_encrypt_compact
	bl	Lppc_AES_encrypt_compact
	$POP	$out,`$FRAME-$SIZE_T*19`($sp)


	extrwi	$acc00,$s0,8,0
	extrwi	$acc00,$s0,8,0
	extrwi	$acc01,$s0,8,8
	extrwi	$acc01,$s0,8,8
@@ -449,8 +447,6 @@ Lenc_xpage:


Lenc_done:
Lenc_done:
	$POP	r0,`$FRAME+$LRSAVE`($sp)
	$POP	r0,`$FRAME+$LRSAVE`($sp)
	$POP	$toc,`$FRAME-$SIZE_T*20`($sp)
	$POP	r13,`$FRAME-$SIZE_T*19`($sp)
	$POP	r14,`$FRAME-$SIZE_T*18`($sp)
	$POP	r14,`$FRAME-$SIZE_T*18`($sp)
	$POP	r15,`$FRAME-$SIZE_T*17`($sp)
	$POP	r15,`$FRAME-$SIZE_T*17`($sp)
	$POP	r16,`$FRAME-$SIZE_T*16`($sp)
	$POP	r16,`$FRAME-$SIZE_T*16`($sp)
@@ -475,6 +471,7 @@ Lenc_done:
	.long	0
	.long	0
	.byte	0,12,4,1,0x80,18,3,0
	.byte	0,12,4,1,0x80,18,3,0
	.long	0
	.long	0
.size	.AES_encrypt,.-.AES_encrypt


.align	5
.align	5
Lppc_AES_encrypt:
Lppc_AES_encrypt:
@@ -771,8 +768,7 @@ Lenc_compact_done:
	$STU	$sp,-$FRAME($sp)
	$STU	$sp,-$FRAME($sp)
	mflr	r0
	mflr	r0


	$PUSH	$toc,`$FRAME-$SIZE_T*20`($sp)
	$PUSH	$out,`$FRAME-$SIZE_T*19`($sp)
	$PUSH	r13,`$FRAME-$SIZE_T*19`($sp)
	$PUSH	r14,`$FRAME-$SIZE_T*18`($sp)
	$PUSH	r14,`$FRAME-$SIZE_T*18`($sp)
	$PUSH	r15,`$FRAME-$SIZE_T*17`($sp)
	$PUSH	r15,`$FRAME-$SIZE_T*17`($sp)
	$PUSH	r16,`$FRAME-$SIZE_T*16`($sp)
	$PUSH	r16,`$FRAME-$SIZE_T*16`($sp)
@@ -805,6 +801,7 @@ Ldec_unaligned_ok:
	lwz	$s3,12($inp)
	lwz	$s3,12($inp)
	bl	LAES_Td
	bl	LAES_Td
	bl	Lppc_AES_decrypt_compact
	bl	Lppc_AES_decrypt_compact
	$POP	$out,`$FRAME-$SIZE_T*19`($sp)
	stw	$s0,0($out)
	stw	$s0,0($out)
	stw	$s1,4($out)
	stw	$s1,4($out)
	stw	$s2,8($out)
	stw	$s2,8($out)
@@ -851,6 +848,7 @@ Ldec_xpage:


	bl	LAES_Td
	bl	LAES_Td
	bl	Lppc_AES_decrypt_compact
	bl	Lppc_AES_decrypt_compact
	$POP	$out,`$FRAME-$SIZE_T*19`($sp)


	extrwi	$acc00,$s0,8,0
	extrwi	$acc00,$s0,8,0
	extrwi	$acc01,$s0,8,8
	extrwi	$acc01,$s0,8,8
@@ -883,8 +881,6 @@ Ldec_xpage:


Ldec_done:
Ldec_done:
	$POP	r0,`$FRAME+$LRSAVE`($sp)
	$POP	r0,`$FRAME+$LRSAVE`($sp)
	$POP	$toc,`$FRAME-$SIZE_T*20`($sp)
	$POP	r13,`$FRAME-$SIZE_T*19`($sp)
	$POP	r14,`$FRAME-$SIZE_T*18`($sp)
	$POP	r14,`$FRAME-$SIZE_T*18`($sp)
	$POP	r15,`$FRAME-$SIZE_T*17`($sp)
	$POP	r15,`$FRAME-$SIZE_T*17`($sp)
	$POP	r16,`$FRAME-$SIZE_T*16`($sp)
	$POP	r16,`$FRAME-$SIZE_T*16`($sp)
@@ -909,6 +905,7 @@ Ldec_done:
	.long	0
	.long	0
	.byte	0,12,4,1,0x80,18,3,0
	.byte	0,12,4,1,0x80,18,3,0
	.long	0
	.long	0
.size	.AES_decrypt,.-.AES_decrypt


.align	5
.align	5
Lppc_AES_decrypt:
Lppc_AES_decrypt:
+1 −0
Original line number Original line Diff line number Diff line
@@ -325,6 +325,7 @@ Lcopy: ; copy or in-place refresh
	.long	0
	.long	0
	.byte	0,12,4,0,0x80,12,6,0
	.byte	0,12,4,0,0x80,12,6,0
	.long	0
	.long	0
.size	.bn_mul_mont_int,.-.bn_mul_mont_int


.asciz  "Montgomery Multiplication for PPC, CRYPTOGAMS by <appro\@openssl.org>"
.asciz  "Montgomery Multiplication for PPC, CRYPTOGAMS by <appro\@openssl.org>"
___
___
+10 −0
Original line number Original line Diff line number Diff line
@@ -392,6 +392,7 @@ $data=<<EOF;
	.long	0
	.long	0
	.byte	0,12,0x14,0,0,0,2,0
	.byte	0,12,0x14,0,0,0,2,0
	.long	0
	.long	0
.size	.bn_sqr_comba4,.-.bn_sqr_comba4


#
#
#	NOTE:	The following label name should be changed to
#	NOTE:	The following label name should be changed to
@@ -819,6 +820,7 @@ $data=<<EOF;
	.long	0
	.long	0
	.byte	0,12,0x14,0,0,0,2,0
	.byte	0,12,0x14,0,0,0,2,0
	.long	0
	.long	0
.size	.bn_sqr_comba8,.-.bn_sqr_comba8


#
#
#	NOTE:	The following label name should be changed to
#	NOTE:	The following label name should be changed to
@@ -972,6 +974,7 @@ $data=<<EOF;
	.long	0
	.long	0
	.byte	0,12,0x14,0,0,0,3,0
	.byte	0,12,0x14,0,0,0,3,0
	.long	0
	.long	0
.size	.bn_mul_comba4,.-.bn_mul_comba4


#
#
#	NOTE:	The following label name should be changed to
#	NOTE:	The following label name should be changed to
@@ -1510,6 +1513,7 @@ $data=<<EOF;
	.long	0
	.long	0
	.byte	0,12,0x14,0,0,0,3,0
	.byte	0,12,0x14,0,0,0,3,0
	.long	0
	.long	0
.size	.bn_mul_comba8,.-.bn_mul_comba8


#
#
#	NOTE:	The following label name should be changed to
#	NOTE:	The following label name should be changed to
@@ -1560,6 +1564,7 @@ Lppcasm_sub_adios:
	.long	0
	.long	0
	.byte	0,12,0x14,0,0,0,4,0
	.byte	0,12,0x14,0,0,0,4,0
	.long	0
	.long	0
.size	.bn_sub_words,.-.bn_sub_words


#
#
#	NOTE:	The following label name should be changed to
#	NOTE:	The following label name should be changed to
@@ -1605,6 +1610,7 @@ Lppcasm_add_adios:
	.long	0
	.long	0
	.byte	0,12,0x14,0,0,0,4,0
	.byte	0,12,0x14,0,0,0,4,0
	.long	0
	.long	0
.size	.bn_add_words,.-.bn_add_words


#
#
#	NOTE:	The following label name should be changed to
#	NOTE:	The following label name should be changed to
@@ -1720,6 +1726,7 @@ Lppcasm_div9:
	.long	0
	.long	0
	.byte	0,12,0x14,0,0,0,3,0
	.byte	0,12,0x14,0,0,0,3,0
	.long	0
	.long	0
.size	.bn_div_words,.-.bn_div_words


#
#
#	NOTE:	The following label name should be changed to
#	NOTE:	The following label name should be changed to
@@ -1761,6 +1768,7 @@ Lppcasm_sqr_adios:
	.long	0
	.long	0
	.byte	0,12,0x14,0,0,0,3,0
	.byte	0,12,0x14,0,0,0,3,0
	.long	0
	.long	0
.size	.bn_sqr_words,.-.bn_sqr_words


#
#
#	NOTE:	The following label name should be changed to
#	NOTE:	The following label name should be changed to
@@ -1866,6 +1874,7 @@ Lppcasm_mw_OVER:
	.long	0
	.long	0
	.byte	0,12,0x14,0,0,0,4,0
	.byte	0,12,0x14,0,0,0,4,0
	.long	0
	.long	0
.size	bn_mul_words,.-bn_mul_words


#
#
#	NOTE:	The following label name should be changed to
#	NOTE:	The following label name should be changed to
@@ -1991,6 +2000,7 @@ Lppcasm_maw_adios:
	.long	0
	.long	0
	.byte	0,12,0x14,0,0,0,4,0
	.byte	0,12,0x14,0,0,0,4,0
	.long	0
	.long	0
.size	.bn_mul_add_words,.-.bn_mul_add_words
	.align	4
	.align	4
EOF
EOF
$data =~ s/\`([^\`]*)\`/eval $1/gem;
$data =~ s/\`([^\`]*)\`/eval $1/gem;
+1 −0
Original line number Original line Diff line number Diff line
@@ -1079,6 +1079,7 @@ $code.=<<___;
	.long	0
	.long	0
	.byte	0,12,4,0,0x8c,10,6,0
	.byte	0,12,4,0,0x8c,10,6,0
	.long	0
	.long	0
.size	.$fname,.-.$fname


.asciz  "Montgomery Multiplication for PPC64, CRYPTOGAMS by <appro\@openssl.org>"
.asciz  "Montgomery Multiplication for PPC64, CRYPTOGAMS by <appro\@openssl.org>"
___
___
+5 −3
Original line number Original line Diff line number Diff line
@@ -37,7 +37,6 @@ my $globl = sub {
				$ret .= ".align	3\n";
				$ret .= ".align	3\n";
				$ret .= "$name:\n";
				$ret .= "$name:\n";
				$ret .= ".quad	.$name,.TOC.\@tocbase,0\n";
				$ret .= ".quad	.$name,.TOC.\@tocbase,0\n";
				$ret .= ".size	$name,24\n";
				$ret .= ".previous\n";
				$ret .= ".previous\n";


				$name = ".$name";
				$name = ".$name";
@@ -62,9 +61,12 @@ my $machine = sub {
    ".machine	$arch";
    ".machine	$arch";
};
};
my $size = sub {
my $size = sub {
    if ($flavour =~ /linux.*32/)
    if ($flavour =~ /linux/)
    {	shift;
    {	shift;
	".size	" . join(",",@_);
	my $name = shift; $name =~ s|^[\.\_]||;
	my $ret  = ".size	$name,.-".($flavour=~/64/?".":"").$name;
	$ret .= "\n.size	.$name,.-.$name" if ($flavour=~/64/);
	$ret;
    }
    }
    else
    else
    {	"";	}
    {	"";	}
Loading