1221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#!/usr/bin/env perl 2221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 3221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# ==================================================================== 4221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL 5221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# project. The module is, however, dual licensed under OpenSSL and 6221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# CRYPTOGAMS licenses depending on where you obtain it. For further 7221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# details see http://www.openssl.org/~appro/cryptogams/. 8221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# ==================================================================== 9221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 10221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# sha1_block for Thumb. 11221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# 12221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# January 2007. 13221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# 14221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# The code does not present direct interest to OpenSSL, because of low 15221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# performance. Its purpose is to establish _size_ benchmark. Pretty 16221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# useless one I must say, because 30% or 88 bytes larger ARMv4 code 17221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# [avialable on demand] is almost _twice_ as fast. It should also be 18221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# noted that in-lining of .Lcommon and .Lrotate improves performance 19221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# by over 40%, while code increases by only 10% or 32 bytes. But once 20221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# again, the goal was to establish _size_ benchmark, not performance. 21221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 22221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$output=shift; 23221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromopen STDOUT,">$output"; 24221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 25221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$inline=0; 26221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#$cheat_on_binutils=1; 27221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 28221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$t0="r0"; 29221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$t1="r1"; 30221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$t2="r2"; 31221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$a="r3"; 32221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$b="r4"; 33221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$c="r5"; 34221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$d="r6"; 35221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$e="r7"; 36221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$K="r8"; # "upper" registers can be used in add/sub and mov insns 37221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$ctx="r9"; 38221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$inp="r10"; 39221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$len="r11"; 40221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$Xi="r12"; 41221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 42221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromsub common { 43221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom<<___; 44221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub $t0,#4 45221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $t1,[$t0] 46221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $e,$K @ E+=K_xx_xx 47221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lsl $t2,$a,#5 48221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $t2,$e 49221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lsr $e,$a,#27 50221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $t2,$e @ E+=ROR(A,27) 51221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $t2,$t1 @ E+=X[i] 52221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 53221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 54221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromsub rotate { 55221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom<<___; 56221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $e,$d @ E=D 57221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $d,$c @ D=C 58221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lsl $c,$b,#30 59221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lsr $b,$b,#2 60221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom orr $c,$b @ C=ROR(B,2) 61221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $b,$a @ B=A 62221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $a,$t2,$t1 @ A=E+F_xx_xx(B,C,D) 63221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 64221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 65221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 66221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromsub BODY_00_19 { 67221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=$inline?&common():"\tbl .Lcommon\n"; 68221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 69221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $t1,$c 70221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom eor $t1,$d 71221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom and $t1,$b 72221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom eor $t1,$d @ F_00_19(B,C,D) 73221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 74221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=$inline?&rotate():"\tbl .Lrotate\n"; 75221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 76221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 77221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromsub BODY_20_39 { 78221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=$inline?&common():"\tbl .Lcommon\n"; 79221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 80221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $t1,$b 81221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom eor $t1,$c 82221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom eor $t1,$d @ F_20_39(B,C,D) 83221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 84221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=$inline?&rotate():"\tbl .Lrotate\n"; 85221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 86221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 87221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromsub BODY_40_59 { 88221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=$inline?&common():"\tbl .Lcommon\n"; 89221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 90221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $t1,$b 91221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom and $t1,$c 92221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $e,$b 93221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom orr $e,$c 94221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom and $e,$d 95221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom orr $t1,$e @ F_40_59(B,C,D) 96221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 97221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=$inline?&rotate():"\tbl .Lrotate\n"; 98221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 99221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 100221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code=<<___; 101221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.text 102221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.code 16 103221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 104221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.global sha1_block_data_order 105221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type sha1_block_data_order,%function 106221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 107221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 2 108221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromsha1_block_data_order: 109221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 110221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromif ($cheat_on_binutils) { 111221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 112221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.code 32 113221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add r3,pc,#1 114221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bx r3 @ switch to Thumb ISA 115221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.code 16 116221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 117221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 118221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 119221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom push {r4-r7} 120221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov r3,r8 121221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov r4,r9 122221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov r5,r10 123221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov r6,r11 124221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov r7,r12 125221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom push {r3-r7,lr} 126221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lsl r2,#6 127221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $ctx,r0 @ save context 128221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $inp,r1 @ save inp 129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $len,r2 @ save len 130221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $len,$inp @ $len to point at inp end 131221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 132221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lloop: 133221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $Xi,sp 134221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $t2,sp 135221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub $t2,#16*4 @ [3] 136221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.LXload: 137221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldrb $a,[$t1,#0] @ $t1 is r1 and holds inp 138221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldrb $b,[$t1,#1] 139221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldrb $c,[$t1,#2] 140221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldrb $d,[$t1,#3] 141221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lsl $a,#24 142221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lsl $b,#16 143221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lsl $c,#8 144221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom orr $a,$b 145221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom orr $a,$c 146221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom orr $a,$d 147221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $t1,#4 148221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom push {$a} 149221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp sp,$t2 150221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bne .LXload @ [+14*16] 151221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 152221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $inp,$t1 @ update $inp 153221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub $t2,#32*4 154221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub $t2,#32*4 155221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $e,#31 @ [+4] 156221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.LXupdate: 157221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $a,[sp,#15*4] 158221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $b,[sp,#13*4] 159221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $c,[sp,#7*4] 160221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $d,[sp,#2*4] 161221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom eor $a,$b 162221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom eor $a,$c 163221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom eor $a,$d 164221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ror $a,$e 165221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom push {$a} 166221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp sp,$t2 167221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bne .LXupdate @ [+(11+1)*64] 168221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 169221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldmia $t0!,{$a,$b,$c,$d,$e} @ $t0 is r0 and holds ctx 170221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $t0,$Xi 171221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 172221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $t2,.LK_00_19 173221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $t1,$t0 174221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub $t1,#20*4 175221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $Xi,$t1 176221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $K,$t2 @ [+7+4] 177221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.L_00_19: 178221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 179221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom &BODY_00_19(); 180221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 181221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp $Xi,$t0 182221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bne .L_00_19 @ [+(2+9+4+2+8+2)*20] 183221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 184221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $t2,.LK_20_39 185221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $t1,$t0 186221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub $t1,#20*4 187221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $Xi,$t1 188221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $K,$t2 @ [+5] 189221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.L_20_39_or_60_79: 190221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 191221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom &BODY_20_39(); 192221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 193221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp $Xi,$t0 194221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bne .L_20_39_or_60_79 @ [+(2+9+3+2+8+2)*20*2] 195221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp sp,$t0 196221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom beq .Ldone @ [+2] 197221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 198221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $t2,.LK_40_59 199221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $t1,$t0 200221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub $t1,#20*4 201221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $Xi,$t1 202221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $K,$t2 @ [+5] 203221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.L_40_59: 204221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 205221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom &BODY_40_59(); 206221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 207221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp $Xi,$t0 208221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bne .L_40_59 @ [+(2+9+6+2+8+2)*20] 209221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 210221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $t2,.LK_60_79 211221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $Xi,sp 212221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $K,$t2 213221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom b .L_20_39_or_60_79 @ [+4] 214221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Ldone: 215221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $t0,$ctx 216221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $t1,[$t0,#0] 217221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $t2,[$t0,#4] 218221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $a,$t1 219221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $t1,[$t0,#8] 220221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $b,$t2 221221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $t2,[$t0,#12] 222221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $c,$t1 223221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ldr $t1,[$t0,#16] 224221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $d,$t2 225221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add $e,$t1 226221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stmia $t0!,{$a,$b,$c,$d,$e} @ [+20] 227221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 228221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom add sp,#80*4 @ deallocate stack frame 229221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $t0,$ctx @ restore ctx 230221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov $t1,$inp @ restore inp 231221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp $t1,$len 232221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom beq .Lexit 233221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom b .Lloop @ [+6] total 3212 cycles 234221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lexit: 235221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pop {r2-r7} 236221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov r8,r2 237221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov r9,r3 238221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov r10,r4 239221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov r11,r5 240221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov r12,r6 241221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov lr,r7 242221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pop {r4-r7} 243221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bx lr 244221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 2 245221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 246221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=".Lcommon:\n".&common()."\tmov pc,lr\n" if (!$inline); 247221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=".Lrotate:\n".&rotate()."\tmov pc,lr\n" if (!$inline); 248221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 249221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 2 250221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.LK_00_19: .word 0x5a827999 251221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.LK_20_39: .word 0x6ed9eba1 252221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.LK_40_59: .word 0x8f1bbcdc 253221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.LK_60_79: .word 0xca62c1d6 254221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size sha1_block_data_order,.-sha1_block_data_order 255221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.asciz "SHA1 block transform for Thumb, CRYPTOGAMS by <appro\@openssl.org>" 256221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 257221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 258221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromprint $code; 259221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromclose STDOUT; # enforce flush 260