12c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org#!/usr/bin/env perl 22c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# 32c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# ==================================================================== 42c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL 52c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# project. The module is, however, dual licensed under OpenSSL and 62c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# CRYPTOGAMS licenses depending on where you obtain it. For further 72c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# details see http://www.openssl.org/~appro/cryptogams/. 82c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# ==================================================================== 92c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# 102c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# March 2010 112c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# 122c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# The module implements "4-bit" GCM GHASH function and underlying 132c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# single multiplication operation in GF(2^128). "4-bit" means that it 142c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# uses 256 bytes per-key table [+128 bytes shared table]. Even though 152c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# loops are aggressively modulo-scheduled in respect to references to 162c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# Htbl and Z.hi updates for 8 cycles per byte, measured performance is 172c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# ~12 cycles per processed byte on 21264 CPU. It seems to be a dynamic 182c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# scheduling "glitch," because uprofile(1) indicates uniform sample 192c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# distribution, as if all instruction bundles execute in 1.5 cycles. 202c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# Meaning that it could have been even faster, yet 12 cycles is ~60% 212c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# better than gcc-generated code and ~80% than code generated by vendor 222c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org# compiler. 232c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 242c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$cnt="v0"; # $0 252c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$t0="t0"; 262c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$t1="t1"; 272c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$t2="t2"; 282c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$Thi0="t3"; # $4 292c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$Tlo0="t4"; 302c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$Thi1="t5"; 312c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$Tlo1="t6"; 322c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$rem="t7"; # $8 332c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org################# 342c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$Xi="a0"; # $16, input argument block 352c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$Htbl="a1"; 362c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$inp="a2"; 372c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$len="a3"; 382c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$nlo="a4"; # $20 392c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$nhi="a5"; 402c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$Zhi="t8"; 412c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$Zlo="t9"; 422c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$Xhi="t10"; # $24 432c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$Xlo="t11"; 442c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$remp="t12"; 452c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$rem_4bit="AT"; # $28 462c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 472c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org{ my $N; 482c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sub loop() { 492c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 502c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org $N++; 512c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$code.=<<___; 522c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.align 4 532c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org extbl $Xlo,7,$nlo 542c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $nlo,0xf0,$nhi 552c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $nlo,4,$nlo 562c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $nlo,0xf0,$nlo 572c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 582c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org addq $nlo,$Htbl,$nlo 592c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Zlo,8($nlo) 602c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org addq $nhi,$Htbl,$nhi 612c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Zhi,0($nlo) 622c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 632c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $Zlo,0x0f,$remp 642c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,60,$t0 652c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org lda $cnt,6(zero) 662c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org extbl $Xlo,6,$nlo 672c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 682c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Tlo1,8($nhi) 692c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org s8addq $remp,$rem_4bit,$remp 702c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Thi1,0($nhi) 712c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,4,$Zlo 722c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 732c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $rem,0($remp) 742c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,4,$Zhi 752c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $t0,$Zlo,$Zlo 762c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $nlo,0xf0,$nhi 772c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 782c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Tlo1,$Zlo,$Zlo 792c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $nlo,4,$nlo 802c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Thi1,$Zhi,$Zhi 812c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $nlo,0xf0,$nlo 822c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 832c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org addq $nlo,$Htbl,$nlo 842c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Tlo0,8($nlo) 852c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org addq $nhi,$Htbl,$nhi 862c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Thi0,0($nlo) 872c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 882c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.Looplo$N: 892c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $Zlo,0x0f,$remp 902c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,60,$t0 912c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org subq $cnt,1,$cnt 922c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,4,$Zlo 932c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 942c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Tlo1,8($nhi) 952c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $rem,$Zhi,$Zhi 962c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Thi1,0($nhi) 972c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org s8addq $remp,$rem_4bit,$remp 982c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 992c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $rem,0($remp) 1002c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,4,$Zhi 1012c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $t0,$Zlo,$Zlo 1022c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org extbl $Xlo,$cnt,$nlo 1032c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1042c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $nlo,0xf0,$nhi 1052c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Thi0,$Zhi,$Zhi 1062c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Tlo0,$Zlo,$Zlo 1072c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $nlo,4,$nlo 1082c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1092c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1102c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $Zlo,0x0f,$remp 1112c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,60,$t0 1122c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $nlo,0xf0,$nlo 1132c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,4,$Zlo 1142c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1152c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org s8addq $remp,$rem_4bit,$remp 1162c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $rem,$Zhi,$Zhi 1172c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org addq $nlo,$Htbl,$nlo 1182c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org addq $nhi,$Htbl,$nhi 1192c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1202c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $rem,0($remp) 1212c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,4,$Zhi 1222c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Tlo0,8($nlo) 1232c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $t0,$Zlo,$Zlo 1242c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1252c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Tlo1,$Zlo,$Zlo 1262c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Thi1,$Zhi,$Zhi 1272c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Thi0,0($nlo) 1282c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org bne $cnt,.Looplo$N 1292c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1302c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1312c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $Zlo,0x0f,$remp 1322c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,60,$t0 1332c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org lda $cnt,7(zero) 1342c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,4,$Zlo 1352c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1362c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Tlo1,8($nhi) 1372c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $rem,$Zhi,$Zhi 1382c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Thi1,0($nhi) 1392c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org s8addq $remp,$rem_4bit,$remp 1402c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1412c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $rem,0($remp) 1422c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,4,$Zhi 1432c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $t0,$Zlo,$Zlo 1442c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org extbl $Xhi,$cnt,$nlo 1452c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1462c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $nlo,0xf0,$nhi 1472c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Thi0,$Zhi,$Zhi 1482c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Tlo0,$Zlo,$Zlo 1492c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $nlo,4,$nlo 1502c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1512c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $Zlo,0x0f,$remp 1522c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,60,$t0 1532c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $nlo,0xf0,$nlo 1542c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,4,$Zlo 1552c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1562c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org s8addq $remp,$rem_4bit,$remp 1572c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $rem,$Zhi,$Zhi 1582c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org addq $nlo,$Htbl,$nlo 1592c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org addq $nhi,$Htbl,$nhi 1602c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1612c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $rem,0($remp) 1622c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,4,$Zhi 1632c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Tlo0,8($nlo) 1642c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $t0,$Zlo,$Zlo 1652c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1662c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Tlo1,$Zlo,$Zlo 1672c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Thi1,$Zhi,$Zhi 1682c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Thi0,0($nlo) 1692c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org unop 1702c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1712c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1722c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.Loophi$N: 1732c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $Zlo,0x0f,$remp 1742c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,60,$t0 1752c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org subq $cnt,1,$cnt 1762c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,4,$Zlo 1772c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1782c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Tlo1,8($nhi) 1792c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $rem,$Zhi,$Zhi 1802c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Thi1,0($nhi) 1812c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org s8addq $remp,$rem_4bit,$remp 1822c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1832c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $rem,0($remp) 1842c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,4,$Zhi 1852c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $t0,$Zlo,$Zlo 1862c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org extbl $Xhi,$cnt,$nlo 1872c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1882c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $nlo,0xf0,$nhi 1892c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Thi0,$Zhi,$Zhi 1902c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Tlo0,$Zlo,$Zlo 1912c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $nlo,4,$nlo 1922c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1932c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1942c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $Zlo,0x0f,$remp 1952c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,60,$t0 1962c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $nlo,0xf0,$nlo 1972c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,4,$Zlo 1982c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 1992c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org s8addq $remp,$rem_4bit,$remp 2002c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $rem,$Zhi,$Zhi 2012c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org addq $nlo,$Htbl,$nlo 2022c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org addq $nhi,$Htbl,$nhi 2032c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2042c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $rem,0($remp) 2052c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,4,$Zhi 2062c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Tlo0,8($nlo) 2072c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $t0,$Zlo,$Zlo 2082c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2092c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Tlo1,$Zlo,$Zlo 2102c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Thi1,$Zhi,$Zhi 2112c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Thi0,0($nlo) 2122c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org bne $cnt,.Loophi$N 2132c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2142c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2152c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $Zlo,0x0f,$remp 2162c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,60,$t0 2172c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,4,$Zlo 2182c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2192c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Tlo1,8($nhi) 2202c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $rem,$Zhi,$Zhi 2212c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Thi1,0($nhi) 2222c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org s8addq $remp,$rem_4bit,$remp 2232c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2242c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $rem,0($remp) 2252c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,4,$Zhi 2262c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $t0,$Zlo,$Zlo 2272c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2282c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Tlo0,$Zlo,$Zlo 2292c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Thi0,$Zhi,$Zhi 2302c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2312c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org and $Zlo,0x0f,$remp 2322c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,60,$t0 2332c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,4,$Zlo 2342c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2352c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org s8addq $remp,$rem_4bit,$remp 2362c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $rem,$Zhi,$Zhi 2372c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2382c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $rem,0($remp) 2392c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,4,$Zhi 2402c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Tlo1,$Zlo,$Zlo 2412c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Thi1,$Zhi,$Zhi 2422c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $t0,$Zlo,$Zlo 2432c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $rem,$Zhi,$Zhi 2442c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org___ 2452c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org}} 2462c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2472c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$code=<<___; 2482c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org#ifdef __linux__ 2492c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org#include <asm/regdef.h> 2502c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org#else 2512c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org#include <asm.h> 2522c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org#include <regdef.h> 2532c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org#endif 2542c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2552c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.text 2562c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2572c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.set noat 2582c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.set noreorder 2592c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.globl gcm_gmult_4bit 2602c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.align 4 2612c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.ent gcm_gmult_4bit 2622c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.orggcm_gmult_4bit: 2632c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org .frame sp,0,ra 2642c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org .prologue 0 2652c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2662c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Xlo,8($Xi) 2672c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Xhi,0($Xi) 2682c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2692c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org br $rem_4bit,.Lpic1 2702c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.Lpic1: lda $rem_4bit,rem_4bit-.Lpic1($rem_4bit) 2712c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org___ 2722c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2732c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org &loop(); 2742c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2752c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$code.=<<___; 2762c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,24,$t0 # byte swap 2772c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,8,$t1 2782c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2792c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zlo,8,$t2 2802c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zlo,24,$Zlo 2812c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t0,0x11,$t0 2822c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t1,0x22,$t1 2832c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2842c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $Zlo,0x88,$Zlo 2852c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $t0,$t1,$t0 2862c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t2,0x44,$t2 2872c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2882c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zlo,$t0,$Zlo 2892c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,24,$t0 2902c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,8,$t1 2912c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2922c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zlo,$t2,$Zlo 2932c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,8,$t2 2942c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,24,$Zhi 2952c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2962c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,32,$Xlo 2972c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zlo,32,$Zlo 2982c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 2992c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t0,0x11,$t0 3002c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t1,0x22,$t1 3012c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zlo,$Xlo,$Xlo 3022c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3032c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $Zhi,0x88,$Zhi 3042c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $t0,$t1,$t0 3052c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t2,0x44,$t2 3062c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3072c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zhi,$t0,$Zhi 3082c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zhi,$t2,$Zhi 3092c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3102c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,32,$Xhi 3112c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,32,$Zhi 3122c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3132c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zhi,$Xhi,$Xhi 3142c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org stq $Xlo,8($Xi) 3152c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org stq $Xhi,0($Xi) 3162c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3172c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ret (ra) 3182c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.end gcm_gmult_4bit 3192c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org___ 3202c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3212c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$inhi="s0"; 3222c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$inlo="s1"; 3232c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3242c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$code.=<<___; 3252c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.globl gcm_ghash_4bit 3262c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.align 4 3272c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.ent gcm_ghash_4bit 3282c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.orggcm_ghash_4bit: 3292c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org lda sp,-32(sp) 3302c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org stq ra,0(sp) 3312c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org stq s0,8(sp) 3322c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org stq s1,16(sp) 3332c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org .mask 0x04000600,-32 3342c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org .frame sp,32,ra 3352c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org .prologue 0 3362c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3372c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq_u $inhi,0($inp) 3382c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq_u $Thi0,7($inp) 3392c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq_u $inlo,8($inp) 3402c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq_u $Tlo0,15($inp) 3412c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Xhi,0($Xi) 3422c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq $Xlo,8($Xi) 3432c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3442c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org br $rem_4bit,.Lpic2 3452c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.Lpic2: lda $rem_4bit,rem_4bit-.Lpic2($rem_4bit) 3462c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3472c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.Louter: 3482c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org extql $inhi,$inp,$inhi 3492c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org extqh $Thi0,$inp,$Thi0 3502c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $inhi,$Thi0,$inhi 3512c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org lda $inp,16($inp) 3522c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3532c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org extql $inlo,$inp,$inlo 3542c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org extqh $Tlo0,$inp,$Tlo0 3552c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $inlo,$Tlo0,$inlo 3562c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org subq $len,16,$len 3572c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3582c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Xlo,$inlo,$Xlo 3592c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org xor $Xhi,$inhi,$Xhi 3602c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org___ 3612c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3622c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org &loop(); 3632c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3642c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$code.=<<___; 3652c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,24,$t0 # byte swap 3662c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,8,$t1 3672c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3682c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zlo,8,$t2 3692c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zlo,24,$Zlo 3702c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t0,0x11,$t0 3712c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t1,0x22,$t1 3722c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3732c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $Zlo,0x88,$Zlo 3742c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $t0,$t1,$t0 3752c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t2,0x44,$t2 3762c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3772c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zlo,$t0,$Zlo 3782c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,24,$t0 3792c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,8,$t1 3802c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3812c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zlo,$t2,$Zlo 3822c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,8,$t2 3832c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,24,$Zhi 3842c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3852c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zlo,32,$Xlo 3862c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zlo,32,$Zlo 3872c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org beq $len,.Ldone 3882c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3892c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t0,0x11,$t0 3902c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t1,0x22,$t1 3912c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zlo,$Xlo,$Xlo 3922c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq_u $inhi,0($inp) 3932c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3942c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $Zhi,0x88,$Zhi 3952c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $t0,$t1,$t0 3962c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t2,0x44,$t2 3972c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq_u $Thi0,7($inp) 3982c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 3992c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zhi,$t0,$Zhi 4002c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zhi,$t2,$Zhi 4012c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq_u $inlo,8($inp) 4022c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq_u $Tlo0,15($inp) 4032c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 4042c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,32,$Xhi 4052c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,32,$Zhi 4062c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 4072c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zhi,$Xhi,$Xhi 4082c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org br zero,.Louter 4092c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 4102c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.Ldone: 4112c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t0,0x11,$t0 4122c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t1,0x22,$t1 4132c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zlo,$Xlo,$Xlo 4142c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 4152c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $Zhi,0x88,$Zhi 4162c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $t0,$t1,$t0 4172c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org zapnot $t2,0x44,$t2 4182c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 4192c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zhi,$t0,$Zhi 4202c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zhi,$t2,$Zhi 4212c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 4222c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org srl $Zhi,32,$Xhi 4232c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org sll $Zhi,32,$Zhi 4242c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 4252c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org or $Zhi,$Xhi,$Xhi 4262c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 4272c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org stq $Xlo,8($Xi) 4282c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org stq $Xhi,0($Xi) 4292c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 4302c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org .set noreorder 4312c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org /*ldq ra,0(sp)*/ 4322c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq s0,8(sp) 4332c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ldq s1,16(sp) 4342c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org lda sp,32(sp) 4352c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org ret (ra) 4362c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.end gcm_ghash_4bit 4372c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 4382c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.align 4 4392c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.orgrem_4bit: 4402c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org .quad 0x0000<<48, 0x1C20<<48, 0x3840<<48, 0x2460<<48 4412c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org .quad 0x7080<<48, 0x6CA0<<48, 0x48C0<<48, 0x54E0<<48 4422c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org .quad 0xE100<<48, 0xFD20<<48, 0xD940<<48, 0xC560<<48 4432c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org .quad 0x9180<<48, 0x8DA0<<48, 0xA9C0<<48, 0xB5E0<<48 4442c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.ascii "GHASH for Alpha, CRYPTOGAMS by <appro\@openssl.org>" 4452c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org.align 4 4462c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 4472c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org___ 4482c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org$output=shift and open STDOUT,">$output"; 4492c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.orgprint $code; 4502c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.orgclose STDOUT; 4512c4508dfe2bc5b6296c01114ed11ddc64b7718c6digit@chromium.org 452