diff options
| author | christos <christos@NetBSD.org> | 2008-05-11 16:35:28 +0000 |
|---|---|---|
| committer | christos <christos@NetBSD.org> | 2008-05-11 16:35:28 +0000 |
| commit | f15eff55bfc17dedfaeeeb4a2f7410c0982dfbc8 (patch) | |
| tree | 4358faedbaf43133986240354049f4dfe92ce3d3 /lib/libcrypto/arch | |
| parent | a034c1c5e1d7afe392bc8390e3ef6410d47245f6 (diff) | |
add sparc64 assembly. Unfortunately we cannot use any of it right now because
AES_set_{encrypt,decrypt}_key are not provided.
Diffstat (limited to 'lib/libcrypto/arch')
| -rw-r--r-- | lib/libcrypto/arch/sparc64/Makefile | 15 | ||||
| -rw-r--r-- | lib/libcrypto/arch/sparc64/aes-sparcv9.S | 1467 | ||||
| -rw-r--r-- | lib/libcrypto/arch/sparc64/sha1-sparcv9.S | 1509 | ||||
| -rw-r--r-- | lib/libcrypto/arch/sparc64/sha512-sparcv9.S | 1849 | ||||
| -rw-r--r-- | lib/libcrypto/arch/sparc64/sparcv9-mont.S | 515 | ||||
| -rw-r--r-- | lib/libcrypto/arch/sparc64/sparcv9a-mont.S | 741 |
6 files changed, 6096 insertions, 0 deletions
diff --git a/lib/libcrypto/arch/sparc64/Makefile b/lib/libcrypto/arch/sparc64/Makefile new file mode 100644 index 00000000000..daf4e8e9a5d --- /dev/null +++ b/lib/libcrypto/arch/sparc64/Makefile @@ -0,0 +1,15 @@ +# $NetBSD: Makefile,v 1.1 2008/05/11 16:35:28 christos Exp $ + +.include "bsd.own.mk" + +CRYPTODIST=${NETBSDSRCDIR}/crypto/dist +.include "${NETBSDSRCDIR}/crypto/Makefile.openssl" + +regen: + for i in $$(find ${OPENSSLSRC} -name \*sparcv9\*.pl); do \ + j=$$(basename $$i .pl).S; \ + case $$j in \ + sha*) perl $$i > $$j;; \ + *) perl $$i -m64 > $$j;; \ + esac; \ + done diff --git a/lib/libcrypto/arch/sparc64/aes-sparcv9.S b/lib/libcrypto/arch/sparc64/aes-sparcv9.S new file mode 100644 index 00000000000..f2c1d074b1d --- /dev/null +++ b/lib/libcrypto/arch/sparc64/aes-sparcv9.S @@ -0,0 +1,1467 @@ +.register %g2,#scratch +.register %g3,#scratch +.section ".text",#alloc,#execinstr + +.align 256 +AES_Te: + .long 0xc66363a5,0xc66363a5 + .long 0xf87c7c84,0xf87c7c84 + .long 0xee777799,0xee777799 + .long 0xf67b7b8d,0xf67b7b8d + .long 0xfff2f20d,0xfff2f20d + .long 0xd66b6bbd,0xd66b6bbd + .long 0xde6f6fb1,0xde6f6fb1 + .long 0x91c5c554,0x91c5c554 + .long 0x60303050,0x60303050 + .long 0x02010103,0x02010103 + .long 0xce6767a9,0xce6767a9 + .long 0x562b2b7d,0x562b2b7d + .long 0xe7fefe19,0xe7fefe19 + .long 0xb5d7d762,0xb5d7d762 + .long 0x4dababe6,0x4dababe6 + .long 0xec76769a,0xec76769a + .long 0x8fcaca45,0x8fcaca45 + .long 0x1f82829d,0x1f82829d + .long 0x89c9c940,0x89c9c940 + .long 0xfa7d7d87,0xfa7d7d87 + .long 0xeffafa15,0xeffafa15 + .long 0xb25959eb,0xb25959eb + .long 0x8e4747c9,0x8e4747c9 + .long 0xfbf0f00b,0xfbf0f00b + .long 0x41adadec,0x41adadec + .long 0xb3d4d467,0xb3d4d467 + .long 0x5fa2a2fd,0x5fa2a2fd + .long 0x45afafea,0x45afafea + .long 0x239c9cbf,0x239c9cbf + .long 0x53a4a4f7,0x53a4a4f7 + .long 0xe4727296,0xe4727296 + .long 0x9bc0c05b,0x9bc0c05b + .long 0x75b7b7c2,0x75b7b7c2 + .long 0xe1fdfd1c,0xe1fdfd1c + .long 0x3d9393ae,0x3d9393ae + .long 0x4c26266a,0x4c26266a + .long 0x6c36365a,0x6c36365a + .long 0x7e3f3f41,0x7e3f3f41 + .long 0xf5f7f702,0xf5f7f702 + .long 0x83cccc4f,0x83cccc4f + .long 0x6834345c,0x6834345c + .long 0x51a5a5f4,0x51a5a5f4 + .long 0xd1e5e534,0xd1e5e534 + .long 0xf9f1f108,0xf9f1f108 + .long 0xe2717193,0xe2717193 + .long 0xabd8d873,0xabd8d873 + .long 0x62313153,0x62313153 + .long 0x2a15153f,0x2a15153f + .long 0x0804040c,0x0804040c + .long 0x95c7c752,0x95c7c752 + .long 0x46232365,0x46232365 + .long 0x9dc3c35e,0x9dc3c35e + .long 0x30181828,0x30181828 + .long 0x379696a1,0x379696a1 + .long 0x0a05050f,0x0a05050f + .long 0x2f9a9ab5,0x2f9a9ab5 + .long 0x0e070709,0x0e070709 + .long 0x24121236,0x24121236 + .long 0x1b80809b,0x1b80809b + .long 0xdfe2e23d,0xdfe2e23d + .long 0xcdebeb26,0xcdebeb26 + .long 0x4e272769,0x4e272769 + .long 0x7fb2b2cd,0x7fb2b2cd + .long 0xea75759f,0xea75759f + .long 0x1209091b,0x1209091b + .long 0x1d83839e,0x1d83839e + .long 0x582c2c74,0x582c2c74 + .long 0x341a1a2e,0x341a1a2e + .long 0x361b1b2d,0x361b1b2d + .long 0xdc6e6eb2,0xdc6e6eb2 + .long 0xb45a5aee,0xb45a5aee + .long 0x5ba0a0fb,0x5ba0a0fb + .long 0xa45252f6,0xa45252f6 + .long 0x763b3b4d,0x763b3b4d + .long 0xb7d6d661,0xb7d6d661 + .long 0x7db3b3ce,0x7db3b3ce + .long 0x5229297b,0x5229297b + .long 0xdde3e33e,0xdde3e33e + .long 0x5e2f2f71,0x5e2f2f71 + .long 0x13848497,0x13848497 + .long 0xa65353f5,0xa65353f5 + .long 0xb9d1d168,0xb9d1d168 + .long 0x00000000,0x00000000 + .long 0xc1eded2c,0xc1eded2c + .long 0x40202060,0x40202060 + .long 0xe3fcfc1f,0xe3fcfc1f + .long 0x79b1b1c8,0x79b1b1c8 + .long 0xb65b5bed,0xb65b5bed + .long 0xd46a6abe,0xd46a6abe + .long 0x8dcbcb46,0x8dcbcb46 + .long 0x67bebed9,0x67bebed9 + .long 0x7239394b,0x7239394b + .long 0x944a4ade,0x944a4ade + .long 0x984c4cd4,0x984c4cd4 + .long 0xb05858e8,0xb05858e8 + .long 0x85cfcf4a,0x85cfcf4a + .long 0xbbd0d06b,0xbbd0d06b + .long 0xc5efef2a,0xc5efef2a + .long 0x4faaaae5,0x4faaaae5 + .long 0xedfbfb16,0xedfbfb16 + .long 0x864343c5,0x864343c5 + .long 0x9a4d4dd7,0x9a4d4dd7 + .long 0x66333355,0x66333355 + .long 0x11858594,0x11858594 + .long 0x8a4545cf,0x8a4545cf + .long 0xe9f9f910,0xe9f9f910 + .long 0x04020206,0x04020206 + .long 0xfe7f7f81,0xfe7f7f81 + .long 0xa05050f0,0xa05050f0 + .long 0x783c3c44,0x783c3c44 + .long 0x259f9fba,0x259f9fba + .long 0x4ba8a8e3,0x4ba8a8e3 + .long 0xa25151f3,0xa25151f3 + .long 0x5da3a3fe,0x5da3a3fe + .long 0x804040c0,0x804040c0 + .long 0x058f8f8a,0x058f8f8a + .long 0x3f9292ad,0x3f9292ad + .long 0x219d9dbc,0x219d9dbc + .long 0x70383848,0x70383848 + .long 0xf1f5f504,0xf1f5f504 + .long 0x63bcbcdf,0x63bcbcdf + .long 0x77b6b6c1,0x77b6b6c1 + .long 0xafdada75,0xafdada75 + .long 0x42212163,0x42212163 + .long 0x20101030,0x20101030 + .long 0xe5ffff1a,0xe5ffff1a + .long 0xfdf3f30e,0xfdf3f30e + .long 0xbfd2d26d,0xbfd2d26d + .long 0x81cdcd4c,0x81cdcd4c + .long 0x180c0c14,0x180c0c14 + .long 0x26131335,0x26131335 + .long 0xc3ecec2f,0xc3ecec2f + .long 0xbe5f5fe1,0xbe5f5fe1 + .long 0x359797a2,0x359797a2 + .long 0x884444cc,0x884444cc + .long 0x2e171739,0x2e171739 + .long 0x93c4c457,0x93c4c457 + .long 0x55a7a7f2,0x55a7a7f2 + .long 0xfc7e7e82,0xfc7e7e82 + .long 0x7a3d3d47,0x7a3d3d47 + .long 0xc86464ac,0xc86464ac + .long 0xba5d5de7,0xba5d5de7 + .long 0x3219192b,0x3219192b + .long 0xe6737395,0xe6737395 + .long 0xc06060a0,0xc06060a0 + .long 0x19818198,0x19818198 + .long 0x9e4f4fd1,0x9e4f4fd1 + .long 0xa3dcdc7f,0xa3dcdc7f + .long 0x44222266,0x44222266 + .long 0x542a2a7e,0x542a2a7e + .long 0x3b9090ab,0x3b9090ab + .long 0x0b888883,0x0b888883 + .long 0x8c4646ca,0x8c4646ca + .long 0xc7eeee29,0xc7eeee29 + .long 0x6bb8b8d3,0x6bb8b8d3 + .long 0x2814143c,0x2814143c + .long 0xa7dede79,0xa7dede79 + .long 0xbc5e5ee2,0xbc5e5ee2 + .long 0x160b0b1d,0x160b0b1d + .long 0xaddbdb76,0xaddbdb76 + .long 0xdbe0e03b,0xdbe0e03b + .long 0x64323256,0x64323256 + .long 0x743a3a4e,0x743a3a4e + .long 0x140a0a1e,0x140a0a1e + .long 0x924949db,0x924949db + .long 0x0c06060a,0x0c06060a + .long 0x4824246c,0x4824246c + .long 0xb85c5ce4,0xb85c5ce4 + .long 0x9fc2c25d,0x9fc2c25d + .long 0xbdd3d36e,0xbdd3d36e + .long 0x43acacef,0x43acacef + .long 0xc46262a6,0xc46262a6 + .long 0x399191a8,0x399191a8 + .long 0x319595a4,0x319595a4 + .long 0xd3e4e437,0xd3e4e437 + .long 0xf279798b,0xf279798b + .long 0xd5e7e732,0xd5e7e732 + .long 0x8bc8c843,0x8bc8c843 + .long 0x6e373759,0x6e373759 + .long 0xda6d6db7,0xda6d6db7 + .long 0x018d8d8c,0x018d8d8c + .long 0xb1d5d564,0xb1d5d564 + .long 0x9c4e4ed2,0x9c4e4ed2 + .long 0x49a9a9e0,0x49a9a9e0 + .long 0xd86c6cb4,0xd86c6cb4 + .long 0xac5656fa,0xac5656fa + .long 0xf3f4f407,0xf3f4f407 + .long 0xcfeaea25,0xcfeaea25 + .long 0xca6565af,0xca6565af + .long 0xf47a7a8e,0xf47a7a8e + .long 0x47aeaee9,0x47aeaee9 + .long 0x10080818,0x10080818 + .long 0x6fbabad5,0x6fbabad5 + .long 0xf0787888,0xf0787888 + .long 0x4a25256f,0x4a25256f + .long 0x5c2e2e72,0x5c2e2e72 + .long 0x381c1c24,0x381c1c24 + .long 0x57a6a6f1,0x57a6a6f1 + .long 0x73b4b4c7,0x73b4b4c7 + .long 0x97c6c651,0x97c6c651 + .long 0xcbe8e823,0xcbe8e823 + .long 0xa1dddd7c,0xa1dddd7c + .long 0xe874749c,0xe874749c + .long 0x3e1f1f21,0x3e1f1f21 + .long 0x964b4bdd,0x964b4bdd + .long 0x61bdbddc,0x61bdbddc + .long 0x0d8b8b86,0x0d8b8b86 + .long 0x0f8a8a85,0x0f8a8a85 + .long 0xe0707090,0xe0707090 + .long 0x7c3e3e42,0x7c3e3e42 + .long 0x71b5b5c4,0x71b5b5c4 + .long 0xcc6666aa,0xcc6666aa + .long 0x904848d8,0x904848d8 + .long 0x06030305,0x06030305 + .long 0xf7f6f601,0xf7f6f601 + .long 0x1c0e0e12,0x1c0e0e12 + .long 0xc26161a3,0xc26161a3 + .long 0x6a35355f,0x6a35355f + .long 0xae5757f9,0xae5757f9 + .long 0x69b9b9d0,0x69b9b9d0 + .long 0x17868691,0x17868691 + .long 0x99c1c158,0x99c1c158 + .long 0x3a1d1d27,0x3a1d1d27 + .long 0x279e9eb9,0x279e9eb9 + .long 0xd9e1e138,0xd9e1e138 + .long 0xebf8f813,0xebf8f813 + .long 0x2b9898b3,0x2b9898b3 + .long 0x22111133,0x22111133 + .long 0xd26969bb,0xd26969bb + .long 0xa9d9d970,0xa9d9d970 + .long 0x078e8e89,0x078e8e89 + .long 0x339494a7,0x339494a7 + .long 0x2d9b9bb6,0x2d9b9bb6 + .long 0x3c1e1e22,0x3c1e1e22 + .long 0x15878792,0x15878792 + .long 0xc9e9e920,0xc9e9e920 + .long 0x87cece49,0x87cece49 + .long 0xaa5555ff,0xaa5555ff + .long 0x50282878,0x50282878 + .long 0xa5dfdf7a,0xa5dfdf7a + .long 0x038c8c8f,0x038c8c8f + .long 0x59a1a1f8,0x59a1a1f8 + .long 0x09898980,0x09898980 + .long 0x1a0d0d17,0x1a0d0d17 + .long 0x65bfbfda,0x65bfbfda + .long 0xd7e6e631,0xd7e6e631 + .long 0x844242c6,0x844242c6 + .long 0xd06868b8,0xd06868b8 + .long 0x824141c3,0x824141c3 + .long 0x299999b0,0x299999b0 + .long 0x5a2d2d77,0x5a2d2d77 + .long 0x1e0f0f11,0x1e0f0f11 + .long 0x7bb0b0cb,0x7bb0b0cb + .long 0xa85454fc,0xa85454fc + .long 0x6dbbbbd6,0x6dbbbbd6 + .long 0x2c16163a,0x2c16163a + .byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 + .byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 + .byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0 + .byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 + .byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc + .byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 + .byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a + .byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 + .byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0 + .byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 + .byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b + .byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf + .byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85 + .byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 + .byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5 + .byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 + .byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17 + .byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73 + .byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88 + .byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb + .byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c + .byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79 + .byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9 + .byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08 + .byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6 + .byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a + .byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e + .byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e + .byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94 + .byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf + .byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68 + .byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 +.type AES_Te,#object +.size AES_Te,(.-AES_Te) + +.align 64 +.skip 16 +_sparcv9_AES_encrypt: + save %sp,-192-16,%sp + stx %i7,[%sp+2047+192+0] ! off-load return address + ld [%i5+240],%i7 + ld [%i5+0],%l4 + ld [%i5+4],%l5 ! + ld [%i5+8],%l6 + srl %i7,1,%i7 + xor %l4,%i0,%i0 + ld [%i5+12],%l7 + srl %i0,21,%l0 + xor %l5,%i1,%i1 + ld [%i5+16],%l4 + srl %i1,13,%o0 ! + xor %l6,%i2,%i2 + ld [%i5+20],%l5 + xor %l7,%i3,%i3 + ld [%i5+24],%l6 + and %l0,2040,%l0 + ld [%i5+28],%l7 + nop +.Lenc_loop: + srl %i2,5,%o1 ! + and %o0,2040,%o0 + ldx [%i4+%l0],%l0 + sll %i3,3,%o2 + and %o1,2040,%o1 + ldx [%i4+%o0],%o0 + srl %i1,21,%l1 + and %o2,2040,%o2 + ldx [%i4+%o1],%o1 ! + srl %i2,13,%o3 + and %l1,2040,%l1 + ldx [%i4+%o2],%o2 + srl %i3,5,%o4 + and %o3,2040,%o3 + ldx [%i4+%l1],%l1 + + sll %i0,3,%o5 ! + and %o4,2040,%o4 + ldx [%i4+%o3],%o3 + srl %i2,21,%l2 + and %o5,2040,%o5 + ldx [%i4+%o4],%o4 + srl %i3,13,%o7 + and %l2,2040,%l2 + ldx [%i4+%o5],%o5 ! + srl %i0,5,%g1 + and %o7,2040,%o7 + ldx [%i4+%l2],%l2 + sll %i1,3,%g2 + and %g1,2040,%g1 + ldx [%i4+%o7],%o7 + + srl %i3,21,%l3 ! + and %g2,2040,%g2 + ldx [%i4+%g1],%g1 + srl %i0,13,%g3 + and %l3,2040,%l3 + ldx [%i4+%g2],%g2 + srl %i1,5,%g4 + and %g3,2040,%g3 + ldx [%i4+%l3],%l3 ! + sll %i2,3,%g5 + and %g4,2040,%g4 + ldx [%i4+%g3],%g3 + and %g5,2040,%g5 + add %i5,32,%i5 + ldx [%i4+%g4],%g4 + + subcc %i7,1,%i7 ! + ldx [%i4+%g5],%g5 + bz,a,pn %icc,.Lenc_last + add %i4,2048,%i7 + + srlx %o0,8,%o0 + xor %l0,%l4,%l4 + ld [%i5+0],%i0 + + srlx %o1,16,%o1 ! + xor %o0,%l4,%l4 + ld [%i5+4],%i1 + srlx %o2,24,%o2 + xor %o1,%l4,%l4 + ld [%i5+8],%i2 + srlx %o3,8,%o3 + xor %o2,%l4,%l4 + ld [%i5+12],%i3 ! + srlx %o4,16,%o4 + xor %l1,%l5,%l5 + + srlx %o5,24,%o5 + xor %o3,%l5,%l5 + srlx %o7,8,%o7 + xor %o4,%l5,%l5 + srlx %g1,16,%g1 ! + xor %o5,%l5,%l5 + srlx %g2,24,%g2 + xor %l2,%l6,%l6 + srlx %g3,8,%g3 + xor %o7,%l6,%l6 + srlx %g4,16,%g4 + xor %g1,%l6,%l6 + srlx %g5,24,%g5 ! + xor %g2,%l6,%l6 + xor %l3,%g4,%g4 + xor %g3,%l7,%l7 + srl %l4,21,%l0 + xor %g4,%l7,%l7 + srl %l5,13,%o0 + xor %g5,%l7,%l7 + + and %l0,2040,%l0 ! + srl %l6,5,%o1 + and %o0,2040,%o0 + ldx [%i4+%l0],%l0 + sll %l7,3,%o2 + and %o1,2040,%o1 + ldx [%i4+%o0],%o0 + + srl %l5,21,%l1 ! + and %o2,2040,%o2 + ldx [%i4+%o1],%o1 + srl %l6,13,%o3 + and %l1,2040,%l1 + ldx [%i4+%o2],%o2 + srl %l7,5,%o4 + and %o3,2040,%o3 + ldx [%i4+%l1],%l1 ! + sll %l4,3,%o5 + and %o4,2040,%o4 + ldx [%i4+%o3],%o3 + srl %l6,21,%l2 + and %o5,2040,%o5 + ldx [%i4+%o4],%o4 + + srl %l7,13,%o7 ! + and %l2,2040,%l2 + ldx [%i4+%o5],%o5 + srl %l4,5,%g1 + and %o7,2040,%o7 + ldx [%i4+%l2],%l2 + sll %l5,3,%g2 + and %g1,2040,%g1 + ldx [%i4+%o7],%o7 ! + srl %l7,21,%l3 + and %g2,2040,%g2 + ldx [%i4+%g1],%g1 + srl %l4,13,%g3 + and %l3,2040,%l3 + ldx [%i4+%g2],%g2 + + srl %l5,5,%g4 ! + and %g3,2040,%g3 + ldx [%i4+%l3],%l3 + sll %l6,3,%g5 + and %g4,2040,%g4 + ldx [%i4+%g3],%g3 + srlx %o0,8,%o0 + and %g5,2040,%g5 + ldx [%i4+%g4],%g4 ! + + srlx %o1,16,%o1 + xor %l0,%i0,%i0 + ldx [%i4+%g5],%g5 + srlx %o2,24,%o2 + xor %o0,%i0,%i0 + ld [%i5+16],%l4 + + srlx %o3,8,%o3 ! + xor %o1,%i0,%i0 + ld [%i5+20],%l5 + srlx %o4,16,%o4 + xor %o2,%i0,%i0 + ld [%i5+24],%l6 + srlx %o5,24,%o5 + xor %l1,%i1,%i1 + ld [%i5+28],%l7 ! + srlx %o7,8,%o7 + xor %o3,%i1,%i1 + ldx [%i4+2048+0],%g0 ! prefetch te4 + srlx %g1,16,%g1 + xor %o4,%i1,%i1 + ldx [%i4+2048+32],%g0 ! prefetch te4 + srlx %g2,24,%g2 + xor %o5,%i1,%i1 + ldx [%i4+2048+64],%g0 ! prefetch te4 + srlx %g3,8,%g3 + xor %l2,%i2,%i2 + ldx [%i4+2048+96],%g0 ! prefetch te4 + srlx %g4,16,%g4 ! + xor %o7,%i2,%i2 + ldx [%i4+2048+128],%g0 ! prefetch te4 + srlx %g5,24,%g5 + xor %g1,%i2,%i2 + ldx [%i4+2048+160],%g0 ! prefetch te4 + srl %i0,21,%l0 + xor %g2,%i2,%i2 + ldx [%i4+2048+192],%g0 ! prefetch te4 + xor %l3,%g4,%g4 + xor %g3,%i3,%i3 + ldx [%i4+2048+224],%g0 ! prefetch te4 + srl %i1,13,%o0 ! + xor %g4,%i3,%i3 + xor %g5,%i3,%i3 + ba .Lenc_loop + and %l0,2040,%l0 + +.align 32 +.Lenc_last: + srlx %o0,8,%o0 ! + xor %l0,%l4,%l4 + ld [%i5+0],%i0 + srlx %o1,16,%o1 + xor %o0,%l4,%l4 + ld [%i5+4],%i1 + srlx %o2,24,%o2 + xor %o1,%l4,%l4 + ld [%i5+8],%i2 ! + srlx %o3,8,%o3 + xor %o2,%l4,%l4 + ld [%i5+12],%i3 + srlx %o4,16,%o4 + xor %l1,%l5,%l5 + srlx %o5,24,%o5 + xor %o3,%l5,%l5 + srlx %o7,8,%o7 ! + xor %o4,%l5,%l5 + srlx %g1,16,%g1 + xor %o5,%l5,%l5 + srlx %g2,24,%g2 + xor %l2,%l6,%l6 + srlx %g3,8,%g3 + xor %o7,%l6,%l6 + srlx %g4,16,%g4 ! + xor %g1,%l6,%l6 + srlx %g5,24,%g5 + xor %g2,%l6,%l6 + xor %l3,%g4,%g4 + xor %g3,%l7,%l7 + srl %l4,24,%l0 + xor %g4,%l7,%l7 + srl %l5,16,%o0 ! + xor %g5,%l7,%l7 + + srl %l6,8,%o1 + and %o0,255,%o0 + ldub [%i7+%l0],%l0 + srl %l5,24,%l1 + and %o1,255,%o1 + ldub [%i7+%o0],%o0 + srl %l6,16,%o3 ! + and %l7,255,%o2 + ldub [%i7+%o1],%o1 + ldub [%i7+%o2],%o2 + srl %l7,8,%o4 + and %o3,255,%o3 + ldub [%i7+%l1],%l1 + + srl %l6,24,%l2 ! + and %o4,255,%o4 + ldub [%i7+%o3],%o3 + srl %l7,16,%o7 + and %l4,255,%o5 + ldub [%i7+%o4],%o4 + ldub [%i7+%o5],%o5 + + srl %l4,8,%g1 ! + and %o7,255,%o7 + ldub [%i7+%l2],%l2 + srl %l7,24,%l3 + and %g1,255,%g1 + ldub [%i7+%o7],%o7 + srl %l4,16,%g3 + and %l5,255,%g2 + ldub [%i7+%g1],%g1 ! + srl %l5,8,%g4 + and %g3,255,%g3 + ldub [%i7+%g2],%g2 + ldub [%i7+%l3],%l3 + and %g4,255,%g4 + ldub [%i7+%g3],%g3 + and %l6,255,%g5 + ldub [%i7+%g4],%g4 ! + + sll %l0,24,%l0 + xor %o2,%i0,%i0 + ldub [%i7+%g5],%g5 + sll %o0,16,%o0 + xor %l0,%i0,%i0 + ldx [%sp+2047+192+0],%i7 ! restore return address + + sll %o1,8,%o1 ! + xor %o0,%i0,%i0 + sll %l1,24,%l1 + xor %o1,%i0,%i0 + sll %o3,16,%o3 + xor %o5,%i1,%i1 + sll %o4,8,%o4 + xor %l1,%i1,%i1 + sll %l2,24,%l2 ! + xor %o3,%i1,%i1 + sll %o7,16,%o7 + xor %g2,%i2,%i2 + sll %g1,8,%g1 + xor %o4,%i1,%i1 + sll %l3,24,%l3 + xor %l2,%i2,%i2 + sll %g3,16,%g3 ! + xor %o7,%i2,%i2 + sll %g4,8,%g4 + xor %g1,%i2,%i2 + xor %l3,%g4,%g4 + xor %g3,%i3,%i3 + xor %g4,%i3,%i3 + xor %g5,%i3,%i3 + + ret + restore +.type _sparcv9_AES_encrypt,#function +.size _sparcv9_AES_encrypt,(.-_sparcv9_AES_encrypt) + +.align 32 +.globl AES_encrypt +AES_encrypt: + or %o0,%o1,%g1 + andcc %g1,3,%g0 + bnz,pn %xcc,.Lunaligned_enc + save %sp,-192,%sp + + ld [%i0+0],%o0 + ld [%i0+4],%o1 + ld [%i0+8],%o2 + ld [%i0+12],%o3 + + mov %i2,%o5 + nop +1: call _sparcv9_AES_encrypt + sub %o7,1b-AES_Te,%o4 + + st %o0,[%i1+0] + st %o1,[%i1+4] + st %o2,[%i1+8] + st %o3,[%i1+12] + + ret + restore + +.align 32 +.Lunaligned_enc: + ldub [%i0+0],%l0 + ldub [%i0+1],%l1 + ldub [%i0+2],%l2 + + sll %l0,24,%l0 + ldub [%i0+3],%l3 + sll %l1,16,%l1 + ldub [%i0+4],%l4 + sll %l2,8,%l2 + or %l1,%l0,%l0 + ldub [%i0+5],%l5 + sll %l4,24,%l4 + or %l3,%l2,%l2 + ldub [%i0+6],%l6 + sll %l5,16,%l5 + or %l0,%l2,%o0 + ldub [%i0+7],%l7 + + sll %l6,8,%l6 + or %l5,%l4,%l4 + ldub [%i0+8],%l0 + or %l7,%l6,%l6 + ldub [%i0+9],%l1 + or %l4,%l6,%o1 + ldub [%i0+10],%l2 + + sll %l0,24,%l0 + ldub [%i0+11],%l3 + sll %l1,16,%l1 + ldub [%i0+12],%l4 + sll %l2,8,%l2 + or %l1,%l0,%l0 + ldub [%i0+13],%l5 + sll %l4,24,%l4 + or %l3,%l2,%l2 + ldub [%i0+14],%l6 + sll %l5,16,%l5 + or %l0,%l2,%o2 + ldub [%i0+15],%l7 + + sll %l6,8,%l6 + or %l5,%l4,%l4 + or %l7,%l6,%l6 + or %l4,%l6,%o3 + + mov %i2,%o5 + nop +1: call _sparcv9_AES_encrypt + sub %o7,1b-AES_Te,%o4 + + srl %o0,24,%l0 + srl %o0,16,%l1 + stb %l0,[%i1+0] + srl %o0,8,%l2 + stb %l1,[%i1+1] + stb %l2,[%i1+2] + srl %o1,24,%l4 + stb %o0,[%i1+3] + + srl %o1,16,%l5 + stb %l4,[%i1+4] + srl %o1,8,%l6 + stb %l5,[%i1+5] + stb %l6,[%i1+6] + srl %o2,24,%l0 + stb %o1,[%i1+7] + + srl %o2,16,%l1 + stb %l0,[%i1+8] + srl %o2,8,%l2 + stb %l1,[%i1+9] + stb %l2,[%i1+10] + srl %o3,24,%l4 + stb %o2,[%i1+11] + + srl %o3,16,%l5 + stb %l4,[%i1+12] + srl %o3,8,%l6 + stb %l5,[%i1+13] + stb %l6,[%i1+14] + stb %o3,[%i1+15] + + ret + restore +.type AES_encrypt,#function +.size AES_encrypt,(.-AES_encrypt) + +.align 256 +AES_Td: + .long 0x51f4a750,0x51f4a750 + .long 0x7e416553,0x7e416553 + .long 0x1a17a4c3,0x1a17a4c3 + .long 0x3a275e96,0x3a275e96 + .long 0x3bab6bcb,0x3bab6bcb + .long 0x1f9d45f1,0x1f9d45f1 + .long 0xacfa58ab,0xacfa58ab + .long 0x4be30393,0x4be30393 + .long 0x2030fa55,0x2030fa55 + .long 0xad766df6,0xad766df6 + .long 0x88cc7691,0x88cc7691 + .long 0xf5024c25,0xf5024c25 + .long 0x4fe5d7fc,0x4fe5d7fc + .long 0xc52acbd7,0xc52acbd7 + .long 0x26354480,0x26354480 + .long 0xb562a38f,0xb562a38f + .long 0xdeb15a49,0xdeb15a49 + .long 0x25ba1b67,0x25ba1b67 + .long 0x45ea0e98,0x45ea0e98 + .long 0x5dfec0e1,0x5dfec0e1 + .long 0xc32f7502,0xc32f7502 + .long 0x814cf012,0x814cf012 + .long 0x8d4697a3,0x8d4697a3 + .long 0x6bd3f9c6,0x6bd3f9c6 + .long 0x038f5fe7,0x038f5fe7 + .long 0x15929c95,0x15929c95 + .long 0xbf6d7aeb,0xbf6d7aeb + .long 0x955259da,0x955259da + .long 0xd4be832d,0xd4be832d + .long 0x587421d3,0x587421d3 + .long 0x49e06929,0x49e06929 + .long 0x8ec9c844,0x8ec9c844 + .long 0x75c2896a,0x75c2896a + .long 0xf48e7978,0xf48e7978 + .long 0x99583e6b,0x99583e6b + .long 0x27b971dd,0x27b971dd + .long 0xbee14fb6,0xbee14fb6 + .long 0xf088ad17,0xf088ad17 + .long 0xc920ac66,0xc920ac66 + .long 0x7dce3ab4,0x7dce3ab4 + .long 0x63df4a18,0x63df4a18 + .long 0xe51a3182,0xe51a3182 + .long 0x97513360,0x97513360 + .long 0x62537f45,0x62537f45 + .long 0xb16477e0,0xb16477e0 + .long 0xbb6bae84,0xbb6bae84 + .long 0xfe81a01c,0xfe81a01c + .long 0xf9082b94,0xf9082b94 + .long 0x70486858,0x70486858 + .long 0x8f45fd19,0x8f45fd19 + .long 0x94de6c87,0x94de6c87 + .long 0x527bf8b7,0x527bf8b7 + .long 0xab73d323,0xab73d323 + .long 0x724b02e2,0x724b02e2 + .long 0xe31f8f57,0xe31f8f57 + .long 0x6655ab2a,0x6655ab2a + .long 0xb2eb2807,0xb2eb2807 + .long 0x2fb5c203,0x2fb5c203 + .long 0x86c57b9a,0x86c57b9a + .long 0xd33708a5,0xd33708a5 + .long 0x302887f2,0x302887f2 + .long 0x23bfa5b2,0x23bfa5b2 + .long 0x02036aba,0x02036aba + .long 0xed16825c,0xed16825c + .long 0x8acf1c2b,0x8acf1c2b + .long 0xa779b492,0xa779b492 + .long 0xf307f2f0,0xf307f2f0 + .long 0x4e69e2a1,0x4e69e2a1 + .long 0x65daf4cd,0x65daf4cd + .long 0x0605bed5,0x0605bed5 + .long 0xd134621f,0xd134621f + .long 0xc4a6fe8a,0xc4a6fe8a + .long 0x342e539d,0x342e539d + .long 0xa2f355a0,0xa2f355a0 + .long 0x058ae132,0x058ae132 + .long 0xa4f6eb75,0xa4f6eb75 + .long 0x0b83ec39,0x0b83ec39 + .long 0x4060efaa,0x4060efaa + .long 0x5e719f06,0x5e719f06 + .long 0xbd6e1051,0xbd6e1051 + .long 0x3e218af9,0x3e218af9 + .long 0x96dd063d,0x96dd063d + .long 0xdd3e05ae,0xdd3e05ae + .long 0x4de6bd46,0x4de6bd46 + .long 0x91548db5,0x91548db5 + .long 0x71c45d05,0x71c45d05 + .long 0x0406d46f,0x0406d46f + .long 0x605015ff,0x605015ff + .long 0x1998fb24,0x1998fb24 + .long 0xd6bde997,0xd6bde997 + .long 0x894043cc,0x894043cc + .long 0x67d99e77,0x67d99e77 + .long 0xb0e842bd,0xb0e842bd + .long 0x07898b88,0x07898b88 + .long 0xe7195b38,0xe7195b38 + .long 0x79c8eedb,0x79c8eedb + .long 0xa17c0a47,0xa17c0a47 + .long 0x7c420fe9,0x7c420fe9 + .long 0xf8841ec9,0xf8841ec9 + .long 0x00000000,0x00000000 + .long 0x09808683,0x09808683 + .long 0x322bed48,0x322bed48 + .long 0x1e1170ac,0x1e1170ac + .long 0x6c5a724e,0x6c5a724e + .long 0xfd0efffb,0xfd0efffb + .long 0x0f853856,0x0f853856 + .long 0x3daed51e,0x3daed51e + .long 0x362d3927,0x362d3927 + .long 0x0a0fd964,0x0a0fd964 + .long 0x685ca621,0x685ca621 + .long 0x9b5b54d1,0x9b5b54d1 + .long 0x24362e3a,0x24362e3a + .long 0x0c0a67b1,0x0c0a67b1 + .long 0x9357e70f,0x9357e70f + .long 0xb4ee96d2,0xb4ee96d2 + .long 0x1b9b919e,0x1b9b919e + .long 0x80c0c54f,0x80c0c54f + .long 0x61dc20a2,0x61dc20a2 + .long 0x5a774b69,0x5a774b69 + .long 0x1c121a16,0x1c121a16 + .long 0xe293ba0a,0xe293ba0a + .long 0xc0a02ae5,0xc0a02ae5 + .long 0x3c22e043,0x3c22e043 + .long 0x121b171d,0x121b171d + .long 0x0e090d0b,0x0e090d0b + .long 0xf28bc7ad,0xf28bc7ad + .long 0x2db6a8b9,0x2db6a8b9 + .long 0x141ea9c8,0x141ea9c8 + .long 0x57f11985,0x57f11985 + .long 0xaf75074c,0xaf75074c + .long 0xee99ddbb,0xee99ddbb + .long 0xa37f60fd,0xa37f60fd + .long 0xf701269f,0xf701269f + .long 0x5c72f5bc,0x5c72f5bc + .long 0x44663bc5,0x44663bc5 + .long 0x5bfb7e34,0x5bfb7e34 + .long 0x8b432976,0x8b432976 + .long 0xcb23c6dc,0xcb23c6dc + .long 0xb6edfc68,0xb6edfc68 + .long 0xb8e4f163,0xb8e4f163 + .long 0xd731dcca,0xd731dcca + .long 0x42638510,0x42638510 + .long 0x13972240,0x13972240 + .long 0x84c61120,0x84c61120 + .long 0x854a247d,0x854a247d + .long 0xd2bb3df8,0xd2bb3df8 + .long 0xaef93211,0xaef93211 + .long 0xc729a16d,0xc729a16d + .long 0x1d9e2f4b,0x1d9e2f4b + .long 0xdcb230f3,0xdcb230f3 + .long 0x0d8652ec,0x0d8652ec + .long 0x77c1e3d0,0x77c1e3d0 + .long 0x2bb3166c,0x2bb3166c + .long 0xa970b999,0xa970b999 + .long 0x119448fa,0x119448fa + .long 0x47e96422,0x47e96422 + .long 0xa8fc8cc4,0xa8fc8cc4 + .long 0xa0f03f1a,0xa0f03f1a + .long 0x567d2cd8,0x567d2cd8 + .long 0x223390ef,0x223390ef + .long 0x87494ec7,0x87494ec7 + .long 0xd938d1c1,0xd938d1c1 + .long 0x8ccaa2fe,0x8ccaa2fe + .long 0x98d40b36,0x98d40b36 + .long 0xa6f581cf,0xa6f581cf + .long 0xa57ade28,0xa57ade28 + .long 0xdab78e26,0xdab78e26 + .long 0x3fadbfa4,0x3fadbfa4 + .long 0x2c3a9de4,0x2c3a9de4 + .long 0x5078920d,0x5078920d + .long 0x6a5fcc9b,0x6a5fcc9b + .long 0x547e4662,0x547e4662 + .long 0xf68d13c2,0xf68d13c2 + .long 0x90d8b8e8,0x90d8b8e8 + .long 0x2e39f75e,0x2e39f75e + .long 0x82c3aff5,0x82c3aff5 + .long 0x9f5d80be,0x9f5d80be + .long 0x69d0937c,0x69d0937c + .long 0x6fd52da9,0x6fd52da9 + .long 0xcf2512b3,0xcf2512b3 + .long 0xc8ac993b,0xc8ac993b + .long 0x10187da7,0x10187da7 + .long 0xe89c636e,0xe89c636e + .long 0xdb3bbb7b,0xdb3bbb7b + .long 0xcd267809,0xcd267809 + .long 0x6e5918f4,0x6e5918f4 + .long 0xec9ab701,0xec9ab701 + .long 0x834f9aa8,0x834f9aa8 + .long 0xe6956e65,0xe6956e65 + .long 0xaaffe67e,0xaaffe67e + .long 0x21bccf08,0x21bccf08 + .long 0xef15e8e6,0xef15e8e6 + .long 0xbae79bd9,0xbae79bd9 + .long 0x4a6f36ce,0x4a6f36ce + .long 0xea9f09d4,0xea9f09d4 + .long 0x29b07cd6,0x29b07cd6 + .long 0x31a4b2af,0x31a4b2af + .long 0x2a3f2331,0x2a3f2331 + .long 0xc6a59430,0xc6a59430 + .long 0x35a266c0,0x35a266c0 + .long 0x744ebc37,0x744ebc37 + .long 0xfc82caa6,0xfc82caa6 + .long 0xe090d0b0,0xe090d0b0 + .long 0x33a7d815,0x33a7d815 + .long 0xf104984a,0xf104984a + .long 0x41ecdaf7,0x41ecdaf7 + .long 0x7fcd500e,0x7fcd500e + .long 0x1791f62f,0x1791f62f + .long 0x764dd68d,0x764dd68d + .long 0x43efb04d,0x43efb04d + .long 0xccaa4d54,0xccaa4d54 + .long 0xe49604df,0xe49604df + .long 0x9ed1b5e3,0x9ed1b5e3 + .long 0x4c6a881b,0x4c6a881b + .long 0xc12c1fb8,0xc12c1fb8 + .long 0x4665517f,0x4665517f + .long 0x9d5eea04,0x9d5eea04 + .long 0x018c355d,0x018c355d + .long 0xfa877473,0xfa877473 + .long 0xfb0b412e,0xfb0b412e + .long 0xb3671d5a,0xb3671d5a + .long 0x92dbd252,0x92dbd252 + .long 0xe9105633,0xe9105633 + .long 0x6dd64713,0x6dd64713 + .long 0x9ad7618c,0x9ad7618c + .long 0x37a10c7a,0x37a10c7a + .long 0x59f8148e,0x59f8148e + .long 0xeb133c89,0xeb133c89 + .long 0xcea927ee,0xcea927ee + .long 0xb761c935,0xb761c935 + .long 0xe11ce5ed,0xe11ce5ed + .long 0x7a47b13c,0x7a47b13c + .long 0x9cd2df59,0x9cd2df59 + .long 0x55f2733f,0x55f2733f + .long 0x1814ce79,0x1814ce79 + .long 0x73c737bf,0x73c737bf + .long 0x53f7cdea,0x53f7cdea + .long 0x5ffdaa5b,0x5ffdaa5b + .long 0xdf3d6f14,0xdf3d6f14 + .long 0x7844db86,0x7844db86 + .long 0xcaaff381,0xcaaff381 + .long 0xb968c43e,0xb968c43e + .long 0x3824342c,0x3824342c + .long 0xc2a3405f,0xc2a3405f + .long 0x161dc372,0x161dc372 + .long 0xbce2250c,0xbce2250c + .long 0x283c498b,0x283c498b + .long 0xff0d9541,0xff0d9541 + .long 0x39a80171,0x39a80171 + .long 0x080cb3de,0x080cb3de + .long 0xd8b4e49c,0xd8b4e49c + .long 0x6456c190,0x6456c190 + .long 0x7bcb8461,0x7bcb8461 + .long 0xd532b670,0xd532b670 + .long 0x486c5c74,0x486c5c74 + .long 0xd0b85742,0xd0b85742 + .byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 + .byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb + .byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87 + .byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb + .byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d + .byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e + .byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2 + .byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 + .byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16 + .byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92 + .byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda + .byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84 + .byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a + .byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06 + .byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02 + .byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b + .byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea + .byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73 + .byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85 + .byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e + .byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89 + .byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b + .byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20 + .byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4 + .byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31 + .byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f + .byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d + .byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef + .byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0 + .byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 + .byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26 + .byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d +.type AES_Td,#object +.size AES_Td,(.-AES_Td) + +.align 64 +.skip 16 +_sparcv9_AES_decrypt: + save %sp,-192-16,%sp + stx %i7,[%sp+2047+192+0] ! off-load return address + ld [%i5+240],%i7 + ld [%i5+0],%l4 + ld [%i5+4],%l5 ! + ld [%i5+8],%l6 + ld [%i5+12],%l7 + srl %i7,1,%i7 + xor %l4,%i0,%i0 + ld [%i5+16],%l4 + xor %l5,%i1,%i1 + ld [%i5+20],%l5 + srl %i0,21,%l0 ! + xor %l6,%i2,%i2 + ld [%i5+24],%l6 + xor %l7,%i3,%i3 + and %l0,2040,%l0 + ld [%i5+28],%l7 + srl %i3,13,%o0 + nop +.Ldec_loop: + srl %i2,5,%o1 ! + and %o0,2040,%o0 + ldx [%i4+%l0],%l0 + sll %i1,3,%o2 + and %o1,2040,%o1 + ldx [%i4+%o0],%o0 + srl %i1,21,%l1 + and %o2,2040,%o2 + ldx [%i4+%o1],%o1 ! + srl %i0,13,%o3 + and %l1,2040,%l1 + ldx [%i4+%o2],%o2 + srl %i3,5,%o4 + and %o3,2040,%o3 + ldx [%i4+%l1],%l1 + + sll %i2,3,%o5 ! + and %o4,2040,%o4 + ldx [%i4+%o3],%o3 + srl %i2,21,%l2 + and %o5,2040,%o5 + ldx [%i4+%o4],%o4 + srl %i1,13,%o7 + and %l2,2040,%l2 + ldx [%i4+%o5],%o5 ! + srl %i0,5,%g1 + and %o7,2040,%o7 + ldx [%i4+%l2],%l2 + sll %i3,3,%g2 + and %g1,2040,%g1 + ldx [%i4+%o7],%o7 + + srl %i3,21,%l3 ! + and %g2,2040,%g2 + ldx [%i4+%g1],%g1 + srl %i2,13,%g3 + and %l3,2040,%l3 + ldx [%i4+%g2],%g2 + srl %i1,5,%g4 + and %g3,2040,%g3 + ldx [%i4+%l3],%l3 ! + sll %i0,3,%g5 + and %g4,2040,%g4 + ldx [%i4+%g3],%g3 + and %g5,2040,%g5 + add %i5,32,%i5 + ldx [%i4+%g4],%g4 + + subcc %i7,1,%i7 ! + ldx [%i4+%g5],%g5 + bz,a,pn %icc,.Ldec_last + add %i4,2048,%i7 + + srlx %o0,8,%o0 + xor %l0,%l4,%l4 + ld [%i5+0],%i0 + + srlx %o1,16,%o1 ! + xor %o0,%l4,%l4 + ld [%i5+4],%i1 + srlx %o2,24,%o2 + xor %o1,%l4,%l4 + ld [%i5+8],%i2 + srlx %o3,8,%o3 + xor %o2,%l4,%l4 + ld [%i5+12],%i3 ! + srlx %o4,16,%o4 + xor %l1,%l5,%l5 + + srlx %o5,24,%o5 + xor %o3,%l5,%l5 + srlx %o7,8,%o7 + xor %o4,%l5,%l5 + srlx %g1,16,%g1 ! + xor %o5,%l5,%l5 + srlx %g2,24,%g2 + xor %l2,%l6,%l6 + srlx %g3,8,%g3 + xor %o7,%l6,%l6 + srlx %g4,16,%g4 + xor %g1,%l6,%l6 + srlx %g5,24,%g5 ! + xor %g2,%l6,%l6 + xor %l3,%g4,%g4 + xor %g3,%l7,%l7 + srl %l4,21,%l0 + xor %g4,%l7,%l7 + xor %g5,%l7,%l7 + srl %l7,13,%o0 + + and %l0,2040,%l0 ! + srl %l6,5,%o1 + and %o0,2040,%o0 + ldx [%i4+%l0],%l0 + sll %l5,3,%o2 + and %o1,2040,%o1 + ldx [%i4+%o0],%o0 + + srl %l5,21,%l1 ! + and %o2,2040,%o2 + ldx [%i4+%o1],%o1 + srl %l4,13,%o3 + and %l1,2040,%l1 + ldx [%i4+%o2],%o2 + srl %l7,5,%o4 + and %o3,2040,%o3 + ldx [%i4+%l1],%l1 ! + sll %l6,3,%o5 + and %o4,2040,%o4 + ldx [%i4+%o3],%o3 + srl %l6,21,%l2 + and %o5,2040,%o5 + ldx [%i4+%o4],%o4 + + srl %l5,13,%o7 ! + and %l2,2040,%l2 + ldx [%i4+%o5],%o5 + srl %l4,5,%g1 + and %o7,2040,%o7 + ldx [%i4+%l2],%l2 + sll %l7,3,%g2 + and %g1,2040,%g1 + ldx [%i4+%o7],%o7 ! + srl %l7,21,%l3 + and %g2,2040,%g2 + ldx [%i4+%g1],%g1 + srl %l6,13,%g3 + and %l3,2040,%l3 + ldx [%i4+%g2],%g2 + + srl %l5,5,%g4 ! + and %g3,2040,%g3 + ldx [%i4+%l3],%l3 + sll %l4,3,%g5 + and %g4,2040,%g4 + ldx [%i4+%g3],%g3 + srlx %o0,8,%o0 + and %g5,2040,%g5 + ldx [%i4+%g4],%g4 ! + + srlx %o1,16,%o1 + xor %l0,%i0,%i0 + ldx [%i4+%g5],%g5 + srlx %o2,24,%o2 + xor %o0,%i0,%i0 + ld [%i5+16],%l4 + + srlx %o3,8,%o3 ! + xor %o1,%i0,%i0 + ld [%i5+20],%l5 + srlx %o4,16,%o4 + xor %o2,%i0,%i0 + ld [%i5+24],%l6 + srlx %o5,24,%o5 + xor %l1,%i1,%i1 + ld [%i5+28],%l7 ! + srlx %o7,8,%o7 + xor %o3,%i1,%i1 + ldx [%i4+2048+0],%g0 ! prefetch td4 + srlx %g1,16,%g1 + xor %o4,%i1,%i1 + ldx [%i4+2048+32],%g0 ! prefetch td4 + srlx %g2,24,%g2 + xor %o5,%i1,%i1 + ldx [%i4+2048+64],%g0 ! prefetch td4 + srlx %g3,8,%g3 + xor %l2,%i2,%i2 + ldx [%i4+2048+96],%g0 ! prefetch td4 + srlx %g4,16,%g4 ! + xor %o7,%i2,%i2 + ldx [%i4+2048+128],%g0 ! prefetch td4 + srlx %g5,24,%g5 + xor %g1,%i2,%i2 + ldx [%i4+2048+160],%g0 ! prefetch td4 + srl %i0,21,%l0 + xor %g2,%i2,%i2 + ldx [%i4+2048+192],%g0 ! prefetch td4 + xor %l3,%g4,%g4 + xor %g3,%i3,%i3 + ldx [%i4+2048+224],%g0 ! prefetch td4 + and %l0,2040,%l0 ! + xor %g4,%i3,%i3 + xor %g5,%i3,%i3 + ba .Ldec_loop + srl %i3,13,%o0 + +.align 32 +.Ldec_last: + srlx %o0,8,%o0 ! + xor %l0,%l4,%l4 + ld [%i5+0],%i0 + srlx %o1,16,%o1 + xor %o0,%l4,%l4 + ld [%i5+4],%i1 + srlx %o2,24,%o2 + xor %o1,%l4,%l4 + ld [%i5+8],%i2 ! + srlx %o3,8,%o3 + xor %o2,%l4,%l4 + ld [%i5+12],%i3 + srlx %o4,16,%o4 + xor %l1,%l5,%l5 + srlx %o5,24,%o5 + xor %o3,%l5,%l5 + srlx %o7,8,%o7 ! + xor %o4,%l5,%l5 + srlx %g1,16,%g1 + xor %o5,%l5,%l5 + srlx %g2,24,%g2 + xor %l2,%l6,%l6 + srlx %g3,8,%g3 + xor %o7,%l6,%l6 + srlx %g4,16,%g4 ! + xor %g1,%l6,%l6 + srlx %g5,24,%g5 + xor %g2,%l6,%l6 + xor %l3,%g4,%g4 + xor %g3,%l7,%l7 + srl %l4,24,%l0 + xor %g4,%l7,%l7 + xor %g5,%l7,%l7 ! + srl %l7,16,%o0 + + srl %l6,8,%o1 + and %o0,255,%o0 + ldub [%i7+%l0],%l0 + srl %l5,24,%l1 + and %o1,255,%o1 + ldub [%i7+%o0],%o0 + srl %l4,16,%o3 ! + and %l5,255,%o2 + ldub [%i7+%o1],%o1 + ldub [%i7+%o2],%o2 + srl %l7,8,%o4 + and %o3,255,%o3 + ldub [%i7+%l1],%l1 + + srl %l6,24,%l2 ! + and %o4,255,%o4 + ldub [%i7+%o3],%o3 + srl %l5,16,%o7 + and %l6,255,%o5 + ldub [%i7+%o4],%o4 + ldub [%i7+%o5],%o5 + + srl %l4,8,%g1 ! + and %o7,255,%o7 + ldub [%i7+%l2],%l2 + srl %l7,24,%l3 + and %g1,255,%g1 + ldub [%i7+%o7],%o7 + srl %l6,16,%g3 + and %l7,255,%g2 + ldub [%i7+%g1],%g1 ! + srl %l5,8,%g4 + and %g3,255,%g3 + ldub [%i7+%g2],%g2 + ldub [%i7+%l3],%l3 + and %g4,255,%g4 + ldub [%i7+%g3],%g3 + and %l4,255,%g5 + ldub [%i7+%g4],%g4 ! + + sll %l0,24,%l0 + xor %o2,%i0,%i0 + ldub [%i7+%g5],%g5 + sll %o0,16,%o0 + xor %l0,%i0,%i0 + ldx [%sp+2047+192+0],%i7 ! restore return address + + sll %o1,8,%o1 ! + xor %o0,%i0,%i0 + sll %l1,24,%l1 + xor %o1,%i0,%i0 + sll %o3,16,%o3 + xor %o5,%i1,%i1 + sll %o4,8,%o4 + xor %l1,%i1,%i1 + sll %l2,24,%l2 ! + xor %o3,%i1,%i1 + sll %o7,16,%o7 + xor %g2,%i2,%i2 + sll %g1,8,%g1 + xor %o4,%i1,%i1 + sll %l3,24,%l3 + xor %l2,%i2,%i2 + sll %g3,16,%g3 ! + xor %o7,%i2,%i2 + sll %g4,8,%g4 + xor %g1,%i2,%i2 + xor %l3,%g4,%g4 + xor %g3,%i3,%i3 + xor %g4,%i3,%i3 + xor %g5,%i3,%i3 + + ret + restore +.type _sparcv9_AES_decrypt,#function +.size _sparcv9_AES_decrypt,(.-_sparcv9_AES_decrypt) + +.align 32 +.globl AES_decrypt +AES_decrypt: + or %o0,%o1,%g1 + andcc %g1,3,%g0 + bnz,pn %xcc,.Lunaligned_dec + save %sp,-192,%sp + + ld [%i0+0],%o0 + ld [%i0+4],%o1 + ld [%i0+8],%o2 + ld [%i0+12],%o3 + + mov %i2,%o5 + nop +1: call _sparcv9_AES_decrypt + sub %o7,1b-AES_Td,%o4 + + st %o0,[%i1+0] + st %o1,[%i1+4] + st %o2,[%i1+8] + st %o3,[%i1+12] + + ret + restore + +.align 32 +.Lunaligned_dec: + ldub [%i0+0],%l0 + ldub [%i0+1],%l1 + ldub [%i0+2],%l2 + + sll %l0,24,%l0 + ldub [%i0+3],%l3 + sll %l1,16,%l1 + ldub [%i0+4],%l4 + sll %l2,8,%l2 + or %l1,%l0,%l0 + ldub [%i0+5],%l5 + sll %l4,24,%l4 + or %l3,%l2,%l2 + ldub [%i0+6],%l6 + sll %l5,16,%l5 + or %l0,%l2,%o0 + ldub [%i0+7],%l7 + + sll %l6,8,%l6 + or %l5,%l4,%l4 + ldub [%i0+8],%l0 + or %l7,%l6,%l6 + ldub [%i0+9],%l1 + or %l4,%l6,%o1 + ldub [%i0+10],%l2 + + sll %l0,24,%l0 + ldub [%i0+11],%l3 + sll %l1,16,%l1 + ldub [%i0+12],%l4 + sll %l2,8,%l2 + or %l1,%l0,%l0 + ldub [%i0+13],%l5 + sll %l4,24,%l4 + or %l3,%l2,%l2 + ldub [%i0+14],%l6 + sll %l5,16,%l5 + or %l0,%l2,%o2 + ldub [%i0+15],%l7 + + sll %l6,8,%l6 + or %l5,%l4,%l4 + or %l7,%l6,%l6 + or %l4,%l6,%o3 + + mov %i2,%o5 + nop +1: call _sparcv9_AES_decrypt + sub %o7,1b-AES_Td,%o4 + + srl %o0,24,%l0 + srl %o0,16,%l1 + stb %l0,[%i1+0] + srl %o0,8,%l2 + stb %l1,[%i1+1] + stb %l2,[%i1+2] + srl %o1,24,%l4 + stb %o0,[%i1+3] + + srl %o1,16,%l5 + stb %l4,[%i1+4] + srl %o1,8,%l6 + stb %l5,[%i1+5] + stb %l6,[%i1+6] + srl %o2,24,%l0 + stb %o1,[%i1+7] + + srl %o2,16,%l1 + stb %l0,[%i1+8] + srl %o2,8,%l2 + stb %l1,[%i1+9] + stb %l2,[%i1+10] + srl %o3,24,%l4 + stb %o2,[%i1+11] + + srl %o3,16,%l5 + stb %l4,[%i1+12] + srl %o3,8,%l6 + stb %l5,[%i1+13] + stb %l6,[%i1+14] + stb %o3,[%i1+15] + + ret + restore +.type AES_decrypt,#function +.size AES_decrypt,(.-AES_decrypt) diff --git a/lib/libcrypto/arch/sparc64/sha1-sparcv9.S b/lib/libcrypto/arch/sparc64/sha1-sparcv9.S new file mode 100644 index 00000000000..990ef0a0c30 --- /dev/null +++ b/lib/libcrypto/arch/sparc64/sha1-sparcv9.S @@ -0,0 +1,1509 @@ +.section ".text",#alloc,#execinstr + +.align 32 +.globl sha1_block_data_order +sha1_block_data_order: + save %sp,-112,%sp + sllx %i2,6,%i2 + add %i1,%i2,%i2 + + or %g0,1,%g2 + sllx %g2,32,%g2 + or %g2,1,%g2 + + ld [%i0+0],%l0 + ld [%i0+4],%l1 + ld [%i0+8],%l2 + ld [%i0+12],%l3 + ld [%i0+16],%l4 + andn %i1,7,%i3 + + sethi %hi(0x5a827999),%l5 + or %l5,%lo(0x5a827999),%l5 + sethi %hi(0x6ed9eba1),%l6 + or %l6,%lo(0x6ed9eba1),%l6 + sethi %hi(0x8f1bbcdc),%l7 + or %l7,%lo(0x8f1bbcdc),%l7 + sethi %hi(0xca62c1d6),%g5 + or %g5,%lo(0xca62c1d6),%g5 + +.Lloop: + ldx [%i3+0],%o0 + ldx [%i3+16],%o2 + ldx [%i3+32],%o4 + ldx [%i3+48],%g1 + and %i1,7,%i4 + ldx [%i3+8],%o1 + sll %i4,3,%i4 + ldx [%i3+24],%o3 + subcc %g0,%i4,%i5 ! should be 64-%i4, but -%i4 works too + ldx [%i3+40],%o5 + bz,pt %icc,.Laligned + ldx [%i3+56],%o7 + + sllx %o0,%i4,%o0 + ldx [%i3+64],%g3 + srlx %o1,%i5,%g4 + sllx %o1,%i4,%o1 + or %g4,%o0,%o0 + srlx %o2,%i5,%g4 + sllx %o2,%i4,%o2 + or %g4,%o1,%o1 + srlx %o3,%i5,%g4 + sllx %o3,%i4,%o3 + or %g4,%o2,%o2 + srlx %o4,%i5,%g4 + sllx %o4,%i4,%o4 + or %g4,%o3,%o3 + srlx %o5,%i5,%g4 + sllx %o5,%i4,%o5 + or %g4,%o4,%o4 + srlx %g1,%i5,%g4 + sllx %g1,%i4,%g1 + or %g4,%o5,%o5 + srlx %o7,%i5,%g4 + sllx %o7,%i4,%o7 + or %g4,%g1,%g1 + srlx %g3,%i5,%g3 + or %g3,%o7,%o7 +.Laligned: + srlx %o0,32,%g4 + sll %l0,5,%i3 !! 0 + add %l5,%l4,%l4 + srl %l0,27,%i4 + add %i3,%l4,%l4 + and %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + andn %l3,%l1,%i4 + srl %l1,2,%l1 + or %i4,%i3,%i4 + or %i5,%l1,%l1 + add %g4,%l4,%l4 + add %i4,%l4,%l4 + sll %l4,5,%i3 !! 1 + add %l5,%l3,%l3 + srl %l4,27,%i4 + add %i3,%l3,%l3 + and %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + andn %l2,%l0,%i4 + srl %l0,2,%l0 + or %i4,%i3,%i4 + or %i5,%l0,%l0 + add %o0,%l3,%l3 + srlx %o1,32,%g4 + add %i4,%l3,%l3 + sll %l3,5,%i3 !! 2 + add %l5,%l2,%l2 + srl %l3,27,%i4 + add %i3,%l2,%l2 + and %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + andn %l1,%l4,%i4 + srl %l4,2,%l4 + or %i4,%i3,%i4 + or %i5,%l4,%l4 + add %g4,%l2,%l2 + add %i4,%l2,%l2 + sll %l2,5,%i3 !! 3 + add %l5,%l1,%l1 + srl %l2,27,%i4 + add %i3,%l1,%l1 + and %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + andn %l0,%l3,%i4 + srl %l3,2,%l3 + or %i4,%i3,%i4 + or %i5,%l3,%l3 + add %o1,%l1,%l1 + srlx %o2,32,%g4 + add %i4,%l1,%l1 + sll %l1,5,%i3 !! 4 + add %l5,%l0,%l0 + srl %l1,27,%i4 + add %i3,%l0,%l0 + and %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + andn %l4,%l2,%i4 + srl %l2,2,%l2 + or %i4,%i3,%i4 + or %i5,%l2,%l2 + add %g4,%l0,%l0 + add %i4,%l0,%l0 + sll %l0,5,%i3 !! 5 + add %l5,%l4,%l4 + srl %l0,27,%i4 + add %i3,%l4,%l4 + and %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + andn %l3,%l1,%i4 + srl %l1,2,%l1 + or %i4,%i3,%i4 + or %i5,%l1,%l1 + add %o2,%l4,%l4 + srlx %o3,32,%g4 + add %i4,%l4,%l4 + sll %l4,5,%i3 !! 6 + add %l5,%l3,%l3 + srl %l4,27,%i4 + add %i3,%l3,%l3 + and %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + andn %l2,%l0,%i4 + srl %l0,2,%l0 + or %i4,%i3,%i4 + or %i5,%l0,%l0 + add %g4,%l3,%l3 + add %i4,%l3,%l3 + sll %l3,5,%i3 !! 7 + add %l5,%l2,%l2 + srl %l3,27,%i4 + add %i3,%l2,%l2 + and %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + andn %l1,%l4,%i4 + srl %l4,2,%l4 + or %i4,%i3,%i4 + or %i5,%l4,%l4 + add %o3,%l2,%l2 + srlx %o4,32,%g4 + add %i4,%l2,%l2 + sll %l2,5,%i3 !! 8 + add %l5,%l1,%l1 + srl %l2,27,%i4 + add %i3,%l1,%l1 + and %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + andn %l0,%l3,%i4 + srl %l3,2,%l3 + or %i4,%i3,%i4 + or %i5,%l3,%l3 + add %g4,%l1,%l1 + add %i4,%l1,%l1 + sll %l1,5,%i3 !! 9 + add %l5,%l0,%l0 + srl %l1,27,%i4 + add %i3,%l0,%l0 + and %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + andn %l4,%l2,%i4 + srl %l2,2,%l2 + or %i4,%i3,%i4 + or %i5,%l2,%l2 + add %o4,%l0,%l0 + srlx %o5,32,%g4 + add %i4,%l0,%l0 + sll %l0,5,%i3 !! 10 + add %l5,%l4,%l4 + srl %l0,27,%i4 + add %i3,%l4,%l4 + and %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + andn %l3,%l1,%i4 + srl %l1,2,%l1 + or %i4,%i3,%i4 + or %i5,%l1,%l1 + add %g4,%l4,%l4 + add %i4,%l4,%l4 + sll %l4,5,%i3 !! 11 + add %l5,%l3,%l3 + srl %l4,27,%i4 + add %i3,%l3,%l3 + and %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + andn %l2,%l0,%i4 + srl %l0,2,%l0 + or %i4,%i3,%i4 + or %i5,%l0,%l0 + add %o5,%l3,%l3 + srlx %g1,32,%g4 + add %i4,%l3,%l3 + sll %l3,5,%i3 !! 12 + add %l5,%l2,%l2 + srl %l3,27,%i4 + add %i3,%l2,%l2 + and %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + andn %l1,%l4,%i4 + srl %l4,2,%l4 + or %i4,%i3,%i4 + or %i5,%l4,%l4 + add %g4,%l2,%l2 + add %i4,%l2,%l2 + sll %l2,5,%i3 !! 13 + add %l5,%l1,%l1 + srl %l2,27,%i4 + add %i3,%l1,%l1 + and %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + andn %l0,%l3,%i4 + srl %l3,2,%l3 + or %i4,%i3,%i4 + or %i5,%l3,%l3 + add %g1,%l1,%l1 + srlx %o7,32,%g4 + add %i4,%l1,%l1 + sll %l1,5,%i3 !! 14 + add %l5,%l0,%l0 + srl %l1,27,%i4 + add %i3,%l0,%l0 + and %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + andn %l4,%l2,%i4 + srl %l2,2,%l2 + or %i4,%i3,%i4 + or %i5,%l2,%l2 + add %g4,%l0,%l0 + add %i4,%l0,%l0 + sll %l0,5,%i3 !! 15 + add %l5,%l4,%l4 + srl %l0,27,%i4 + add %i3,%l4,%l4 + and %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + andn %l3,%l1,%i4 + srl %l1,2,%l1 + or %i4,%i3,%i4 + or %i5,%l1,%l1 + add %o7,%l4,%l4 + add %i4,%l4,%l4 + sllx %g1,32,%g4 ! Xupdate(16) + xor %o1,%o0,%o0 + srlx %o7,32,%i4 + xor %o4,%o0,%o0 + sll %l4,5,%i3 !! 16 + or %i4,%g4,%g4 + add %l5,%l3,%l3 !! + xor %g4,%o0,%o0 + srlx %o0,31,%g4 + add %o0,%o0,%o0 + and %g4,%g2,%g4 + andn %o0,%g2,%o0 + srl %l4,27,%i4 !! + or %g4,%o0,%o0 + srlx %o0,32,%g4 + add %i3,%l3,%l3 !! + and %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + add %g4,%l3,%l3 + andn %l2,%l0,%i4 + srl %l0,2,%l0 + or %i4,%i3,%i4 + or %i5,%l0,%l0 + add %i4,%l3,%l3 + sll %l3,5,%i3 !! 17 + add %l5,%l2,%l2 + srl %l3,27,%i4 + add %i3,%l2,%l2 !! + and %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + add %o0,%l2,%l2 + andn %l1,%l4,%i4 + srl %l4,2,%l4 + or %i4,%i3,%i4 + or %i5,%l4,%l4 + add %i4,%l2,%l2 + sllx %o7,32,%g4 ! Xupdate(18) + xor %o2,%o1,%o1 + srlx %o0,32,%i4 + xor %o5,%o1,%o1 + sll %l2,5,%i3 !! 18 + or %i4,%g4,%g4 + add %l5,%l1,%l1 !! + xor %g4,%o1,%o1 + srlx %o1,31,%g4 + add %o1,%o1,%o1 + and %g4,%g2,%g4 + andn %o1,%g2,%o1 + srl %l2,27,%i4 !! + or %g4,%o1,%o1 + srlx %o1,32,%g4 + add %i3,%l1,%l1 !! + and %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + add %g4,%l1,%l1 + andn %l0,%l3,%i4 + srl %l3,2,%l3 + or %i4,%i3,%i4 + or %i5,%l3,%l3 + add %i4,%l1,%l1 + sll %l1,5,%i3 !! 19 + add %l5,%l0,%l0 + srl %l1,27,%i4 + add %i3,%l0,%l0 !! + and %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + add %o1,%l0,%l0 + andn %l4,%l2,%i4 + srl %l2,2,%l2 + or %i4,%i3,%i4 + or %i5,%l2,%l2 + add %i4,%l0,%l0 + sllx %o0,32,%g4 ! Xupdate(20) + xor %o3,%o2,%o2 + srlx %o1,32,%i4 + xor %g1,%o2,%o2 + sll %l0,5,%i3 !! 20 + or %i4,%g4,%g4 + add %l6,%l4,%l4 !! + xor %g4,%o2,%o2 + srlx %o2,31,%g4 + add %o2,%o2,%o2 + and %g4,%g2,%g4 + andn %o2,%g2,%o2 + srl %l0,27,%i4 !! + or %g4,%o2,%o2 + srlx %o2,32,%g4 + add %i3,%l4,%l4 !! + xor %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + xor %l3,%i3,%i4 + srl %l1,2,%l1 + add %i4,%l4,%l4 + or %i5,%l1,%l1 + add %g4,%l4,%l4 + sll %l4,5,%i3 !! 21 + add %l6,%l3,%l3 + srl %l4,27,%i4 + add %i3,%l3,%l3 !! + xor %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + xor %l2,%i3,%i4 + srl %l0,2,%l0 + add %i4,%l3,%l3 + or %i5,%l0,%l0 + add %o2,%l3,%l3 + sllx %o1,32,%g4 ! Xupdate(22) + xor %o4,%o3,%o3 + srlx %o2,32,%i4 + xor %o7,%o3,%o3 + sll %l3,5,%i3 !! 22 + or %i4,%g4,%g4 + add %l6,%l2,%l2 !! + xor %g4,%o3,%o3 + srlx %o3,31,%g4 + add %o3,%o3,%o3 + and %g4,%g2,%g4 + andn %o3,%g2,%o3 + srl %l3,27,%i4 !! + or %g4,%o3,%o3 + srlx %o3,32,%g4 + add %i3,%l2,%l2 !! + xor %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + xor %l1,%i3,%i4 + srl %l4,2,%l4 + add %i4,%l2,%l2 + or %i5,%l4,%l4 + add %g4,%l2,%l2 + sll %l2,5,%i3 !! 23 + add %l6,%l1,%l1 + srl %l2,27,%i4 + add %i3,%l1,%l1 !! + xor %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + xor %l0,%i3,%i4 + srl %l3,2,%l3 + add %i4,%l1,%l1 + or %i5,%l3,%l3 + add %o3,%l1,%l1 + sllx %o2,32,%g4 ! Xupdate(24) + xor %o5,%o4,%o4 + srlx %o3,32,%i4 + xor %o0,%o4,%o4 + sll %l1,5,%i3 !! 24 + or %i4,%g4,%g4 + add %l6,%l0,%l0 !! + xor %g4,%o4,%o4 + srlx %o4,31,%g4 + add %o4,%o4,%o4 + and %g4,%g2,%g4 + andn %o4,%g2,%o4 + srl %l1,27,%i4 !! + or %g4,%o4,%o4 + srlx %o4,32,%g4 + add %i3,%l0,%l0 !! + xor %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + xor %l4,%i3,%i4 + srl %l2,2,%l2 + add %i4,%l0,%l0 + or %i5,%l2,%l2 + add %g4,%l0,%l0 + sll %l0,5,%i3 !! 25 + add %l6,%l4,%l4 + srl %l0,27,%i4 + add %i3,%l4,%l4 !! + xor %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + xor %l3,%i3,%i4 + srl %l1,2,%l1 + add %i4,%l4,%l4 + or %i5,%l1,%l1 + add %o4,%l4,%l4 + sllx %o3,32,%g4 ! Xupdate(26) + xor %g1,%o5,%o5 + srlx %o4,32,%i4 + xor %o1,%o5,%o5 + sll %l4,5,%i3 !! 26 + or %i4,%g4,%g4 + add %l6,%l3,%l3 !! + xor %g4,%o5,%o5 + srlx %o5,31,%g4 + add %o5,%o5,%o5 + and %g4,%g2,%g4 + andn %o5,%g2,%o5 + srl %l4,27,%i4 !! + or %g4,%o5,%o5 + srlx %o5,32,%g4 + add %i3,%l3,%l3 !! + xor %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + xor %l2,%i3,%i4 + srl %l0,2,%l0 + add %i4,%l3,%l3 + or %i5,%l0,%l0 + add %g4,%l3,%l3 + sll %l3,5,%i3 !! 27 + add %l6,%l2,%l2 + srl %l3,27,%i4 + add %i3,%l2,%l2 !! + xor %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + xor %l1,%i3,%i4 + srl %l4,2,%l4 + add %i4,%l2,%l2 + or %i5,%l4,%l4 + add %o5,%l2,%l2 + sllx %o4,32,%g4 ! Xupdate(28) + xor %o7,%g1,%g1 + srlx %o5,32,%i4 + xor %o2,%g1,%g1 + sll %l2,5,%i3 !! 28 + or %i4,%g4,%g4 + add %l6,%l1,%l1 !! + xor %g4,%g1,%g1 + srlx %g1,31,%g4 + add %g1,%g1,%g1 + and %g4,%g2,%g4 + andn %g1,%g2,%g1 + srl %l2,27,%i4 !! + or %g4,%g1,%g1 + srlx %g1,32,%g4 + add %i3,%l1,%l1 !! + xor %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + xor %l0,%i3,%i4 + srl %l3,2,%l3 + add %i4,%l1,%l1 + or %i5,%l3,%l3 + add %g4,%l1,%l1 + sll %l1,5,%i3 !! 29 + add %l6,%l0,%l0 + srl %l1,27,%i4 + add %i3,%l0,%l0 !! + xor %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + xor %l4,%i3,%i4 + srl %l2,2,%l2 + add %i4,%l0,%l0 + or %i5,%l2,%l2 + add %g1,%l0,%l0 + sllx %o5,32,%g4 ! Xupdate(30) + xor %o0,%o7,%o7 + srlx %g1,32,%i4 + xor %o3,%o7,%o7 + sll %l0,5,%i3 !! 30 + or %i4,%g4,%g4 + add %l6,%l4,%l4 !! + xor %g4,%o7,%o7 + srlx %o7,31,%g4 + add %o7,%o7,%o7 + and %g4,%g2,%g4 + andn %o7,%g2,%o7 + srl %l0,27,%i4 !! + or %g4,%o7,%o7 + srlx %o7,32,%g4 + add %i3,%l4,%l4 !! + xor %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + xor %l3,%i3,%i4 + srl %l1,2,%l1 + add %i4,%l4,%l4 + or %i5,%l1,%l1 + add %g4,%l4,%l4 + sll %l4,5,%i3 !! 31 + add %l6,%l3,%l3 + srl %l4,27,%i4 + add %i3,%l3,%l3 !! + xor %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + xor %l2,%i3,%i4 + srl %l0,2,%l0 + add %i4,%l3,%l3 + or %i5,%l0,%l0 + add %o7,%l3,%l3 + sllx %g1,32,%g4 ! Xupdate(32) + xor %o1,%o0,%o0 + srlx %o7,32,%i4 + xor %o4,%o0,%o0 + sll %l3,5,%i3 !! 32 + or %i4,%g4,%g4 + add %l6,%l2,%l2 !! + xor %g4,%o0,%o0 + srlx %o0,31,%g4 + add %o0,%o0,%o0 + and %g4,%g2,%g4 + andn %o0,%g2,%o0 + srl %l3,27,%i4 !! + or %g4,%o0,%o0 + srlx %o0,32,%g4 + add %i3,%l2,%l2 !! + xor %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + xor %l1,%i3,%i4 + srl %l4,2,%l4 + add %i4,%l2,%l2 + or %i5,%l4,%l4 + add %g4,%l2,%l2 + sll %l2,5,%i3 !! 33 + add %l6,%l1,%l1 + srl %l2,27,%i4 + add %i3,%l1,%l1 !! + xor %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + xor %l0,%i3,%i4 + srl %l3,2,%l3 + add %i4,%l1,%l1 + or %i5,%l3,%l3 + add %o0,%l1,%l1 + sllx %o7,32,%g4 ! Xupdate(34) + xor %o2,%o1,%o1 + srlx %o0,32,%i4 + xor %o5,%o1,%o1 + sll %l1,5,%i3 !! 34 + or %i4,%g4,%g4 + add %l6,%l0,%l0 !! + xor %g4,%o1,%o1 + srlx %o1,31,%g4 + add %o1,%o1,%o1 + and %g4,%g2,%g4 + andn %o1,%g2,%o1 + srl %l1,27,%i4 !! + or %g4,%o1,%o1 + srlx %o1,32,%g4 + add %i3,%l0,%l0 !! + xor %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + xor %l4,%i3,%i4 + srl %l2,2,%l2 + add %i4,%l0,%l0 + or %i5,%l2,%l2 + add %g4,%l0,%l0 + sll %l0,5,%i3 !! 35 + add %l6,%l4,%l4 + srl %l0,27,%i4 + add %i3,%l4,%l4 !! + xor %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + xor %l3,%i3,%i4 + srl %l1,2,%l1 + add %i4,%l4,%l4 + or %i5,%l1,%l1 + add %o1,%l4,%l4 + sllx %o0,32,%g4 ! Xupdate(36) + xor %o3,%o2,%o2 + srlx %o1,32,%i4 + xor %g1,%o2,%o2 + sll %l4,5,%i3 !! 36 + or %i4,%g4,%g4 + add %l6,%l3,%l3 !! + xor %g4,%o2,%o2 + srlx %o2,31,%g4 + add %o2,%o2,%o2 + and %g4,%g2,%g4 + andn %o2,%g2,%o2 + srl %l4,27,%i4 !! + or %g4,%o2,%o2 + srlx %o2,32,%g4 + add %i3,%l3,%l3 !! + xor %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + xor %l2,%i3,%i4 + srl %l0,2,%l0 + add %i4,%l3,%l3 + or %i5,%l0,%l0 + add %g4,%l3,%l3 + sll %l3,5,%i3 !! 37 + add %l6,%l2,%l2 + srl %l3,27,%i4 + add %i3,%l2,%l2 !! + xor %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + xor %l1,%i3,%i4 + srl %l4,2,%l4 + add %i4,%l2,%l2 + or %i5,%l4,%l4 + add %o2,%l2,%l2 + sllx %o1,32,%g4 ! Xupdate(38) + xor %o4,%o3,%o3 + srlx %o2,32,%i4 + xor %o7,%o3,%o3 + sll %l2,5,%i3 !! 38 + or %i4,%g4,%g4 + add %l6,%l1,%l1 !! + xor %g4,%o3,%o3 + srlx %o3,31,%g4 + add %o3,%o3,%o3 + and %g4,%g2,%g4 + andn %o3,%g2,%o3 + srl %l2,27,%i4 !! + or %g4,%o3,%o3 + srlx %o3,32,%g4 + add %i3,%l1,%l1 !! + xor %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + xor %l0,%i3,%i4 + srl %l3,2,%l3 + add %i4,%l1,%l1 + or %i5,%l3,%l3 + add %g4,%l1,%l1 + sll %l1,5,%i3 !! 39 + add %l6,%l0,%l0 + srl %l1,27,%i4 + add %i3,%l0,%l0 !! + xor %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + xor %l4,%i3,%i4 + srl %l2,2,%l2 + add %i4,%l0,%l0 + or %i5,%l2,%l2 + add %o3,%l0,%l0 + sllx %o2,32,%g4 ! Xupdate(40) + xor %o5,%o4,%o4 + srlx %o3,32,%i4 + xor %o0,%o4,%o4 + sll %l0,5,%i3 !! 40 + or %i4,%g4,%g4 + add %l7,%l4,%l4 !! + xor %g4,%o4,%o4 + srlx %o4,31,%g4 + add %o4,%o4,%o4 + and %g4,%g2,%g4 + andn %o4,%g2,%o4 + srl %l0,27,%i4 !! + or %g4,%o4,%o4 + srlx %o4,32,%g4 + add %i3,%l4,%l4 !! + and %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + or %l2,%l1,%i4 + srl %l1,2,%l1 + and %l3,%i4,%i4 + add %g4,%l4,%l4 + or %i4,%i3,%i4 + or %i5,%l1,%l1 + add %i4,%l4,%l4 + sll %l4,5,%i3 !! 41 + add %l7,%l3,%l3 + srl %l4,27,%i4 + add %i3,%l3,%l3 !! + and %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + or %l1,%l0,%i4 + srl %l0,2,%l0 + and %l2,%i4,%i4 + add %o4,%l3,%l3 + or %i4,%i3,%i4 + or %i5,%l0,%l0 + add %i4,%l3,%l3 + sllx %o3,32,%g4 ! Xupdate(42) + xor %g1,%o5,%o5 + srlx %o4,32,%i4 + xor %o1,%o5,%o5 + sll %l3,5,%i3 !! 42 + or %i4,%g4,%g4 + add %l7,%l2,%l2 !! + xor %g4,%o5,%o5 + srlx %o5,31,%g4 + add %o5,%o5,%o5 + and %g4,%g2,%g4 + andn %o5,%g2,%o5 + srl %l3,27,%i4 !! + or %g4,%o5,%o5 + srlx %o5,32,%g4 + add %i3,%l2,%l2 !! + and %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + or %l0,%l4,%i4 + srl %l4,2,%l4 + and %l1,%i4,%i4 + add %g4,%l2,%l2 + or %i4,%i3,%i4 + or %i5,%l4,%l4 + add %i4,%l2,%l2 + sll %l2,5,%i3 !! 43 + add %l7,%l1,%l1 + srl %l2,27,%i4 + add %i3,%l1,%l1 !! + and %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + or %l4,%l3,%i4 + srl %l3,2,%l3 + and %l0,%i4,%i4 + add %o5,%l1,%l1 + or %i4,%i3,%i4 + or %i5,%l3,%l3 + add %i4,%l1,%l1 + sllx %o4,32,%g4 ! Xupdate(44) + xor %o7,%g1,%g1 + srlx %o5,32,%i4 + xor %o2,%g1,%g1 + sll %l1,5,%i3 !! 44 + or %i4,%g4,%g4 + add %l7,%l0,%l0 !! + xor %g4,%g1,%g1 + srlx %g1,31,%g4 + add %g1,%g1,%g1 + and %g4,%g2,%g4 + andn %g1,%g2,%g1 + srl %l1,27,%i4 !! + or %g4,%g1,%g1 + srlx %g1,32,%g4 + add %i3,%l0,%l0 !! + and %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + or %l3,%l2,%i4 + srl %l2,2,%l2 + and %l4,%i4,%i4 + add %g4,%l0,%l0 + or %i4,%i3,%i4 + or %i5,%l2,%l2 + add %i4,%l0,%l0 + sll %l0,5,%i3 !! 45 + add %l7,%l4,%l4 + srl %l0,27,%i4 + add %i3,%l4,%l4 !! + and %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + or %l2,%l1,%i4 + srl %l1,2,%l1 + and %l3,%i4,%i4 + add %g1,%l4,%l4 + or %i4,%i3,%i4 + or %i5,%l1,%l1 + add %i4,%l4,%l4 + sllx %o5,32,%g4 ! Xupdate(46) + xor %o0,%o7,%o7 + srlx %g1,32,%i4 + xor %o3,%o7,%o7 + sll %l4,5,%i3 !! 46 + or %i4,%g4,%g4 + add %l7,%l3,%l3 !! + xor %g4,%o7,%o7 + srlx %o7,31,%g4 + add %o7,%o7,%o7 + and %g4,%g2,%g4 + andn %o7,%g2,%o7 + srl %l4,27,%i4 !! + or %g4,%o7,%o7 + srlx %o7,32,%g4 + add %i3,%l3,%l3 !! + and %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + or %l1,%l0,%i4 + srl %l0,2,%l0 + and %l2,%i4,%i4 + add %g4,%l3,%l3 + or %i4,%i3,%i4 + or %i5,%l0,%l0 + add %i4,%l3,%l3 + sll %l3,5,%i3 !! 47 + add %l7,%l2,%l2 + srl %l3,27,%i4 + add %i3,%l2,%l2 !! + and %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + or %l0,%l4,%i4 + srl %l4,2,%l4 + and %l1,%i4,%i4 + add %o7,%l2,%l2 + or %i4,%i3,%i4 + or %i5,%l4,%l4 + add %i4,%l2,%l2 + sllx %g1,32,%g4 ! Xupdate(48) + xor %o1,%o0,%o0 + srlx %o7,32,%i4 + xor %o4,%o0,%o0 + sll %l2,5,%i3 !! 48 + or %i4,%g4,%g4 + add %l7,%l1,%l1 !! + xor %g4,%o0,%o0 + srlx %o0,31,%g4 + add %o0,%o0,%o0 + and %g4,%g2,%g4 + andn %o0,%g2,%o0 + srl %l2,27,%i4 !! + or %g4,%o0,%o0 + srlx %o0,32,%g4 + add %i3,%l1,%l1 !! + and %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + or %l4,%l3,%i4 + srl %l3,2,%l3 + and %l0,%i4,%i4 + add %g4,%l1,%l1 + or %i4,%i3,%i4 + or %i5,%l3,%l3 + add %i4,%l1,%l1 + sll %l1,5,%i3 !! 49 + add %l7,%l0,%l0 + srl %l1,27,%i4 + add %i3,%l0,%l0 !! + and %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + or %l3,%l2,%i4 + srl %l2,2,%l2 + and %l4,%i4,%i4 + add %o0,%l0,%l0 + or %i4,%i3,%i4 + or %i5,%l2,%l2 + add %i4,%l0,%l0 + sllx %o7,32,%g4 ! Xupdate(50) + xor %o2,%o1,%o1 + srlx %o0,32,%i4 + xor %o5,%o1,%o1 + sll %l0,5,%i3 !! 50 + or %i4,%g4,%g4 + add %l7,%l4,%l4 !! + xor %g4,%o1,%o1 + srlx %o1,31,%g4 + add %o1,%o1,%o1 + and %g4,%g2,%g4 + andn %o1,%g2,%o1 + srl %l0,27,%i4 !! + or %g4,%o1,%o1 + srlx %o1,32,%g4 + add %i3,%l4,%l4 !! + and %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + or %l2,%l1,%i4 + srl %l1,2,%l1 + and %l3,%i4,%i4 + add %g4,%l4,%l4 + or %i4,%i3,%i4 + or %i5,%l1,%l1 + add %i4,%l4,%l4 + sll %l4,5,%i3 !! 51 + add %l7,%l3,%l3 + srl %l4,27,%i4 + add %i3,%l3,%l3 !! + and %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + or %l1,%l0,%i4 + srl %l0,2,%l0 + and %l2,%i4,%i4 + add %o1,%l3,%l3 + or %i4,%i3,%i4 + or %i5,%l0,%l0 + add %i4,%l3,%l3 + sllx %o0,32,%g4 ! Xupdate(52) + xor %o3,%o2,%o2 + srlx %o1,32,%i4 + xor %g1,%o2,%o2 + sll %l3,5,%i3 !! 52 + or %i4,%g4,%g4 + add %l7,%l2,%l2 !! + xor %g4,%o2,%o2 + srlx %o2,31,%g4 + add %o2,%o2,%o2 + and %g4,%g2,%g4 + andn %o2,%g2,%o2 + srl %l3,27,%i4 !! + or %g4,%o2,%o2 + srlx %o2,32,%g4 + add %i3,%l2,%l2 !! + and %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + or %l0,%l4,%i4 + srl %l4,2,%l4 + and %l1,%i4,%i4 + add %g4,%l2,%l2 + or %i4,%i3,%i4 + or %i5,%l4,%l4 + add %i4,%l2,%l2 + sll %l2,5,%i3 !! 53 + add %l7,%l1,%l1 + srl %l2,27,%i4 + add %i3,%l1,%l1 !! + and %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + or %l4,%l3,%i4 + srl %l3,2,%l3 + and %l0,%i4,%i4 + add %o2,%l1,%l1 + or %i4,%i3,%i4 + or %i5,%l3,%l3 + add %i4,%l1,%l1 + sllx %o1,32,%g4 ! Xupdate(54) + xor %o4,%o3,%o3 + srlx %o2,32,%i4 + xor %o7,%o3,%o3 + sll %l1,5,%i3 !! 54 + or %i4,%g4,%g4 + add %l7,%l0,%l0 !! + xor %g4,%o3,%o3 + srlx %o3,31,%g4 + add %o3,%o3,%o3 + and %g4,%g2,%g4 + andn %o3,%g2,%o3 + srl %l1,27,%i4 !! + or %g4,%o3,%o3 + srlx %o3,32,%g4 + add %i3,%l0,%l0 !! + and %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + or %l3,%l2,%i4 + srl %l2,2,%l2 + and %l4,%i4,%i4 + add %g4,%l0,%l0 + or %i4,%i3,%i4 + or %i5,%l2,%l2 + add %i4,%l0,%l0 + sll %l0,5,%i3 !! 55 + add %l7,%l4,%l4 + srl %l0,27,%i4 + add %i3,%l4,%l4 !! + and %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + or %l2,%l1,%i4 + srl %l1,2,%l1 + and %l3,%i4,%i4 + add %o3,%l4,%l4 + or %i4,%i3,%i4 + or %i5,%l1,%l1 + add %i4,%l4,%l4 + sllx %o2,32,%g4 ! Xupdate(56) + xor %o5,%o4,%o4 + srlx %o3,32,%i4 + xor %o0,%o4,%o4 + sll %l4,5,%i3 !! 56 + or %i4,%g4,%g4 + add %l7,%l3,%l3 !! + xor %g4,%o4,%o4 + srlx %o4,31,%g4 + add %o4,%o4,%o4 + and %g4,%g2,%g4 + andn %o4,%g2,%o4 + srl %l4,27,%i4 !! + or %g4,%o4,%o4 + srlx %o4,32,%g4 + add %i3,%l3,%l3 !! + and %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + or %l1,%l0,%i4 + srl %l0,2,%l0 + and %l2,%i4,%i4 + add %g4,%l3,%l3 + or %i4,%i3,%i4 + or %i5,%l0,%l0 + add %i4,%l3,%l3 + sll %l3,5,%i3 !! 57 + add %l7,%l2,%l2 + srl %l3,27,%i4 + add %i3,%l2,%l2 !! + and %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + or %l0,%l4,%i4 + srl %l4,2,%l4 + and %l1,%i4,%i4 + add %o4,%l2,%l2 + or %i4,%i3,%i4 + or %i5,%l4,%l4 + add %i4,%l2,%l2 + sllx %o3,32,%g4 ! Xupdate(58) + xor %g1,%o5,%o5 + srlx %o4,32,%i4 + xor %o1,%o5,%o5 + sll %l2,5,%i3 !! 58 + or %i4,%g4,%g4 + add %l7,%l1,%l1 !! + xor %g4,%o5,%o5 + srlx %o5,31,%g4 + add %o5,%o5,%o5 + and %g4,%g2,%g4 + andn %o5,%g2,%o5 + srl %l2,27,%i4 !! + or %g4,%o5,%o5 + srlx %o5,32,%g4 + add %i3,%l1,%l1 !! + and %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + or %l4,%l3,%i4 + srl %l3,2,%l3 + and %l0,%i4,%i4 + add %g4,%l1,%l1 + or %i4,%i3,%i4 + or %i5,%l3,%l3 + add %i4,%l1,%l1 + sll %l1,5,%i3 !! 59 + add %l7,%l0,%l0 + srl %l1,27,%i4 + add %i3,%l0,%l0 !! + and %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + or %l3,%l2,%i4 + srl %l2,2,%l2 + and %l4,%i4,%i4 + add %o5,%l0,%l0 + or %i4,%i3,%i4 + or %i5,%l2,%l2 + add %i4,%l0,%l0 + sllx %o4,32,%g4 ! Xupdate(60) + xor %o7,%g1,%g1 + srlx %o5,32,%i4 + xor %o2,%g1,%g1 + sll %l0,5,%i3 !! 60 + or %i4,%g4,%g4 + add %g5,%l4,%l4 !! + xor %g4,%g1,%g1 + srlx %g1,31,%g4 + add %g1,%g1,%g1 + and %g4,%g2,%g4 + andn %g1,%g2,%g1 + srl %l0,27,%i4 !! + or %g4,%g1,%g1 + srlx %g1,32,%g4 + add %i3,%l4,%l4 !! + xor %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + xor %l3,%i3,%i4 + srl %l1,2,%l1 + add %i4,%l4,%l4 + or %i5,%l1,%l1 + add %g4,%l4,%l4 + sll %l4,5,%i3 !! 61 + add %g5,%l3,%l3 + srl %l4,27,%i4 + add %i3,%l3,%l3 !! + xor %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + xor %l2,%i3,%i4 + srl %l0,2,%l0 + add %i4,%l3,%l3 + or %i5,%l0,%l0 + add %g1,%l3,%l3 + sllx %o5,32,%g4 ! Xupdate(62) + xor %o0,%o7,%o7 + srlx %g1,32,%i4 + xor %o3,%o7,%o7 + sll %l3,5,%i3 !! 62 + or %i4,%g4,%g4 + add %g5,%l2,%l2 !! + xor %g4,%o7,%o7 + srlx %o7,31,%g4 + add %o7,%o7,%o7 + and %g4,%g2,%g4 + andn %o7,%g2,%o7 + srl %l3,27,%i4 !! + or %g4,%o7,%o7 + srlx %o7,32,%g4 + add %i3,%l2,%l2 !! + xor %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + xor %l1,%i3,%i4 + srl %l4,2,%l4 + add %i4,%l2,%l2 + or %i5,%l4,%l4 + add %g4,%l2,%l2 + sll %l2,5,%i3 !! 63 + add %g5,%l1,%l1 + srl %l2,27,%i4 + add %i3,%l1,%l1 !! + xor %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + xor %l0,%i3,%i4 + srl %l3,2,%l3 + add %i4,%l1,%l1 + or %i5,%l3,%l3 + add %o7,%l1,%l1 + sllx %g1,32,%g4 ! Xupdate(64) + xor %o1,%o0,%o0 + srlx %o7,32,%i4 + xor %o4,%o0,%o0 + sll %l1,5,%i3 !! 64 + or %i4,%g4,%g4 + add %g5,%l0,%l0 !! + xor %g4,%o0,%o0 + srlx %o0,31,%g4 + add %o0,%o0,%o0 + and %g4,%g2,%g4 + andn %o0,%g2,%o0 + srl %l1,27,%i4 !! + or %g4,%o0,%o0 + srlx %o0,32,%g4 + add %i3,%l0,%l0 !! + xor %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + xor %l4,%i3,%i4 + srl %l2,2,%l2 + add %i4,%l0,%l0 + or %i5,%l2,%l2 + add %g4,%l0,%l0 + sll %l0,5,%i3 !! 65 + add %g5,%l4,%l4 + srl %l0,27,%i4 + add %i3,%l4,%l4 !! + xor %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + xor %l3,%i3,%i4 + srl %l1,2,%l1 + add %i4,%l4,%l4 + or %i5,%l1,%l1 + add %o0,%l4,%l4 + sllx %o7,32,%g4 ! Xupdate(66) + xor %o2,%o1,%o1 + srlx %o0,32,%i4 + xor %o5,%o1,%o1 + sll %l4,5,%i3 !! 66 + or %i4,%g4,%g4 + add %g5,%l3,%l3 !! + xor %g4,%o1,%o1 + srlx %o1,31,%g4 + add %o1,%o1,%o1 + and %g4,%g2,%g4 + andn %o1,%g2,%o1 + srl %l4,27,%i4 !! + or %g4,%o1,%o1 + srlx %o1,32,%g4 + add %i3,%l3,%l3 !! + xor %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + xor %l2,%i3,%i4 + srl %l0,2,%l0 + add %i4,%l3,%l3 + or %i5,%l0,%l0 + add %g4,%l3,%l3 + sll %l3,5,%i3 !! 67 + add %g5,%l2,%l2 + srl %l3,27,%i4 + add %i3,%l2,%l2 !! + xor %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + xor %l1,%i3,%i4 + srl %l4,2,%l4 + add %i4,%l2,%l2 + or %i5,%l4,%l4 + add %o1,%l2,%l2 + sllx %o0,32,%g4 ! Xupdate(68) + xor %o3,%o2,%o2 + srlx %o1,32,%i4 + xor %g1,%o2,%o2 + sll %l2,5,%i3 !! 68 + or %i4,%g4,%g4 + add %g5,%l1,%l1 !! + xor %g4,%o2,%o2 + srlx %o2,31,%g4 + add %o2,%o2,%o2 + and %g4,%g2,%g4 + andn %o2,%g2,%o2 + srl %l2,27,%i4 !! + or %g4,%o2,%o2 + srlx %o2,32,%g4 + add %i3,%l1,%l1 !! + xor %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + xor %l0,%i3,%i4 + srl %l3,2,%l3 + add %i4,%l1,%l1 + or %i5,%l3,%l3 + add %g4,%l1,%l1 + sll %l1,5,%i3 !! 69 + add %g5,%l0,%l0 + srl %l1,27,%i4 + add %i3,%l0,%l0 !! + xor %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + xor %l4,%i3,%i4 + srl %l2,2,%l2 + add %i4,%l0,%l0 + or %i5,%l2,%l2 + add %o2,%l0,%l0 + sllx %o1,32,%g4 ! Xupdate(70) + xor %o4,%o3,%o3 + srlx %o2,32,%i4 + xor %o7,%o3,%o3 + sll %l0,5,%i3 !! 70 + or %i4,%g4,%g4 + add %g5,%l4,%l4 !! + xor %g4,%o3,%o3 + srlx %o3,31,%g4 + add %o3,%o3,%o3 + and %g4,%g2,%g4 + andn %o3,%g2,%o3 + srl %l0,27,%i4 !! + or %g4,%o3,%o3 + srlx %o3,32,%g4 + add %i3,%l4,%l4 !! + xor %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + xor %l3,%i3,%i4 + srl %l1,2,%l1 + add %i4,%l4,%l4 + or %i5,%l1,%l1 + add %g4,%l4,%l4 + sll %l4,5,%i3 !! 71 + add %g5,%l3,%l3 + srl %l4,27,%i4 + add %i3,%l3,%l3 !! + xor %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + xor %l2,%i3,%i4 + srl %l0,2,%l0 + add %i4,%l3,%l3 + or %i5,%l0,%l0 + add %o3,%l3,%l3 + sllx %o2,32,%g4 ! Xupdate(72) + xor %o5,%o4,%o4 + srlx %o3,32,%i4 + xor %o0,%o4,%o4 + sll %l3,5,%i3 !! 72 + or %i4,%g4,%g4 + add %g5,%l2,%l2 !! + xor %g4,%o4,%o4 + srlx %o4,31,%g4 + add %o4,%o4,%o4 + and %g4,%g2,%g4 + andn %o4,%g2,%o4 + srl %l3,27,%i4 !! + or %g4,%o4,%o4 + srlx %o4,32,%g4 + add %i3,%l2,%l2 !! + xor %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + xor %l1,%i3,%i4 + srl %l4,2,%l4 + add %i4,%l2,%l2 + or %i5,%l4,%l4 + add %g4,%l2,%l2 + sll %l2,5,%i3 !! 73 + add %g5,%l1,%l1 + srl %l2,27,%i4 + add %i3,%l1,%l1 !! + xor %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + xor %l0,%i3,%i4 + srl %l3,2,%l3 + add %i4,%l1,%l1 + or %i5,%l3,%l3 + add %o4,%l1,%l1 + sllx %o3,32,%g4 ! Xupdate(74) + xor %g1,%o5,%o5 + srlx %o4,32,%i4 + xor %o1,%o5,%o5 + sll %l1,5,%i3 !! 74 + or %i4,%g4,%g4 + add %g5,%l0,%l0 !! + xor %g4,%o5,%o5 + srlx %o5,31,%g4 + add %o5,%o5,%o5 + and %g4,%g2,%g4 + andn %o5,%g2,%o5 + srl %l1,27,%i4 !! + or %g4,%o5,%o5 + srlx %o5,32,%g4 + add %i3,%l0,%l0 !! + xor %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + xor %l4,%i3,%i4 + srl %l2,2,%l2 + add %i4,%l0,%l0 + or %i5,%l2,%l2 + add %g4,%l0,%l0 + sll %l0,5,%i3 !! 75 + add %g5,%l4,%l4 + srl %l0,27,%i4 + add %i3,%l4,%l4 !! + xor %l2,%l1,%i3 + add %i4,%l4,%l4 + sll %l1,30,%i5 + xor %l3,%i3,%i4 + srl %l1,2,%l1 + add %i4,%l4,%l4 + or %i5,%l1,%l1 + add %o5,%l4,%l4 + sllx %o4,32,%g4 ! Xupdate(76) + xor %o7,%g1,%g1 + srlx %o5,32,%i4 + xor %o2,%g1,%g1 + sll %l4,5,%i3 !! 76 + or %i4,%g4,%g4 + add %g5,%l3,%l3 !! + xor %g4,%g1,%g1 + srlx %g1,31,%g4 + add %g1,%g1,%g1 + and %g4,%g2,%g4 + andn %g1,%g2,%g1 + srl %l4,27,%i4 !! + or %g4,%g1,%g1 + srlx %g1,32,%g4 + add %i3,%l3,%l3 !! + xor %l1,%l0,%i3 + add %i4,%l3,%l3 + sll %l0,30,%i5 + xor %l2,%i3,%i4 + srl %l0,2,%l0 + add %i4,%l3,%l3 + or %i5,%l0,%l0 + add %g4,%l3,%l3 + sll %l3,5,%i3 !! 77 + add %g5,%l2,%l2 + srl %l3,27,%i4 + add %i3,%l2,%l2 !! + xor %l0,%l4,%i3 + add %i4,%l2,%l2 + sll %l4,30,%i5 + xor %l1,%i3,%i4 + srl %l4,2,%l4 + add %i4,%l2,%l2 + or %i5,%l4,%l4 + add %g1,%l2,%l2 + sllx %o5,32,%g4 ! Xupdate(78) + xor %o0,%o7,%o7 + srlx %g1,32,%i4 + xor %o3,%o7,%o7 + sll %l2,5,%i3 !! 78 + or %i4,%g4,%g4 + add %g5,%l1,%l1 !! + xor %g4,%o7,%o7 + srlx %o7,31,%g4 + add %o7,%o7,%o7 + and %g4,%g2,%g4 + andn %o7,%g2,%o7 + srl %l2,27,%i4 !! + or %g4,%o7,%o7 + srlx %o7,32,%g4 + add %i3,%l1,%l1 !! + xor %l4,%l3,%i3 + add %i4,%l1,%l1 + sll %l3,30,%i5 + xor %l0,%i3,%i4 + srl %l3,2,%l3 + add %i4,%l1,%l1 + or %i5,%l3,%l3 + add %g4,%l1,%l1 + sll %l1,5,%i3 !! 79 + add %g5,%l0,%l0 + srl %l1,27,%i4 + add %i3,%l0,%l0 !! + xor %l3,%l2,%i3 + add %i4,%l0,%l0 + sll %l2,30,%i5 + xor %l4,%i3,%i4 + srl %l2,2,%l2 + add %i4,%l0,%l0 + or %i5,%l2,%l2 + add %o7,%l0,%l0 + + ld [%i0+0],%o0 + ld [%i0+4],%o1 + ld [%i0+8],%o2 + ld [%i0+12],%o3 + add %i1,64,%i1 + ld [%i0+16],%o4 + cmp %i1,%i2 + + add %l0,%o0,%l0 + st %l0,[%i0+0] + add %l1,%o1,%l1 + st %l1,[%i0+4] + add %l2,%o2,%l2 + st %l2,[%i0+8] + add %l3,%o3,%l3 + st %l3,[%i0+12] + add %l4,%o4,%l4 + st %l4,[%i0+16] + + bne %icc,.Lloop + andn %i1,7,%i3 + + ret + restore +.type sha1_block_data_order,#function +.size sha1_block_data_order,(.-sha1_block_data_order) +.asciz "SHA1 block transform for SPARCv9, CRYPTOGAMS by <appro@openssl.org>" diff --git a/lib/libcrypto/arch/sparc64/sha512-sparcv9.S b/lib/libcrypto/arch/sparc64/sha512-sparcv9.S new file mode 100644 index 00000000000..0ec1d87cc12 --- /dev/null +++ b/lib/libcrypto/arch/sparc64/sha512-sparcv9.S @@ -0,0 +1,1849 @@ +.section ".text",#alloc,#execinstr + +.align 64 +K256: +.type K256,#object + .long 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5 + .long 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5 + .long 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3 + .long 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174 + .long 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc + .long 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da + .long 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7 + .long 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967 + .long 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13 + .long 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85 + .long 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3 + .long 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070 + .long 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5 + .long 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3 + .long 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208 + .long 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +.size K256,.-K256 +.globl sha256_block_data_order +sha256_block_data_order: + save %sp,-112,%sp + and %i1,7,%i4 + sllx %i2,6,%i2 + andn %i1,7,%i1 + sll %i4,3,%i4 + add %i1,%i2,%i2 +.Lpic: call .+8 + sub %o7,.Lpic-K256,%i3 + + ld [%i0+0],%l0 + ld [%i0+4],%l1 + ld [%i0+8],%l2 + ld [%i0+12],%l3 + ld [%i0+16],%l4 + ld [%i0+20],%l5 + ld [%i0+24],%l6 + ld [%i0+28],%l7 + +.Lloop: + ldx [%i1+0],%o0 + ldx [%i1+16],%o2 + ldx [%i1+32],%o4 + ldx [%i1+48],%g1 + ldx [%i1+8],%o1 + ldx [%i1+24],%o3 + subcc %g0,%i4,%i5 ! should be 64-%i4, but -%i4 works too + ldx [%i1+40],%o5 + bz,pt %icc,.Laligned + ldx [%i1+56],%o7 + + sllx %o0,%i4,%o0 + ldx [%i1+64],%g2 + srlx %o1,%i5,%g4 + sllx %o1,%i4,%o1 + or %g4,%o0,%o0 + srlx %o2,%i5,%g4 + sllx %o2,%i4,%o2 + or %g4,%o1,%o1 + srlx %o3,%i5,%g4 + sllx %o3,%i4,%o3 + or %g4,%o2,%o2 + srlx %o4,%i5,%g4 + sllx %o4,%i4,%o4 + or %g4,%o3,%o3 + srlx %o5,%i5,%g4 + sllx %o5,%i4,%o5 + or %g4,%o4,%o4 + srlx %g1,%i5,%g4 + sllx %g1,%i4,%g1 + or %g4,%o5,%o5 + srlx %o7,%i5,%g4 + sllx %o7,%i4,%o7 + or %g4,%g1,%g1 + srlx %g2,%i5,%g2 + or %g2,%o7,%o7 +.Laligned: + srlx %o0,32,%g2 + add %l7,%g2,%g2 + srl %l4,6,%l7 !! 0 + xor %l5,%l6,%g5 + sll %l4,7,%g4 + and %l4,%g5,%g5 + srl %l4,11,%g3 + xor %g4,%l7,%l7 + sll %l4,21,%g4 + xor %g3,%l7,%l7 + srl %l4,25,%g3 + xor %g4,%l7,%l7 + sll %l4,26,%g4 + xor %g3,%l7,%l7 + xor %l6,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l7,%g3 ! Sigma1(e) + + srl %l0,2,%l7 + add %g5,%g2,%g2 + ld [%i3+0],%g5 ! K[0] + sll %l0,10,%g4 + add %g3,%g2,%g2 + srl %l0,13,%g3 + xor %g4,%l7,%l7 + sll %l0,19,%g4 + xor %g3,%l7,%l7 + srl %l0,22,%g3 + xor %g4,%l7,%l7 + sll %l0,30,%g4 + xor %g3,%l7,%l7 + xor %g4,%l7,%l7 ! Sigma0(a) + + or %l0,%l1,%g3 + and %l0,%l1,%g4 + and %l2,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[0] + add %g4,%l7,%l7 + + add %g2,%l3,%l3 + add %g2,%l7,%l7 + add %o0,%l6,%g2 + srl %l3,6,%l6 !! 1 + xor %l4,%l5,%g5 + sll %l3,7,%g4 + and %l3,%g5,%g5 + srl %l3,11,%g3 + xor %g4,%l6,%l6 + sll %l3,21,%g4 + xor %g3,%l6,%l6 + srl %l3,25,%g3 + xor %g4,%l6,%l6 + sll %l3,26,%g4 + xor %g3,%l6,%l6 + xor %l5,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l6,%g3 ! Sigma1(e) + + srl %l7,2,%l6 + add %g5,%g2,%g2 + ld [%i3+4],%g5 ! K[1] + sll %l7,10,%g4 + add %g3,%g2,%g2 + srl %l7,13,%g3 + xor %g4,%l6,%l6 + sll %l7,19,%g4 + xor %g3,%l6,%l6 + srl %l7,22,%g3 + xor %g4,%l6,%l6 + sll %l7,30,%g4 + xor %g3,%l6,%l6 + xor %g4,%l6,%l6 ! Sigma0(a) + + or %l7,%l0,%g3 + and %l7,%l0,%g4 + and %l1,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[1] + add %g4,%l6,%l6 + + add %g2,%l2,%l2 + add %g2,%l6,%l6 + srlx %o1,32,%g2 + add %l5,%g2,%g2 + srl %l2,6,%l5 !! 2 + xor %l3,%l4,%g5 + sll %l2,7,%g4 + and %l2,%g5,%g5 + srl %l2,11,%g3 + xor %g4,%l5,%l5 + sll %l2,21,%g4 + xor %g3,%l5,%l5 + srl %l2,25,%g3 + xor %g4,%l5,%l5 + sll %l2,26,%g4 + xor %g3,%l5,%l5 + xor %l4,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l5,%g3 ! Sigma1(e) + + srl %l6,2,%l5 + add %g5,%g2,%g2 + ld [%i3+8],%g5 ! K[2] + sll %l6,10,%g4 + add %g3,%g2,%g2 + srl %l6,13,%g3 + xor %g4,%l5,%l5 + sll %l6,19,%g4 + xor %g3,%l5,%l5 + srl %l6,22,%g3 + xor %g4,%l5,%l5 + sll %l6,30,%g4 + xor %g3,%l5,%l5 + xor %g4,%l5,%l5 ! Sigma0(a) + + or %l6,%l7,%g3 + and %l6,%l7,%g4 + and %l0,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[2] + add %g4,%l5,%l5 + + add %g2,%l1,%l1 + add %g2,%l5,%l5 + add %o1,%l4,%g2 + srl %l1,6,%l4 !! 3 + xor %l2,%l3,%g5 + sll %l1,7,%g4 + and %l1,%g5,%g5 + srl %l1,11,%g3 + xor %g4,%l4,%l4 + sll %l1,21,%g4 + xor %g3,%l4,%l4 + srl %l1,25,%g3 + xor %g4,%l4,%l4 + sll %l1,26,%g4 + xor %g3,%l4,%l4 + xor %l3,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l4,%g3 ! Sigma1(e) + + srl %l5,2,%l4 + add %g5,%g2,%g2 + ld [%i3+12],%g5 ! K[3] + sll %l5,10,%g4 + add %g3,%g2,%g2 + srl %l5,13,%g3 + xor %g4,%l4,%l4 + sll %l5,19,%g4 + xor %g3,%l4,%l4 + srl %l5,22,%g3 + xor %g4,%l4,%l4 + sll %l5,30,%g4 + xor %g3,%l4,%l4 + xor %g4,%l4,%l4 ! Sigma0(a) + + or %l5,%l6,%g3 + and %l5,%l6,%g4 + and %l7,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[3] + add %g4,%l4,%l4 + + add %g2,%l0,%l0 + add %g2,%l4,%l4 + srlx %o2,32,%g2 + add %l3,%g2,%g2 + srl %l0,6,%l3 !! 4 + xor %l1,%l2,%g5 + sll %l0,7,%g4 + and %l0,%g5,%g5 + srl %l0,11,%g3 + xor %g4,%l3,%l3 + sll %l0,21,%g4 + xor %g3,%l3,%l3 + srl %l0,25,%g3 + xor %g4,%l3,%l3 + sll %l0,26,%g4 + xor %g3,%l3,%l3 + xor %l2,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l3,%g3 ! Sigma1(e) + + srl %l4,2,%l3 + add %g5,%g2,%g2 + ld [%i3+16],%g5 ! K[4] + sll %l4,10,%g4 + add %g3,%g2,%g2 + srl %l4,13,%g3 + xor %g4,%l3,%l3 + sll %l4,19,%g4 + xor %g3,%l3,%l3 + srl %l4,22,%g3 + xor %g4,%l3,%l3 + sll %l4,30,%g4 + xor %g3,%l3,%l3 + xor %g4,%l3,%l3 ! Sigma0(a) + + or %l4,%l5,%g3 + and %l4,%l5,%g4 + and %l6,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[4] + add %g4,%l3,%l3 + + add %g2,%l7,%l7 + add %g2,%l3,%l3 + add %o2,%l2,%g2 + srl %l7,6,%l2 !! 5 + xor %l0,%l1,%g5 + sll %l7,7,%g4 + and %l7,%g5,%g5 + srl %l7,11,%g3 + xor %g4,%l2,%l2 + sll %l7,21,%g4 + xor %g3,%l2,%l2 + srl %l7,25,%g3 + xor %g4,%l2,%l2 + sll %l7,26,%g4 + xor %g3,%l2,%l2 + xor %l1,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l2,%g3 ! Sigma1(e) + + srl %l3,2,%l2 + add %g5,%g2,%g2 + ld [%i3+20],%g5 ! K[5] + sll %l3,10,%g4 + add %g3,%g2,%g2 + srl %l3,13,%g3 + xor %g4,%l2,%l2 + sll %l3,19,%g4 + xor %g3,%l2,%l2 + srl %l3,22,%g3 + xor %g4,%l2,%l2 + sll %l3,30,%g4 + xor %g3,%l2,%l2 + xor %g4,%l2,%l2 ! Sigma0(a) + + or %l3,%l4,%g3 + and %l3,%l4,%g4 + and %l5,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[5] + add %g4,%l2,%l2 + + add %g2,%l6,%l6 + add %g2,%l2,%l2 + srlx %o3,32,%g2 + add %l1,%g2,%g2 + srl %l6,6,%l1 !! 6 + xor %l7,%l0,%g5 + sll %l6,7,%g4 + and %l6,%g5,%g5 + srl %l6,11,%g3 + xor %g4,%l1,%l1 + sll %l6,21,%g4 + xor %g3,%l1,%l1 + srl %l6,25,%g3 + xor %g4,%l1,%l1 + sll %l6,26,%g4 + xor %g3,%l1,%l1 + xor %l0,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l1,%g3 ! Sigma1(e) + + srl %l2,2,%l1 + add %g5,%g2,%g2 + ld [%i3+24],%g5 ! K[6] + sll %l2,10,%g4 + add %g3,%g2,%g2 + srl %l2,13,%g3 + xor %g4,%l1,%l1 + sll %l2,19,%g4 + xor %g3,%l1,%l1 + srl %l2,22,%g3 + xor %g4,%l1,%l1 + sll %l2,30,%g4 + xor %g3,%l1,%l1 + xor %g4,%l1,%l1 ! Sigma0(a) + + or %l2,%l3,%g3 + and %l2,%l3,%g4 + and %l4,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[6] + add %g4,%l1,%l1 + + add %g2,%l5,%l5 + add %g2,%l1,%l1 + add %o3,%l0,%g2 + srl %l5,6,%l0 !! 7 + xor %l6,%l7,%g5 + sll %l5,7,%g4 + and %l5,%g5,%g5 + srl %l5,11,%g3 + xor %g4,%l0,%l0 + sll %l5,21,%g4 + xor %g3,%l0,%l0 + srl %l5,25,%g3 + xor %g4,%l0,%l0 + sll %l5,26,%g4 + xor %g3,%l0,%l0 + xor %l7,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l0,%g3 ! Sigma1(e) + + srl %l1,2,%l0 + add %g5,%g2,%g2 + ld [%i3+28],%g5 ! K[7] + sll %l1,10,%g4 + add %g3,%g2,%g2 + srl %l1,13,%g3 + xor %g4,%l0,%l0 + sll %l1,19,%g4 + xor %g3,%l0,%l0 + srl %l1,22,%g3 + xor %g4,%l0,%l0 + sll %l1,30,%g4 + xor %g3,%l0,%l0 + xor %g4,%l0,%l0 ! Sigma0(a) + + or %l1,%l2,%g3 + and %l1,%l2,%g4 + and %l3,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[7] + add %g4,%l0,%l0 + + add %g2,%l4,%l4 + add %g2,%l0,%l0 + srlx %o4,32,%g2 + add %l7,%g2,%g2 + srl %l4,6,%l7 !! 8 + xor %l5,%l6,%g5 + sll %l4,7,%g4 + and %l4,%g5,%g5 + srl %l4,11,%g3 + xor %g4,%l7,%l7 + sll %l4,21,%g4 + xor %g3,%l7,%l7 + srl %l4,25,%g3 + xor %g4,%l7,%l7 + sll %l4,26,%g4 + xor %g3,%l7,%l7 + xor %l6,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l7,%g3 ! Sigma1(e) + + srl %l0,2,%l7 + add %g5,%g2,%g2 + ld [%i3+32],%g5 ! K[8] + sll %l0,10,%g4 + add %g3,%g2,%g2 + srl %l0,13,%g3 + xor %g4,%l7,%l7 + sll %l0,19,%g4 + xor %g3,%l7,%l7 + srl %l0,22,%g3 + xor %g4,%l7,%l7 + sll %l0,30,%g4 + xor %g3,%l7,%l7 + xor %g4,%l7,%l7 ! Sigma0(a) + + or %l0,%l1,%g3 + and %l0,%l1,%g4 + and %l2,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[8] + add %g4,%l7,%l7 + + add %g2,%l3,%l3 + add %g2,%l7,%l7 + add %o4,%l6,%g2 + srl %l3,6,%l6 !! 9 + xor %l4,%l5,%g5 + sll %l3,7,%g4 + and %l3,%g5,%g5 + srl %l3,11,%g3 + xor %g4,%l6,%l6 + sll %l3,21,%g4 + xor %g3,%l6,%l6 + srl %l3,25,%g3 + xor %g4,%l6,%l6 + sll %l3,26,%g4 + xor %g3,%l6,%l6 + xor %l5,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l6,%g3 ! Sigma1(e) + + srl %l7,2,%l6 + add %g5,%g2,%g2 + ld [%i3+36],%g5 ! K[9] + sll %l7,10,%g4 + add %g3,%g2,%g2 + srl %l7,13,%g3 + xor %g4,%l6,%l6 + sll %l7,19,%g4 + xor %g3,%l6,%l6 + srl %l7,22,%g3 + xor %g4,%l6,%l6 + sll %l7,30,%g4 + xor %g3,%l6,%l6 + xor %g4,%l6,%l6 ! Sigma0(a) + + or %l7,%l0,%g3 + and %l7,%l0,%g4 + and %l1,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[9] + add %g4,%l6,%l6 + + add %g2,%l2,%l2 + add %g2,%l6,%l6 + srlx %o5,32,%g2 + add %l5,%g2,%g2 + srl %l2,6,%l5 !! 10 + xor %l3,%l4,%g5 + sll %l2,7,%g4 + and %l2,%g5,%g5 + srl %l2,11,%g3 + xor %g4,%l5,%l5 + sll %l2,21,%g4 + xor %g3,%l5,%l5 + srl %l2,25,%g3 + xor %g4,%l5,%l5 + sll %l2,26,%g4 + xor %g3,%l5,%l5 + xor %l4,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l5,%g3 ! Sigma1(e) + + srl %l6,2,%l5 + add %g5,%g2,%g2 + ld [%i3+40],%g5 ! K[10] + sll %l6,10,%g4 + add %g3,%g2,%g2 + srl %l6,13,%g3 + xor %g4,%l5,%l5 + sll %l6,19,%g4 + xor %g3,%l5,%l5 + srl %l6,22,%g3 + xor %g4,%l5,%l5 + sll %l6,30,%g4 + xor %g3,%l5,%l5 + xor %g4,%l5,%l5 ! Sigma0(a) + + or %l6,%l7,%g3 + and %l6,%l7,%g4 + and %l0,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[10] + add %g4,%l5,%l5 + + add %g2,%l1,%l1 + add %g2,%l5,%l5 + add %o5,%l4,%g2 + srl %l1,6,%l4 !! 11 + xor %l2,%l3,%g5 + sll %l1,7,%g4 + and %l1,%g5,%g5 + srl %l1,11,%g3 + xor %g4,%l4,%l4 + sll %l1,21,%g4 + xor %g3,%l4,%l4 + srl %l1,25,%g3 + xor %g4,%l4,%l4 + sll %l1,26,%g4 + xor %g3,%l4,%l4 + xor %l3,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l4,%g3 ! Sigma1(e) + + srl %l5,2,%l4 + add %g5,%g2,%g2 + ld [%i3+44],%g5 ! K[11] + sll %l5,10,%g4 + add %g3,%g2,%g2 + srl %l5,13,%g3 + xor %g4,%l4,%l4 + sll %l5,19,%g4 + xor %g3,%l4,%l4 + srl %l5,22,%g3 + xor %g4,%l4,%l4 + sll %l5,30,%g4 + xor %g3,%l4,%l4 + xor %g4,%l4,%l4 ! Sigma0(a) + + or %l5,%l6,%g3 + and %l5,%l6,%g4 + and %l7,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[11] + add %g4,%l4,%l4 + + add %g2,%l0,%l0 + add %g2,%l4,%l4 + srlx %g1,32,%g2 + add %l3,%g2,%g2 + srl %l0,6,%l3 !! 12 + xor %l1,%l2,%g5 + sll %l0,7,%g4 + and %l0,%g5,%g5 + srl %l0,11,%g3 + xor %g4,%l3,%l3 + sll %l0,21,%g4 + xor %g3,%l3,%l3 + srl %l0,25,%g3 + xor %g4,%l3,%l3 + sll %l0,26,%g4 + xor %g3,%l3,%l3 + xor %l2,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l3,%g3 ! Sigma1(e) + + srl %l4,2,%l3 + add %g5,%g2,%g2 + ld [%i3+48],%g5 ! K[12] + sll %l4,10,%g4 + add %g3,%g2,%g2 + srl %l4,13,%g3 + xor %g4,%l3,%l3 + sll %l4,19,%g4 + xor %g3,%l3,%l3 + srl %l4,22,%g3 + xor %g4,%l3,%l3 + sll %l4,30,%g4 + xor %g3,%l3,%l3 + xor %g4,%l3,%l3 ! Sigma0(a) + + or %l4,%l5,%g3 + and %l4,%l5,%g4 + and %l6,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[12] + add %g4,%l3,%l3 + + add %g2,%l7,%l7 + add %g2,%l3,%l3 + add %g1,%l2,%g2 + srl %l7,6,%l2 !! 13 + xor %l0,%l1,%g5 + sll %l7,7,%g4 + and %l7,%g5,%g5 + srl %l7,11,%g3 + xor %g4,%l2,%l2 + sll %l7,21,%g4 + xor %g3,%l2,%l2 + srl %l7,25,%g3 + xor %g4,%l2,%l2 + sll %l7,26,%g4 + xor %g3,%l2,%l2 + xor %l1,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l2,%g3 ! Sigma1(e) + + srl %l3,2,%l2 + add %g5,%g2,%g2 + ld [%i3+52],%g5 ! K[13] + sll %l3,10,%g4 + add %g3,%g2,%g2 + srl %l3,13,%g3 + xor %g4,%l2,%l2 + sll %l3,19,%g4 + xor %g3,%l2,%l2 + srl %l3,22,%g3 + xor %g4,%l2,%l2 + sll %l3,30,%g4 + xor %g3,%l2,%l2 + xor %g4,%l2,%l2 ! Sigma0(a) + + or %l3,%l4,%g3 + and %l3,%l4,%g4 + and %l5,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[13] + add %g4,%l2,%l2 + + add %g2,%l6,%l6 + add %g2,%l2,%l2 + srlx %o7,32,%g2 + add %l1,%g2,%g2 + srl %l6,6,%l1 !! 14 + xor %l7,%l0,%g5 + sll %l6,7,%g4 + and %l6,%g5,%g5 + srl %l6,11,%g3 + xor %g4,%l1,%l1 + sll %l6,21,%g4 + xor %g3,%l1,%l1 + srl %l6,25,%g3 + xor %g4,%l1,%l1 + sll %l6,26,%g4 + xor %g3,%l1,%l1 + xor %l0,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l1,%g3 ! Sigma1(e) + + srl %l2,2,%l1 + add %g5,%g2,%g2 + ld [%i3+56],%g5 ! K[14] + sll %l2,10,%g4 + add %g3,%g2,%g2 + srl %l2,13,%g3 + xor %g4,%l1,%l1 + sll %l2,19,%g4 + xor %g3,%l1,%l1 + srl %l2,22,%g3 + xor %g4,%l1,%l1 + sll %l2,30,%g4 + xor %g3,%l1,%l1 + xor %g4,%l1,%l1 ! Sigma0(a) + + or %l2,%l3,%g3 + and %l2,%l3,%g4 + and %l4,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[14] + add %g4,%l1,%l1 + + add %g2,%l5,%l5 + add %g2,%l1,%l1 + add %o7,%l0,%g2 + srl %l5,6,%l0 !! 15 + xor %l6,%l7,%g5 + sll %l5,7,%g4 + and %l5,%g5,%g5 + srl %l5,11,%g3 + xor %g4,%l0,%l0 + sll %l5,21,%g4 + xor %g3,%l0,%l0 + srl %l5,25,%g3 + xor %g4,%l0,%l0 + sll %l5,26,%g4 + xor %g3,%l0,%l0 + xor %l7,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l0,%g3 ! Sigma1(e) + + srl %l1,2,%l0 + add %g5,%g2,%g2 + ld [%i3+60],%g5 ! K[15] + sll %l1,10,%g4 + add %g3,%g2,%g2 + srl %l1,13,%g3 + xor %g4,%l0,%l0 + sll %l1,19,%g4 + xor %g3,%l0,%l0 + srl %l1,22,%g3 + xor %g4,%l0,%l0 + sll %l1,30,%g4 + xor %g3,%l0,%l0 + xor %g4,%l0,%l0 ! Sigma0(a) + + or %l1,%l2,%g3 + and %l1,%l2,%g4 + and %l3,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[15] + add %g4,%l0,%l0 + + add %g2,%l4,%l4 + add %g2,%l0,%l0 +.L16_xx: + srl %o0,3,%g2 !! Xupdate(16) + sll %o0,14,%g4 + srl %o0,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %o0,18,%g3 + xor %g4,%g2,%g2 + srlx %o7,32,%i5 + srl %i5,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %i5,13,%g4 + srl %i5,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %i5,19,%g3 + xor %g4,%g5,%g5 + srlx %o0,32,%g4 ! X[i] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o0,0,%o0 + add %o4,%g2,%g2 ! +=X[i+9] + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + sllx %g2,32,%g3 + or %g3,%o0,%o0 + add %l7,%g2,%g2 + srl %l4,6,%l7 !! 16 + xor %l5,%l6,%g5 + sll %l4,7,%g4 + and %l4,%g5,%g5 + srl %l4,11,%g3 + xor %g4,%l7,%l7 + sll %l4,21,%g4 + xor %g3,%l7,%l7 + srl %l4,25,%g3 + xor %g4,%l7,%l7 + sll %l4,26,%g4 + xor %g3,%l7,%l7 + xor %l6,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l7,%g3 ! Sigma1(e) + + srl %l0,2,%l7 + add %g5,%g2,%g2 + ld [%i3+64],%g5 ! K[16] + sll %l0,10,%g4 + add %g3,%g2,%g2 + srl %l0,13,%g3 + xor %g4,%l7,%l7 + sll %l0,19,%g4 + xor %g3,%l7,%l7 + srl %l0,22,%g3 + xor %g4,%l7,%l7 + sll %l0,30,%g4 + xor %g3,%l7,%l7 + xor %g4,%l7,%l7 ! Sigma0(a) + + or %l0,%l1,%g3 + and %l0,%l1,%g4 + and %l2,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[16] + add %g4,%l7,%l7 + + add %g2,%l3,%l3 + add %g2,%l7,%l7 + srlx %o1,32,%i5 + srl %i5,3,%g2 !! Xupdate(17) + sll %i5,14,%g4 + srl %i5,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %i5,18,%g3 + xor %g4,%g2,%g2 + srl %o7,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %o7,13,%g4 + srl %o7,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %o7,19,%g3 + xor %g4,%g5,%g5 + srlx %o5,32,%g4 ! X[i+9] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o0,0,%g3 + add %o0,%g2,%g2 ! +=X[i] + xor %g3,%o0,%o0 + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + srl %g2,0,%g2 + or %g2,%o0,%o0 + add %l6,%g2,%g2 + srl %l3,6,%l6 !! 17 + xor %l4,%l5,%g5 + sll %l3,7,%g4 + and %l3,%g5,%g5 + srl %l3,11,%g3 + xor %g4,%l6,%l6 + sll %l3,21,%g4 + xor %g3,%l6,%l6 + srl %l3,25,%g3 + xor %g4,%l6,%l6 + sll %l3,26,%g4 + xor %g3,%l6,%l6 + xor %l5,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l6,%g3 ! Sigma1(e) + + srl %l7,2,%l6 + add %g5,%g2,%g2 + ld [%i3+68],%g5 ! K[17] + sll %l7,10,%g4 + add %g3,%g2,%g2 + srl %l7,13,%g3 + xor %g4,%l6,%l6 + sll %l7,19,%g4 + xor %g3,%l6,%l6 + srl %l7,22,%g3 + xor %g4,%l6,%l6 + sll %l7,30,%g4 + xor %g3,%l6,%l6 + xor %g4,%l6,%l6 ! Sigma0(a) + + or %l7,%l0,%g3 + and %l7,%l0,%g4 + and %l1,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[17] + add %g4,%l6,%l6 + + add %g2,%l2,%l2 + add %g2,%l6,%l6 + srl %o1,3,%g2 !! Xupdate(18) + sll %o1,14,%g4 + srl %o1,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %o1,18,%g3 + xor %g4,%g2,%g2 + srlx %o0,32,%i5 + srl %i5,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %i5,13,%g4 + srl %i5,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %i5,19,%g3 + xor %g4,%g5,%g5 + srlx %o1,32,%g4 ! X[i] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o1,0,%o1 + add %o5,%g2,%g2 ! +=X[i+9] + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + sllx %g2,32,%g3 + or %g3,%o1,%o1 + add %l5,%g2,%g2 + srl %l2,6,%l5 !! 18 + xor %l3,%l4,%g5 + sll %l2,7,%g4 + and %l2,%g5,%g5 + srl %l2,11,%g3 + xor %g4,%l5,%l5 + sll %l2,21,%g4 + xor %g3,%l5,%l5 + srl %l2,25,%g3 + xor %g4,%l5,%l5 + sll %l2,26,%g4 + xor %g3,%l5,%l5 + xor %l4,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l5,%g3 ! Sigma1(e) + + srl %l6,2,%l5 + add %g5,%g2,%g2 + ld [%i3+72],%g5 ! K[18] + sll %l6,10,%g4 + add %g3,%g2,%g2 + srl %l6,13,%g3 + xor %g4,%l5,%l5 + sll %l6,19,%g4 + xor %g3,%l5,%l5 + srl %l6,22,%g3 + xor %g4,%l5,%l5 + sll %l6,30,%g4 + xor %g3,%l5,%l5 + xor %g4,%l5,%l5 ! Sigma0(a) + + or %l6,%l7,%g3 + and %l6,%l7,%g4 + and %l0,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[18] + add %g4,%l5,%l5 + + add %g2,%l1,%l1 + add %g2,%l5,%l5 + srlx %o2,32,%i5 + srl %i5,3,%g2 !! Xupdate(19) + sll %i5,14,%g4 + srl %i5,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %i5,18,%g3 + xor %g4,%g2,%g2 + srl %o0,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %o0,13,%g4 + srl %o0,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %o0,19,%g3 + xor %g4,%g5,%g5 + srlx %g1,32,%g4 ! X[i+9] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o1,0,%g3 + add %o1,%g2,%g2 ! +=X[i] + xor %g3,%o1,%o1 + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + srl %g2,0,%g2 + or %g2,%o1,%o1 + add %l4,%g2,%g2 + srl %l1,6,%l4 !! 19 + xor %l2,%l3,%g5 + sll %l1,7,%g4 + and %l1,%g5,%g5 + srl %l1,11,%g3 + xor %g4,%l4,%l4 + sll %l1,21,%g4 + xor %g3,%l4,%l4 + srl %l1,25,%g3 + xor %g4,%l4,%l4 + sll %l1,26,%g4 + xor %g3,%l4,%l4 + xor %l3,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l4,%g3 ! Sigma1(e) + + srl %l5,2,%l4 + add %g5,%g2,%g2 + ld [%i3+76],%g5 ! K[19] + sll %l5,10,%g4 + add %g3,%g2,%g2 + srl %l5,13,%g3 + xor %g4,%l4,%l4 + sll %l5,19,%g4 + xor %g3,%l4,%l4 + srl %l5,22,%g3 + xor %g4,%l4,%l4 + sll %l5,30,%g4 + xor %g3,%l4,%l4 + xor %g4,%l4,%l4 ! Sigma0(a) + + or %l5,%l6,%g3 + and %l5,%l6,%g4 + and %l7,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[19] + add %g4,%l4,%l4 + + add %g2,%l0,%l0 + add %g2,%l4,%l4 + srl %o2,3,%g2 !! Xupdate(20) + sll %o2,14,%g4 + srl %o2,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %o2,18,%g3 + xor %g4,%g2,%g2 + srlx %o1,32,%i5 + srl %i5,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %i5,13,%g4 + srl %i5,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %i5,19,%g3 + xor %g4,%g5,%g5 + srlx %o2,32,%g4 ! X[i] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o2,0,%o2 + add %g1,%g2,%g2 ! +=X[i+9] + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + sllx %g2,32,%g3 + or %g3,%o2,%o2 + add %l3,%g2,%g2 + srl %l0,6,%l3 !! 20 + xor %l1,%l2,%g5 + sll %l0,7,%g4 + and %l0,%g5,%g5 + srl %l0,11,%g3 + xor %g4,%l3,%l3 + sll %l0,21,%g4 + xor %g3,%l3,%l3 + srl %l0,25,%g3 + xor %g4,%l3,%l3 + sll %l0,26,%g4 + xor %g3,%l3,%l3 + xor %l2,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l3,%g3 ! Sigma1(e) + + srl %l4,2,%l3 + add %g5,%g2,%g2 + ld [%i3+80],%g5 ! K[20] + sll %l4,10,%g4 + add %g3,%g2,%g2 + srl %l4,13,%g3 + xor %g4,%l3,%l3 + sll %l4,19,%g4 + xor %g3,%l3,%l3 + srl %l4,22,%g3 + xor %g4,%l3,%l3 + sll %l4,30,%g4 + xor %g3,%l3,%l3 + xor %g4,%l3,%l3 ! Sigma0(a) + + or %l4,%l5,%g3 + and %l4,%l5,%g4 + and %l6,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[20] + add %g4,%l3,%l3 + + add %g2,%l7,%l7 + add %g2,%l3,%l3 + srlx %o3,32,%i5 + srl %i5,3,%g2 !! Xupdate(21) + sll %i5,14,%g4 + srl %i5,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %i5,18,%g3 + xor %g4,%g2,%g2 + srl %o1,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %o1,13,%g4 + srl %o1,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %o1,19,%g3 + xor %g4,%g5,%g5 + srlx %o7,32,%g4 ! X[i+9] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o2,0,%g3 + add %o2,%g2,%g2 ! +=X[i] + xor %g3,%o2,%o2 + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + srl %g2,0,%g2 + or %g2,%o2,%o2 + add %l2,%g2,%g2 + srl %l7,6,%l2 !! 21 + xor %l0,%l1,%g5 + sll %l7,7,%g4 + and %l7,%g5,%g5 + srl %l7,11,%g3 + xor %g4,%l2,%l2 + sll %l7,21,%g4 + xor %g3,%l2,%l2 + srl %l7,25,%g3 + xor %g4,%l2,%l2 + sll %l7,26,%g4 + xor %g3,%l2,%l2 + xor %l1,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l2,%g3 ! Sigma1(e) + + srl %l3,2,%l2 + add %g5,%g2,%g2 + ld [%i3+84],%g5 ! K[21] + sll %l3,10,%g4 + add %g3,%g2,%g2 + srl %l3,13,%g3 + xor %g4,%l2,%l2 + sll %l3,19,%g4 + xor %g3,%l2,%l2 + srl %l3,22,%g3 + xor %g4,%l2,%l2 + sll %l3,30,%g4 + xor %g3,%l2,%l2 + xor %g4,%l2,%l2 ! Sigma0(a) + + or %l3,%l4,%g3 + and %l3,%l4,%g4 + and %l5,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[21] + add %g4,%l2,%l2 + + add %g2,%l6,%l6 + add %g2,%l2,%l2 + srl %o3,3,%g2 !! Xupdate(22) + sll %o3,14,%g4 + srl %o3,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %o3,18,%g3 + xor %g4,%g2,%g2 + srlx %o2,32,%i5 + srl %i5,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %i5,13,%g4 + srl %i5,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %i5,19,%g3 + xor %g4,%g5,%g5 + srlx %o3,32,%g4 ! X[i] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o3,0,%o3 + add %o7,%g2,%g2 ! +=X[i+9] + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + sllx %g2,32,%g3 + or %g3,%o3,%o3 + add %l1,%g2,%g2 + srl %l6,6,%l1 !! 22 + xor %l7,%l0,%g5 + sll %l6,7,%g4 + and %l6,%g5,%g5 + srl %l6,11,%g3 + xor %g4,%l1,%l1 + sll %l6,21,%g4 + xor %g3,%l1,%l1 + srl %l6,25,%g3 + xor %g4,%l1,%l1 + sll %l6,26,%g4 + xor %g3,%l1,%l1 + xor %l0,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l1,%g3 ! Sigma1(e) + + srl %l2,2,%l1 + add %g5,%g2,%g2 + ld [%i3+88],%g5 ! K[22] + sll %l2,10,%g4 + add %g3,%g2,%g2 + srl %l2,13,%g3 + xor %g4,%l1,%l1 + sll %l2,19,%g4 + xor %g3,%l1,%l1 + srl %l2,22,%g3 + xor %g4,%l1,%l1 + sll %l2,30,%g4 + xor %g3,%l1,%l1 + xor %g4,%l1,%l1 ! Sigma0(a) + + or %l2,%l3,%g3 + and %l2,%l3,%g4 + and %l4,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[22] + add %g4,%l1,%l1 + + add %g2,%l5,%l5 + add %g2,%l1,%l1 + srlx %o4,32,%i5 + srl %i5,3,%g2 !! Xupdate(23) + sll %i5,14,%g4 + srl %i5,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %i5,18,%g3 + xor %g4,%g2,%g2 + srl %o2,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %o2,13,%g4 + srl %o2,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %o2,19,%g3 + xor %g4,%g5,%g5 + srlx %o0,32,%g4 ! X[i+9] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o3,0,%g3 + add %o3,%g2,%g2 ! +=X[i] + xor %g3,%o3,%o3 + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + srl %g2,0,%g2 + or %g2,%o3,%o3 + add %l0,%g2,%g2 + srl %l5,6,%l0 !! 23 + xor %l6,%l7,%g5 + sll %l5,7,%g4 + and %l5,%g5,%g5 + srl %l5,11,%g3 + xor %g4,%l0,%l0 + sll %l5,21,%g4 + xor %g3,%l0,%l0 + srl %l5,25,%g3 + xor %g4,%l0,%l0 + sll %l5,26,%g4 + xor %g3,%l0,%l0 + xor %l7,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l0,%g3 ! Sigma1(e) + + srl %l1,2,%l0 + add %g5,%g2,%g2 + ld [%i3+92],%g5 ! K[23] + sll %l1,10,%g4 + add %g3,%g2,%g2 + srl %l1,13,%g3 + xor %g4,%l0,%l0 + sll %l1,19,%g4 + xor %g3,%l0,%l0 + srl %l1,22,%g3 + xor %g4,%l0,%l0 + sll %l1,30,%g4 + xor %g3,%l0,%l0 + xor %g4,%l0,%l0 ! Sigma0(a) + + or %l1,%l2,%g3 + and %l1,%l2,%g4 + and %l3,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[23] + add %g4,%l0,%l0 + + add %g2,%l4,%l4 + add %g2,%l0,%l0 + srl %o4,3,%g2 !! Xupdate(24) + sll %o4,14,%g4 + srl %o4,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %o4,18,%g3 + xor %g4,%g2,%g2 + srlx %o3,32,%i5 + srl %i5,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %i5,13,%g4 + srl %i5,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %i5,19,%g3 + xor %g4,%g5,%g5 + srlx %o4,32,%g4 ! X[i] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o4,0,%o4 + add %o0,%g2,%g2 ! +=X[i+9] + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + sllx %g2,32,%g3 + or %g3,%o4,%o4 + add %l7,%g2,%g2 + srl %l4,6,%l7 !! 24 + xor %l5,%l6,%g5 + sll %l4,7,%g4 + and %l4,%g5,%g5 + srl %l4,11,%g3 + xor %g4,%l7,%l7 + sll %l4,21,%g4 + xor %g3,%l7,%l7 + srl %l4,25,%g3 + xor %g4,%l7,%l7 + sll %l4,26,%g4 + xor %g3,%l7,%l7 + xor %l6,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l7,%g3 ! Sigma1(e) + + srl %l0,2,%l7 + add %g5,%g2,%g2 + ld [%i3+96],%g5 ! K[24] + sll %l0,10,%g4 + add %g3,%g2,%g2 + srl %l0,13,%g3 + xor %g4,%l7,%l7 + sll %l0,19,%g4 + xor %g3,%l7,%l7 + srl %l0,22,%g3 + xor %g4,%l7,%l7 + sll %l0,30,%g4 + xor %g3,%l7,%l7 + xor %g4,%l7,%l7 ! Sigma0(a) + + or %l0,%l1,%g3 + and %l0,%l1,%g4 + and %l2,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[24] + add %g4,%l7,%l7 + + add %g2,%l3,%l3 + add %g2,%l7,%l7 + srlx %o5,32,%i5 + srl %i5,3,%g2 !! Xupdate(25) + sll %i5,14,%g4 + srl %i5,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %i5,18,%g3 + xor %g4,%g2,%g2 + srl %o3,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %o3,13,%g4 + srl %o3,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %o3,19,%g3 + xor %g4,%g5,%g5 + srlx %o1,32,%g4 ! X[i+9] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o4,0,%g3 + add %o4,%g2,%g2 ! +=X[i] + xor %g3,%o4,%o4 + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + srl %g2,0,%g2 + or %g2,%o4,%o4 + add %l6,%g2,%g2 + srl %l3,6,%l6 !! 25 + xor %l4,%l5,%g5 + sll %l3,7,%g4 + and %l3,%g5,%g5 + srl %l3,11,%g3 + xor %g4,%l6,%l6 + sll %l3,21,%g4 + xor %g3,%l6,%l6 + srl %l3,25,%g3 + xor %g4,%l6,%l6 + sll %l3,26,%g4 + xor %g3,%l6,%l6 + xor %l5,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l6,%g3 ! Sigma1(e) + + srl %l7,2,%l6 + add %g5,%g2,%g2 + ld [%i3+100],%g5 ! K[25] + sll %l7,10,%g4 + add %g3,%g2,%g2 + srl %l7,13,%g3 + xor %g4,%l6,%l6 + sll %l7,19,%g4 + xor %g3,%l6,%l6 + srl %l7,22,%g3 + xor %g4,%l6,%l6 + sll %l7,30,%g4 + xor %g3,%l6,%l6 + xor %g4,%l6,%l6 ! Sigma0(a) + + or %l7,%l0,%g3 + and %l7,%l0,%g4 + and %l1,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[25] + add %g4,%l6,%l6 + + add %g2,%l2,%l2 + add %g2,%l6,%l6 + srl %o5,3,%g2 !! Xupdate(26) + sll %o5,14,%g4 + srl %o5,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %o5,18,%g3 + xor %g4,%g2,%g2 + srlx %o4,32,%i5 + srl %i5,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %i5,13,%g4 + srl %i5,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %i5,19,%g3 + xor %g4,%g5,%g5 + srlx %o5,32,%g4 ! X[i] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o5,0,%o5 + add %o1,%g2,%g2 ! +=X[i+9] + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + sllx %g2,32,%g3 + or %g3,%o5,%o5 + add %l5,%g2,%g2 + srl %l2,6,%l5 !! 26 + xor %l3,%l4,%g5 + sll %l2,7,%g4 + and %l2,%g5,%g5 + srl %l2,11,%g3 + xor %g4,%l5,%l5 + sll %l2,21,%g4 + xor %g3,%l5,%l5 + srl %l2,25,%g3 + xor %g4,%l5,%l5 + sll %l2,26,%g4 + xor %g3,%l5,%l5 + xor %l4,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l5,%g3 ! Sigma1(e) + + srl %l6,2,%l5 + add %g5,%g2,%g2 + ld [%i3+104],%g5 ! K[26] + sll %l6,10,%g4 + add %g3,%g2,%g2 + srl %l6,13,%g3 + xor %g4,%l5,%l5 + sll %l6,19,%g4 + xor %g3,%l5,%l5 + srl %l6,22,%g3 + xor %g4,%l5,%l5 + sll %l6,30,%g4 + xor %g3,%l5,%l5 + xor %g4,%l5,%l5 ! Sigma0(a) + + or %l6,%l7,%g3 + and %l6,%l7,%g4 + and %l0,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[26] + add %g4,%l5,%l5 + + add %g2,%l1,%l1 + add %g2,%l5,%l5 + srlx %g1,32,%i5 + srl %i5,3,%g2 !! Xupdate(27) + sll %i5,14,%g4 + srl %i5,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %i5,18,%g3 + xor %g4,%g2,%g2 + srl %o4,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %o4,13,%g4 + srl %o4,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %o4,19,%g3 + xor %g4,%g5,%g5 + srlx %o2,32,%g4 ! X[i+9] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o5,0,%g3 + add %o5,%g2,%g2 ! +=X[i] + xor %g3,%o5,%o5 + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + srl %g2,0,%g2 + or %g2,%o5,%o5 + add %l4,%g2,%g2 + srl %l1,6,%l4 !! 27 + xor %l2,%l3,%g5 + sll %l1,7,%g4 + and %l1,%g5,%g5 + srl %l1,11,%g3 + xor %g4,%l4,%l4 + sll %l1,21,%g4 + xor %g3,%l4,%l4 + srl %l1,25,%g3 + xor %g4,%l4,%l4 + sll %l1,26,%g4 + xor %g3,%l4,%l4 + xor %l3,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l4,%g3 ! Sigma1(e) + + srl %l5,2,%l4 + add %g5,%g2,%g2 + ld [%i3+108],%g5 ! K[27] + sll %l5,10,%g4 + add %g3,%g2,%g2 + srl %l5,13,%g3 + xor %g4,%l4,%l4 + sll %l5,19,%g4 + xor %g3,%l4,%l4 + srl %l5,22,%g3 + xor %g4,%l4,%l4 + sll %l5,30,%g4 + xor %g3,%l4,%l4 + xor %g4,%l4,%l4 ! Sigma0(a) + + or %l5,%l6,%g3 + and %l5,%l6,%g4 + and %l7,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[27] + add %g4,%l4,%l4 + + add %g2,%l0,%l0 + add %g2,%l4,%l4 + srl %g1,3,%g2 !! Xupdate(28) + sll %g1,14,%g4 + srl %g1,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %g1,18,%g3 + xor %g4,%g2,%g2 + srlx %o5,32,%i5 + srl %i5,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %i5,13,%g4 + srl %i5,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %i5,19,%g3 + xor %g4,%g5,%g5 + srlx %g1,32,%g4 ! X[i] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %g1,0,%g1 + add %o2,%g2,%g2 ! +=X[i+9] + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + sllx %g2,32,%g3 + or %g3,%g1,%g1 + add %l3,%g2,%g2 + srl %l0,6,%l3 !! 28 + xor %l1,%l2,%g5 + sll %l0,7,%g4 + and %l0,%g5,%g5 + srl %l0,11,%g3 + xor %g4,%l3,%l3 + sll %l0,21,%g4 + xor %g3,%l3,%l3 + srl %l0,25,%g3 + xor %g4,%l3,%l3 + sll %l0,26,%g4 + xor %g3,%l3,%l3 + xor %l2,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l3,%g3 ! Sigma1(e) + + srl %l4,2,%l3 + add %g5,%g2,%g2 + ld [%i3+112],%g5 ! K[28] + sll %l4,10,%g4 + add %g3,%g2,%g2 + srl %l4,13,%g3 + xor %g4,%l3,%l3 + sll %l4,19,%g4 + xor %g3,%l3,%l3 + srl %l4,22,%g3 + xor %g4,%l3,%l3 + sll %l4,30,%g4 + xor %g3,%l3,%l3 + xor %g4,%l3,%l3 ! Sigma0(a) + + or %l4,%l5,%g3 + and %l4,%l5,%g4 + and %l6,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[28] + add %g4,%l3,%l3 + + add %g2,%l7,%l7 + add %g2,%l3,%l3 + srlx %o7,32,%i5 + srl %i5,3,%g2 !! Xupdate(29) + sll %i5,14,%g4 + srl %i5,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %i5,18,%g3 + xor %g4,%g2,%g2 + srl %o5,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %o5,13,%g4 + srl %o5,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %o5,19,%g3 + xor %g4,%g5,%g5 + srlx %o3,32,%g4 ! X[i+9] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %g1,0,%g3 + add %g1,%g2,%g2 ! +=X[i] + xor %g3,%g1,%g1 + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + srl %g2,0,%g2 + or %g2,%g1,%g1 + add %l2,%g2,%g2 + srl %l7,6,%l2 !! 29 + xor %l0,%l1,%g5 + sll %l7,7,%g4 + and %l7,%g5,%g5 + srl %l7,11,%g3 + xor %g4,%l2,%l2 + sll %l7,21,%g4 + xor %g3,%l2,%l2 + srl %l7,25,%g3 + xor %g4,%l2,%l2 + sll %l7,26,%g4 + xor %g3,%l2,%l2 + xor %l1,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l2,%g3 ! Sigma1(e) + + srl %l3,2,%l2 + add %g5,%g2,%g2 + ld [%i3+116],%g5 ! K[29] + sll %l3,10,%g4 + add %g3,%g2,%g2 + srl %l3,13,%g3 + xor %g4,%l2,%l2 + sll %l3,19,%g4 + xor %g3,%l2,%l2 + srl %l3,22,%g3 + xor %g4,%l2,%l2 + sll %l3,30,%g4 + xor %g3,%l2,%l2 + xor %g4,%l2,%l2 ! Sigma0(a) + + or %l3,%l4,%g3 + and %l3,%l4,%g4 + and %l5,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[29] + add %g4,%l2,%l2 + + add %g2,%l6,%l6 + add %g2,%l2,%l2 + srl %o7,3,%g2 !! Xupdate(30) + sll %o7,14,%g4 + srl %o7,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %o7,18,%g3 + xor %g4,%g2,%g2 + srlx %g1,32,%i5 + srl %i5,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %i5,13,%g4 + srl %i5,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %i5,19,%g3 + xor %g4,%g5,%g5 + srlx %o7,32,%g4 ! X[i] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o7,0,%o7 + add %o3,%g2,%g2 ! +=X[i+9] + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + sllx %g2,32,%g3 + or %g3,%o7,%o7 + add %l1,%g2,%g2 + srl %l6,6,%l1 !! 30 + xor %l7,%l0,%g5 + sll %l6,7,%g4 + and %l6,%g5,%g5 + srl %l6,11,%g3 + xor %g4,%l1,%l1 + sll %l6,21,%g4 + xor %g3,%l1,%l1 + srl %l6,25,%g3 + xor %g4,%l1,%l1 + sll %l6,26,%g4 + xor %g3,%l1,%l1 + xor %l0,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l1,%g3 ! Sigma1(e) + + srl %l2,2,%l1 + add %g5,%g2,%g2 + ld [%i3+120],%g5 ! K[30] + sll %l2,10,%g4 + add %g3,%g2,%g2 + srl %l2,13,%g3 + xor %g4,%l1,%l1 + sll %l2,19,%g4 + xor %g3,%l1,%l1 + srl %l2,22,%g3 + xor %g4,%l1,%l1 + sll %l2,30,%g4 + xor %g3,%l1,%l1 + xor %g4,%l1,%l1 ! Sigma0(a) + + or %l2,%l3,%g3 + and %l2,%l3,%g4 + and %l4,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[30] + add %g4,%l1,%l1 + + add %g2,%l5,%l5 + add %g2,%l1,%l1 + srlx %o0,32,%i5 + srl %i5,3,%g2 !! Xupdate(31) + sll %i5,14,%g4 + srl %i5,7,%g3 + xor %g4,%g2,%g2 + sll %g4,11,%g4 + xor %g3,%g2,%g2 + srl %i5,18,%g3 + xor %g4,%g2,%g2 + srl %g1,10,%g5 + xor %g3,%g2,%g2 ! T1=sigma0(X[i+1]) + sll %g1,13,%g4 + srl %g1,17,%g3 + xor %g4,%g5,%g5 + sll %g4,2,%g4 + xor %g3,%g5,%g5 + srl %g1,19,%g3 + xor %g4,%g5,%g5 + srlx %o4,32,%g4 ! X[i+9] + xor %g3,%g5,%g5 ! sigma1(X[i+14]) + srl %o7,0,%g3 + add %o7,%g2,%g2 ! +=X[i] + xor %g3,%o7,%o7 + add %g5,%g2,%g2 + add %g4,%g2,%g2 + + srl %g2,0,%g2 + or %g2,%o7,%o7 + add %l0,%g2,%g2 + srl %l5,6,%l0 !! 31 + xor %l6,%l7,%g5 + sll %l5,7,%g4 + and %l5,%g5,%g5 + srl %l5,11,%g3 + xor %g4,%l0,%l0 + sll %l5,21,%g4 + xor %g3,%l0,%l0 + srl %l5,25,%g3 + xor %g4,%l0,%l0 + sll %l5,26,%g4 + xor %g3,%l0,%l0 + xor %l7,%g5,%g5 ! Ch(e,f,g) + xor %g4,%l0,%g3 ! Sigma1(e) + + srl %l1,2,%l0 + add %g5,%g2,%g2 + ld [%i3+124],%g5 ! K[31] + sll %l1,10,%g4 + add %g3,%g2,%g2 + srl %l1,13,%g3 + xor %g4,%l0,%l0 + sll %l1,19,%g4 + xor %g3,%l0,%l0 + srl %l1,22,%g3 + xor %g4,%l0,%l0 + sll %l1,30,%g4 + xor %g3,%l0,%l0 + xor %g4,%l0,%l0 ! Sigma0(a) + + or %l1,%l2,%g3 + and %l1,%l2,%g4 + and %l3,%g3,%g3 + or %g3,%g4,%g4 ! Maj(a,b,c) + add %g5,%g2,%g2 ! +=K[31] + add %g4,%l0,%l0 + + add %g2,%l4,%l4 + add %g2,%l0,%l0 + and %g5,0xfff,%g5 + cmp %g5,2290 + bne .L16_xx + add %i3,64,%i3 ! Ktbl+=16 + + ld [%i0+0],%o0 + ld [%i0+4],%o1 + ld [%i0+8],%o2 + ld [%i0+12],%o3 + ld [%i0+16],%o4 + ld [%i0+20],%o5 + ld [%i0+24],%g1 + ld [%i0+28],%o7 + + add %l0,%o0,%l0 + st %l0,[%i0+0] + add %l1,%o1,%l1 + st %l1,[%i0+4] + add %l2,%o2,%l2 + st %l2,[%i0+8] + add %l3,%o3,%l3 + st %l3,[%i0+12] + add %l4,%o4,%l4 + st %l4,[%i0+16] + add %l5,%o5,%l5 + st %l5,[%i0+20] + add %l6,%g1,%l6 + st %l6,[%i0+24] + add %l7,%o7,%l7 + st %l7,[%i0+28] + add %i1,64,%i1 ! advance inp + cmp %i1,%i2 + bne %icc,.Lloop + sub %i3,192,%i3 ! rewind Ktbl + + ret + restore +.type sha256_block_data_order,#function +.size sha256_block_data_order,(.-sha256_block_data_order) +.asciz "SHA256 block transform for SPARCv9, CRYPTOGAMS by <appro@openssl.org>" diff --git a/lib/libcrypto/arch/sparc64/sparcv9-mont.S b/lib/libcrypto/arch/sparc64/sparcv9-mont.S new file mode 100644 index 00000000000..e1f884f1175 --- /dev/null +++ b/lib/libcrypto/arch/sparc64/sparcv9-mont.S @@ -0,0 +1,515 @@ +.section ".text",#alloc,#execinstr + +.global bn_mul_mont_int +.align 32 +bn_mul_mont_int: + cmp %o5,4 ! 128 bits minimum + bge,pt %icc,.Lenter + sethi %hi(0xffffffff),%g1 + retl + clr %o0 +.align 32 +.Lenter: + save %sp,-192,%sp + sll %i5,2,%i5 ! num*=4 + or %g1,%lo(0xffffffff),%g1 + ld [%i4],%i4 + cmp %i1,%i2 + and %i5,%g1,%i5 + ld [%i2],%l2 ! bp[0] + nop + + add %sp,2047,%o7 ! real top of stack + ld [%i1],%o0 ! ap[0] ! redundant in squaring context + sub %o7,%i5,%o7 + ld [%i1+4],%l5 ! ap[1] + and %o7,-1024,%o7 + ld [%i3],%o1 ! np[0] + sub %o7,2047,%sp ! alloca + ld [%i3+4],%l6 ! np[1] + be,pt %xcc,.Lbn_sqr_mont + mov 12,%l1 + + mulx %o0,%l2,%o0 ! ap[0]*bp[0] + mulx %l5,%l2,%g4 !prologue! ap[1]*bp[0] + and %o0,%g1,%o3 + add %sp,2047+192,%l4 + ld [%i1+8],%l5 !prologue! + + mulx %i4,%o3,%l3 ! "t[0]"*n0 + and %l3,%g1,%l3 + + mulx %o1,%l3,%o1 ! np[0]*"t[0]"*n0 + mulx %l6,%l3,%o4 !prologue! np[1]*"t[0]"*n0 + srlx %o0,32,%o0 + add %o3,%o1,%o1 + ld [%i3+8],%l6 !prologue! + srlx %o1,32,%o1 + mov %g4,%o3 !prologue! + +.L1st: + mulx %l5,%l2,%g4 + mulx %l6,%l3,%g5 + add %o3,%o0,%o0 + ld [%i1+%l1],%l5 ! ap[j] + and %o0,%g1,%o3 + add %o4,%o1,%o1 + ld [%i3+%l1],%l6 ! np[j] + srlx %o0,32,%o0 + add %o3,%o1,%o1 + add %l1,4,%l1 ! j++ + mov %g4,%o3 + st %o1,[%l4] + cmp %l1,%i5 + mov %g5,%o4 + srlx %o1,32,%o1 + bl %icc,.L1st + add %l4,4,%l4 ! tp++ +!.L1st + + mulx %l5,%l2,%g4 !epilogue! + mulx %l6,%l3,%g5 + add %o3,%o0,%o0 + and %o0,%g1,%o3 + add %o4,%o1,%o1 + srlx %o0,32,%o0 + add %o3,%o1,%o1 + st %o1,[%l4] + srlx %o1,32,%o1 + + add %g4,%o0,%o0 + and %o0,%g1,%o3 + add %g5,%o1,%o1 + srlx %o0,32,%o0 + add %o3,%o1,%o1 + st %o1,[%l4+4] + srlx %o1,32,%o1 + + add %o0,%o1,%o1 + st %o1,[%l4+8] + srlx %o1,32,%o2 + + mov 4,%l0 ! i++ + ld [%i2+4],%l2 ! bp[1] +.Louter: + add %sp,2047+192,%l4 + ld [%i1],%o0 ! ap[0] + ld [%i1+4],%l5 ! ap[1] + ld [%i3],%o1 ! np[0] + ld [%i3+4],%l6 ! np[1] + ld [%l4],%g5 ! tp[0] + ld [%l4+4],%l7 ! tp[1] + mov 12,%l1 + + mulx %o0,%l2,%o0 + mulx %l5,%l2,%g4 !prologue! + add %g5,%o0,%o0 + ld [%i1+8],%l5 !prologue! + and %o0,%g1,%o3 + + mulx %i4,%o3,%l3 + and %l3,%g1,%l3 + + mulx %o1,%l3,%o1 + mulx %l6,%l3,%o4 !prologue! + srlx %o0,32,%o0 + add %o3,%o1,%o1 + ld [%i3+8],%l6 !prologue! + srlx %o1,32,%o1 + mov %g4,%o3 !prologue! + +.Linner: + mulx %l5,%l2,%g4 + mulx %l6,%l3,%g5 + add %l7,%o0,%o0 + ld [%i1+%l1],%l5 ! ap[j] + add %o3,%o0,%o0 + add %o4,%o1,%o1 + ld [%i3+%l1],%l6 ! np[j] + and %o0,%g1,%o3 + ld [%l4+8],%l7 ! tp[j] + srlx %o0,32,%o0 + add %o3,%o1,%o1 + add %l1,4,%l1 ! j++ + mov %g4,%o3 + st %o1,[%l4] ! tp[j-1] + srlx %o1,32,%o1 + mov %g5,%o4 + cmp %l1,%i5 + bl %icc,.Linner + add %l4,4,%l4 ! tp++ +!.Linner + + mulx %l5,%l2,%g4 !epilogue! + mulx %l6,%l3,%g5 + add %l7,%o0,%o0 + add %o3,%o0,%o0 + ld [%l4+8],%l7 ! tp[j] + and %o0,%g1,%o3 + add %o4,%o1,%o1 + srlx %o0,32,%o0 + add %o3,%o1,%o1 + st %o1,[%l4] ! tp[j-1] + srlx %o1,32,%o1 + + add %l7,%o0,%o0 + add %g4,%o0,%o0 + and %o0,%g1,%o3 + add %g5,%o1,%o1 + add %o3,%o1,%o1 + st %o1,[%l4+4] ! tp[j-1] + srlx %o0,32,%o0 + add %l0,4,%l0 ! i++ + srlx %o1,32,%o1 + + add %o0,%o1,%o1 + cmp %l0,%i5 + add %o2,%o1,%o1 + st %o1,[%l4+8] + + srlx %o1,32,%o2 + bl,a %icc,.Louter + ld [%i2+%l0],%l2 ! bp[i] +!.Louter + + add %l4,12,%l4 + +.Ltail: + add %i3,%i5,%i3 + add %i0,%i5,%i0 + mov %l4,%i1 + sub %g0,%i5,%o7 ! k=-num + ba .Lsub + subcc %g0,%g0,%g0 ! clear %icc.c +.align 16 +.Lsub: + ld [%l4+%o7],%o0 + ld [%i3+%o7],%o1 + subccc %o0,%o1,%o1 ! tp[j]-np[j] + add %i0,%o7,%l0 + add %o7,4,%o7 + brnz %o7,.Lsub + st %o1,[%l0] + subc %o2,0,%o2 ! handle upmost overflow bit + and %l4,%o2,%i1 + andn %i0,%o2,%i3 + or %i1,%i3,%i1 + sub %g0,%i5,%o7 + +.Lcopy: + ld [%i1+%o7],%o0 ! copy or in-place refresh + st %g0,[%l4+%o7] ! zap tp + st %o0,[%i0+%o7] + add %o7,4,%o7 + brnz %o7,.Lcopy + nop + mov 1,%i0 + ret + restore +.align 32 +.Lbn_sqr_mont: + mulx %l2,%l2,%o0 ! ap[0]*ap[0] + mulx %l5,%l2,%g4 !prologue! + and %o0,%g1,%o3 + add %sp,2047+192,%l4 + ld [%i1+8],%l5 !prologue! + + mulx %i4,%o3,%l3 ! "t[0]"*n0 + srlx %o0,32,%o0 + and %l3,%g1,%l3 + + mulx %o1,%l3,%o1 ! np[0]*"t[0]"*n0 + mulx %l6,%l3,%o4 !prologue! + and %o0,1,%i2 + ld [%i3+8],%l6 !prologue! + srlx %o0,1,%o0 + add %o3,%o1,%o1 + srlx %o1,32,%o1 + mov %g4,%o3 !prologue! + +.Lsqr_1st: + mulx %l5,%l2,%g4 + mulx %l6,%l3,%g5 + add %o3,%o0,%o0 ! ap[j]*a0+c0 + add %o4,%o1,%o1 + ld [%i1+%l1],%l5 ! ap[j] + and %o0,%g1,%o3 + ld [%i3+%l1],%l6 ! np[j] + srlx %o0,32,%o0 + add %o3,%o3,%o3 + or %i2,%o3,%o3 + mov %g5,%o4 + srlx %o3,32,%i2 + add %l1,4,%l1 ! j++ + and %o3,%g1,%o3 + cmp %l1,%i5 + add %o3,%o1,%o1 + st %o1,[%l4] + mov %g4,%o3 + srlx %o1,32,%o1 + bl %icc,.Lsqr_1st + add %l4,4,%l4 ! tp++ +!.Lsqr_1st + + mulx %l5,%l2,%g4 ! epilogue + mulx %l6,%l3,%g5 + add %o3,%o0,%o0 ! ap[j]*a0+c0 + add %o4,%o1,%o1 + and %o0,%g1,%o3 + srlx %o0,32,%o0 + add %o3,%o3,%o3 + or %i2,%o3,%o3 + srlx %o3,32,%i2 + and %o3,%g1,%o3 + add %o3,%o1,%o1 + st %o1,[%l4] + srlx %o1,32,%o1 + + add %g4,%o0,%o0 ! ap[j]*a0+c0 + add %g5,%o1,%o1 + and %o0,%g1,%o3 + srlx %o0,32,%o0 + add %o3,%o3,%o3 + or %i2,%o3,%o3 + srlx %o3,32,%i2 + and %o3,%g1,%o3 + add %o3,%o1,%o1 + st %o1,[%l4+4] + srlx %o1,32,%o1 + + add %o0,%o0,%o0 + or %i2,%o0,%o0 + add %o0,%o1,%o1 + st %o1,[%l4+8] + srlx %o1,32,%o2 + + ld [%sp+2047+192],%g4 ! tp[0] + ld [%sp+2047+192+4],%g5 ! tp[1] + ld [%sp+2047+192+8],%l7 ! tp[2] + ld [%i1+4],%l2 ! ap[1] + ld [%i1+8],%l5 ! ap[2] + ld [%i3],%o1 ! np[0] + ld [%i3+4],%l6 ! np[1] + mulx %i4,%g4,%l3 + + mulx %l2,%l2,%o0 + and %l3,%g1,%l3 + + mulx %o1,%l3,%o1 + mulx %l6,%l3,%o4 + add %g4,%o1,%o1 + and %o0,%g1,%o3 + ld [%i3+8],%l6 ! np[2] + srlx %o1,32,%o1 + add %g5,%o1,%o1 + srlx %o0,32,%o0 + add %o3,%o1,%o1 + and %o0,1,%i2 + add %o4,%o1,%o1 + srlx %o0,1,%o0 + mov 12,%l1 + st %o1,[%sp+2047+192] ! tp[0]= + srlx %o1,32,%o1 + add %sp,2047+192+4,%l4 + +.Lsqr_2nd: + mulx %l5,%l2,%o3 + mulx %l6,%l3,%o4 + add %o3,%o0,%o0 + add %l7,%o1,%o1 + ld [%i1+%l1],%l5 ! ap[j] + and %o0,%g1,%o3 + ld [%i3+%l1],%l6 ! np[j] + srlx %o0,32,%o0 + add %o4,%o1,%o1 + ld [%l4+8],%l7 ! tp[j] + add %o3,%o3,%o3 + add %l1,4,%l1 ! j++ + or %i2,%o3,%o3 + srlx %o3,32,%i2 + and %o3,%g1,%o3 + cmp %l1,%i5 + add %o3,%o1,%o1 + st %o1,[%l4] ! tp[j-1] + srlx %o1,32,%o1 + bl %icc,.Lsqr_2nd + add %l4,4,%l4 ! tp++ +!.Lsqr_2nd + + mulx %l5,%l2,%o3 + mulx %l6,%l3,%o4 + add %o3,%o0,%o0 + add %l7,%o1,%o1 + and %o0,%g1,%o3 + srlx %o0,32,%o0 + add %o4,%o1,%o1 + add %o3,%o3,%o3 + or %i2,%o3,%o3 + srlx %o3,32,%i2 + and %o3,%g1,%o3 + add %o3,%o1,%o1 + st %o1,[%l4] ! tp[j-1] + srlx %o1,32,%o1 + + add %o0,%o0,%o0 + or %i2,%o0,%o0 + add %o0,%o1,%o1 + add %o2,%o1,%o1 + st %o1,[%l4+4] + srlx %o1,32,%o2 + + ld [%sp+2047+192],%g5 ! tp[0] + ld [%sp+2047+192+4],%l7 ! tp[1] + ld [%i1+8],%l2 ! ap[2] + ld [%i3],%o1 ! np[0] + ld [%i3+4],%l6 ! np[1] + mulx %i4,%g5,%l3 + and %l3,%g1,%l3 + mov 8,%l0 + + mulx %l2,%l2,%o0 + mulx %o1,%l3,%o1 + and %o0,%g1,%o3 + add %g5,%o1,%o1 + srlx %o0,32,%o0 + add %sp,2047+192,%l4 + srlx %o1,32,%o1 + and %o0,1,%i2 + srlx %o0,1,%o0 + mov 4,%l1 + +.Lsqr_outer: +.Lsqr_inner1: + mulx %l6,%l3,%o4 + add %l7,%o1,%o1 + add %l1,4,%l1 + ld [%l4+8],%l7 + cmp %l1,%l0 + add %o4,%o1,%o1 + ld [%i3+%l1],%l6 + st %o1,[%l4] + srlx %o1,32,%o1 + bl %icc,.Lsqr_inner1 + add %l4,4,%l4 +!.Lsqr_inner1 + + add %l1,4,%l1 + ld [%i1+%l1],%l5 ! ap[j] + mulx %l6,%l3,%o4 + add %l7,%o1,%o1 + ld [%i3+%l1],%l6 ! np[j] + add %o3,%o1,%o1 + ld [%l4+8],%l7 ! tp[j] + add %o4,%o1,%o1 + st %o1,[%l4] + srlx %o1,32,%o1 + + add %l1,4,%l1 + cmp %l1,%i5 + be,pn %icc,.Lsqr_no_inner2 + add %l4,4,%l4 + +.Lsqr_inner2: + mulx %l5,%l2,%o3 + mulx %l6,%l3,%o4 + add %l7,%o1,%o1 + add %o3,%o0,%o0 + ld [%i1+%l1],%l5 ! ap[j] + and %o0,%g1,%o3 + ld [%i3+%l1],%l6 ! np[j] + srlx %o0,32,%o0 + add %o3,%o3,%o3 + ld [%l4+8],%l7 ! tp[j] + or %i2,%o3,%o3 + add %l1,4,%l1 ! j++ + srlx %o3,32,%i2 + and %o3,%g1,%o3 + cmp %l1,%i5 + add %o3,%o1,%o1 + add %o4,%o1,%o1 + st %o1,[%l4] ! tp[j-1] + srlx %o1,32,%o1 + bl %icc,.Lsqr_inner2 + add %l4,4,%l4 ! tp++ + +.Lsqr_no_inner2: + mulx %l5,%l2,%o3 + mulx %l6,%l3,%o4 + add %l7,%o1,%o1 + add %o3,%o0,%o0 + and %o0,%g1,%o3 + srlx %o0,32,%o0 + add %o3,%o3,%o3 + or %i2,%o3,%o3 + srlx %o3,32,%i2 + and %o3,%g1,%o3 + add %o3,%o1,%o1 + add %o4,%o1,%o1 + st %o1,[%l4] ! tp[j-1] + srlx %o1,32,%o1 + + add %o0,%o0,%o0 + or %i2,%o0,%o0 + add %o0,%o1,%o1 + add %o2,%o1,%o1 + st %o1,[%l4+4] + srlx %o1,32,%o2 + + add %l0,4,%l0 ! i++ + ld [%sp+2047+192],%g5 ! tp[0] + ld [%sp+2047+192+4],%l7 ! tp[1] + ld [%i1+%l0],%l2 ! ap[j] + ld [%i3],%o1 ! np[0] + ld [%i3+4],%l6 ! np[1] + mulx %i4,%g5,%l3 + and %l3,%g1,%l3 + add %l0,4,%g4 + + mulx %l2,%l2,%o0 + mulx %o1,%l3,%o1 + and %o0,%g1,%o3 + add %g5,%o1,%o1 + srlx %o0,32,%o0 + add %sp,2047+192,%l4 + srlx %o1,32,%o1 + and %o0,1,%i2 + srlx %o0,1,%o0 + + cmp %g4,%i5 ! i<num-1 + bl %icc,.Lsqr_outer + mov 4,%l1 + +.Lsqr_last: + mulx %l6,%l3,%o4 + add %l7,%o1,%o1 + add %l1,4,%l1 + ld [%l4+8],%l7 + cmp %l1,%l0 + add %o4,%o1,%o1 + ld [%i3+%l1],%l6 + st %o1,[%l4] + srlx %o1,32,%o1 + bl %icc,.Lsqr_last + add %l4,4,%l4 +!.Lsqr_last + + mulx %l6,%l3,%o4 + add %l7,%o1,%o1 + add %o3,%o1,%o1 + add %o4,%o1,%o1 + st %o1,[%l4] + srlx %o1,32,%o1 + + add %o0,%o0,%o0 ! recover %o0 + or %i2,%o0,%o0 + add %o0,%o1,%o1 + add %o2,%o1,%o1 + st %o1,[%l4+4] + srlx %o1,32,%o2 + + ba .Ltail + add %l4,8,%l4 +.type bn_mul_mont_int,#function +.size bn_mul_mont_int,(.-bn_mul_mont_int) +.asciz "Montgomery Multipltication for SPARCv9, CRYPTOGAMS by <appro@openssl.org>" +.align 32 diff --git a/lib/libcrypto/arch/sparc64/sparcv9a-mont.S b/lib/libcrypto/arch/sparc64/sparcv9a-mont.S new file mode 100644 index 00000000000..54491c0d9b0 --- /dev/null +++ b/lib/libcrypto/arch/sparc64/sparcv9a-mont.S @@ -0,0 +1,741 @@ +.section ".text",#alloc,#execinstr + +.global bn_mul_mont_fpu +.align 32 +bn_mul_mont_fpu: + save %sp,-192-64,%sp + + cmp %i5,4 + bl,a,pn %icc,.Lret + clr %i0 + andcc %i5,1,%g0 ! %i5 has to be even... + bnz,a,pn %icc,.Lret + clr %i0 ! signal "unsupported input value" + + srl %i5,1,%i5 + sethi %hi(0xffff),%l7 + ld [%i4+0],%g4 ! %g4 reassigned, remember? + or %l7,%lo(0xffff),%l7 + ld [%i4+4],%o0 + sllx %o0,32,%o0 + or %o0,%g4,%g4 ! %g4=n0[1].n0[0] + + sll %i5,3,%i5 ! num*=8 + + add %sp,2047,%o0 ! real top of stack + sll %i5,2,%o1 + add %o1,%i5,%o1 ! %o1=num*5 + sub %o0,%o1,%o0 + and %o0,-2048,%o0 ! optimize TLB utilization + sub %o0,2047,%sp ! alloca(5*num*8) + + rd %asi,%o7 ! save %asi + add %sp,2047+192+64,%l0 + add %l0,%i5,%l1 + add %l1,%i5,%l1 ! [an]p_[lh] point at the vectors' ends ! + add %l1,%i5,%l2 + add %l2,%i5,%l3 + add %l3,%i5,%l4 + + wr %g0,210,%asi ! setup %asi for 16-bit FP loads + + add %i0,%i5,%i0 ! readjust input pointers to point + add %i1,%i5,%i1 ! at the ends too... + add %i2,%i5,%i2 + add %i3,%i5,%i3 + + stx %o7,[%sp+2047+192+48] ! save %asi + + sub %g0,%i5,%l5 ! i=-num + sub %g0,%i5,%l6 ! j=-num + + add %i1,%l6,%o3 + add %i2,%l5,%o4 + + ld [%o3+4],%g1 ! bp[0] + ld [%o3+0],%o0 + ld [%o4+4],%g5 ! ap[0] + sllx %g1,32,%g1 + ld [%o4+0],%o1 + sllx %g5,32,%g5 + or %g1,%o0,%o0 + or %g5,%o1,%o1 + + add %i3,%l6,%o5 + + mulx %o1,%o0,%o0 ! ap[0]*bp[0] + mulx %g4,%o0,%o0 ! ap[0]*bp[0]*n0 + stx %o0,[%sp+2047+192+0] + + ld [%o3+0],%f17 ! load a[j] as pair of 32-bit words + .word 0xa1b00c20 ! fzeros %f16 + ld [%o3+4],%f19 + .word 0xa5b00c20 ! fzeros %f18 + ld [%o5+0],%f21 ! load n[j] as pair of 32-bit words + .word 0xa9b00c20 ! fzeros %f20 + ld [%o5+4],%f23 + .word 0xadb00c20 ! fzeros %f22 + + ! transfer b[i] to FPU as 4x16-bit values + ldda [%o4+2]%asi,%f0 + fxtod %f16,%f16 + ldda [%o4+0]%asi,%f2 + fxtod %f18,%f18 + ldda [%o4+6]%asi,%f4 + fxtod %f20,%f20 + ldda [%o4+4]%asi,%f6 + fxtod %f22,%f22 + + ! transfer ap[0]*b[0]*n0 to FPU as 4x16-bit values + ldda [%sp+2047+192+6]%asi,%f8 + fxtod %f0,%f0 + ldda [%sp+2047+192+4]%asi,%f10 + fxtod %f2,%f2 + ldda [%sp+2047+192+2]%asi,%f12 + fxtod %f4,%f4 + ldda [%sp+2047+192+0]%asi,%f14 + fxtod %f6,%f6 + + std %f16,[%l1+%l6] ! save smashed ap[j] in double format + fxtod %f8,%f8 + std %f18,[%l2+%l6] + fxtod %f10,%f10 + std %f20,[%l3+%l6] ! save smashed np[j] in double format + fxtod %f12,%f12 + std %f22,[%l4+%l6] + fxtod %f14,%f14 + + fmuld %f16,%f0,%f32 + fmuld %f20,%f8,%f48 + fmuld %f16,%f2,%f34 + fmuld %f20,%f10,%f50 + fmuld %f16,%f4,%f36 + faddd %f32,%f48,%f48 + fmuld %f20,%f12,%f52 + fmuld %f16,%f6,%f38 + faddd %f34,%f50,%f50 + fmuld %f20,%f14,%f54 + fmuld %f18,%f0,%f40 + faddd %f36,%f52,%f52 + fmuld %f22,%f8,%f56 + fmuld %f18,%f2,%f42 + faddd %f38,%f54,%f54 + fmuld %f22,%f10,%f58 + fmuld %f18,%f4,%f44 + faddd %f40,%f56,%f56 + fmuld %f22,%f12,%f60 + fmuld %f18,%f6,%f46 + faddd %f42,%f58,%f58 + fmuld %f22,%f14,%f62 + + faddd %f44,%f60,%f24 ! %f60 + faddd %f46,%f62,%f26 ! %f62 + + faddd %f52,%f56,%f52 + faddd %f54,%f58,%f54 + + fdtox %f48,%f48 + fdtox %f50,%f50 + fdtox %f52,%f52 + fdtox %f54,%f54 + + std %f48,[%sp+2047+192+0] + add %l6,8,%l6 + std %f50,[%sp+2047+192+8] + add %i1,%l6,%o4 + std %f52,[%sp+2047+192+16] + add %i3,%l6,%o5 + std %f54,[%sp+2047+192+24] + + ld [%o4+0],%f17 ! load a[j] as pair of 32-bit words + .word 0xa1b00c20 ! fzeros %f16 + ld [%o4+4],%f19 + .word 0xa5b00c20 ! fzeros %f18 + ld [%o5+0],%f21 ! load n[j] as pair of 32-bit words + .word 0xa9b00c20 ! fzeros %f20 + ld [%o5+4],%f23 + .word 0xadb00c20 ! fzeros %f22 + + fxtod %f16,%f16 + fxtod %f18,%f18 + fxtod %f20,%f20 + fxtod %f22,%f22 + + ldx [%sp+2047+192+0],%o0 + fmuld %f16,%f0,%f32 + ldx [%sp+2047+192+8],%o1 + fmuld %f20,%f8,%f48 + ldx [%sp+2047+192+16],%o2 + fmuld %f16,%f2,%f34 + ldx [%sp+2047+192+24],%o3 + fmuld %f20,%f10,%f50 + + srlx %o0,16,%o7 + std %f16,[%l1+%l6] ! save smashed ap[j] in double format + fmuld %f16,%f4,%f36 + add %o7,%o1,%o1 + std %f18,[%l2+%l6] + faddd %f32,%f48,%f48 + fmuld %f20,%f12,%f52 + srlx %o1,16,%o7 + std %f20,[%l3+%l6] ! save smashed np[j] in double format + fmuld %f16,%f6,%f38 + add %o7,%o2,%o2 + std %f22,[%l4+%l6] + faddd %f34,%f50,%f50 + fmuld %f20,%f14,%f54 + srlx %o2,16,%o7 + fmuld %f18,%f0,%f40 + add %o7,%o3,%o3 ! %o3.%o2[0..15].%o1[0..15].%o0[0..15] + faddd %f36,%f52,%f52 + fmuld %f22,%f8,%f56 + !and %o0,%l7,%o0 + !and %o1,%l7,%o1 + !and %o2,%l7,%o2 + !sllx %o1,16,%o1 + !sllx %o2,32,%o2 + !sllx %o3,48,%o7 + !or %o1,%o0,%o0 + !or %o2,%o0,%o0 + !or %o7,%o0,%o0 ! 64-bit result + srlx %o3,16,%g1 ! 34-bit carry + fmuld %f18,%f2,%f42 + + faddd %f38,%f54,%f54 + fmuld %f22,%f10,%f58 + fmuld %f18,%f4,%f44 + faddd %f40,%f56,%f56 + fmuld %f22,%f12,%f60 + fmuld %f18,%f6,%f46 + faddd %f42,%f58,%f58 + fmuld %f22,%f14,%f62 + + faddd %f24,%f48,%f48 + faddd %f26,%f50,%f50 + faddd %f44,%f60,%f24 ! %f60 + faddd %f46,%f62,%f26 ! %f62 + + faddd %f52,%f56,%f52 + faddd %f54,%f58,%f54 + + fdtox %f48,%f48 + fdtox %f50,%f50 + fdtox %f52,%f52 + fdtox %f54,%f54 + + std %f48,[%sp+2047+192+0] + std %f50,[%sp+2047+192+8] + addcc %l6,8,%l6 + std %f52,[%sp+2047+192+16] + bz,pn %icc,.L1stskip + std %f54,[%sp+2047+192+24] + +.align 32 ! incidentally already aligned ! +.L1st: + add %i1,%l6,%o4 + add %i3,%l6,%o5 + ld [%o4+0],%f17 ! load a[j] as pair of 32-bit words + .word 0xa1b00c20 ! fzeros %f16 + ld [%o4+4],%f19 + .word 0xa5b00c20 ! fzeros %f18 + ld [%o5+0],%f21 ! load n[j] as pair of 32-bit words + .word 0xa9b00c20 ! fzeros %f20 + ld [%o5+4],%f23 + .word 0xadb00c20 ! fzeros %f22 + + fxtod %f16,%f16 + fxtod %f18,%f18 + fxtod %f20,%f20 + fxtod %f22,%f22 + + ldx [%sp+2047+192+0],%o0 + fmuld %f16,%f0,%f32 + ldx [%sp+2047+192+8],%o1 + fmuld %f20,%f8,%f48 + ldx [%sp+2047+192+16],%o2 + fmuld %f16,%f2,%f34 + ldx [%sp+2047+192+24],%o3 + fmuld %f20,%f10,%f50 + + srlx %o0,16,%o7 + std %f16,[%l1+%l6] ! save smashed ap[j] in double format + fmuld %f16,%f4,%f36 + add %o7,%o1,%o1 + std %f18,[%l2+%l6] + faddd %f32,%f48,%f48 + fmuld %f20,%f12,%f52 + srlx %o1,16,%o7 + std %f20,[%l3+%l6] ! save smashed np[j] in double format + fmuld %f16,%f6,%f38 + add %o7,%o2,%o2 + std %f22,[%l4+%l6] + faddd %f34,%f50,%f50 + fmuld %f20,%f14,%f54 + srlx %o2,16,%o7 + fmuld %f18,%f0,%f40 + add %o7,%o3,%o3 ! %o3.%o2[0..15].%o1[0..15].%o0[0..15] + and %o0,%l7,%o0 + faddd %f36,%f52,%f52 + fmuld %f22,%f8,%f56 + and %o1,%l7,%o1 + and %o2,%l7,%o2 + fmuld %f18,%f2,%f42 + sllx %o1,16,%o1 + faddd %f38,%f54,%f54 + fmuld %f22,%f10,%f58 + sllx %o2,32,%o2 + fmuld %f18,%f4,%f44 + sllx %o3,48,%o7 + or %o1,%o0,%o0 + faddd %f40,%f56,%f56 + fmuld %f22,%f12,%f60 + or %o2,%o0,%o0 + fmuld %f18,%f6,%f46 + or %o7,%o0,%o0 ! 64-bit result + faddd %f42,%f58,%f58 + fmuld %f22,%f14,%f62 + addcc %g1,%o0,%o0 + faddd %f24,%f48,%f48 + srlx %o3,16,%g1 ! 34-bit carry + faddd %f26,%f50,%f50 + bcs,a %xcc,.+8 + add %g1,1,%g1 + + stx %o0,[%l0] ! tp[j-1]= + + faddd %f44,%f60,%f24 ! %f60 + faddd %f46,%f62,%f26 ! %f62 + + faddd %f52,%f56,%f52 + faddd %f54,%f58,%f54 + + fdtox %f48,%f48 + fdtox %f50,%f50 + fdtox %f52,%f52 + fdtox %f54,%f54 + + std %f48,[%sp+2047+192+0] + std %f50,[%sp+2047+192+8] + std %f52,[%sp+2047+192+16] + std %f54,[%sp+2047+192+24] + + addcc %l6,8,%l6 + bnz,pt %icc,.L1st + add %l0,8,%l0 + +.L1stskip: + fdtox %f24,%f24 + fdtox %f26,%f26 + + ldx [%sp+2047+192+0],%o0 + ldx [%sp+2047+192+8],%o1 + ldx [%sp+2047+192+16],%o2 + ldx [%sp+2047+192+24],%o3 + + srlx %o0,16,%o7 + std %f24,[%sp+2047+192+32] + add %o7,%o1,%o1 + std %f26,[%sp+2047+192+40] + srlx %o1,16,%o7 + add %o7,%o2,%o2 + srlx %o2,16,%o7 + add %o7,%o3,%o3 ! %o3.%o2[0..15].%o1[0..15].%o0[0..15] + and %o0,%l7,%o0 + and %o1,%l7,%o1 + and %o2,%l7,%o2 + sllx %o1,16,%o1 + sllx %o2,32,%o2 + sllx %o3,48,%o7 + or %o1,%o0,%o0 + or %o2,%o0,%o0 + or %o7,%o0,%o0 ! 64-bit result + ldx [%sp+2047+192+32],%o4 + addcc %g1,%o0,%o0 + ldx [%sp+2047+192+40],%o5 + srlx %o3,16,%g1 ! 34-bit carry + bcs,a %xcc,.+8 + add %g1,1,%g1 + + stx %o0,[%l0] ! tp[j-1]= + add %l0,8,%l0 + + srlx %o4,16,%o7 + add %o7,%o5,%o5 + and %o4,%l7,%o4 + sllx %o5,16,%o7 + or %o7,%o4,%o4 + addcc %g1,%o4,%o4 + srlx %o5,48,%g1 + bcs,a %xcc,.+8 + add %g1,1,%g1 + + mov %g1,%i4 + stx %o4,[%l0] ! tp[num-1]= + + ba .Louter + add %l5,8,%l5 +.align 32 +.Louter: + sub %g0,%i5,%l6 ! j=-num + add %sp,2047+192+64,%l0 + + add %i1,%l6,%o3 + add %i2,%l5,%o4 + + ld [%o3+4],%g1 ! bp[i] + ld [%o3+0],%o0 + ld [%o4+4],%g5 ! ap[0] + sllx %g1,32,%g1 + ld [%o4+0],%o1 + sllx %g5,32,%g5 + or %g1,%o0,%o0 + or %g5,%o1,%o1 + + ldx [%l0],%o2 ! tp[0] + mulx %o1,%o0,%o0 + addcc %o2,%o0,%o0 + mulx %g4,%o0,%o0 ! (ap[0]*bp[i]+t[0])*n0 + stx %o0,[%sp+2047+192+0] + + ! transfer b[i] to FPU as 4x16-bit values + ldda [%o4+2]%asi,%f0 + ldda [%o4+0]%asi,%f2 + ldda [%o4+6]%asi,%f4 + ldda [%o4+4]%asi,%f6 + + ! transfer (ap[0]*b[i]+t[0])*n0 to FPU as 4x16-bit values + ldda [%sp+2047+192+6]%asi,%f8 + fxtod %f0,%f0 + ldda [%sp+2047+192+4]%asi,%f10 + fxtod %f2,%f2 + ldda [%sp+2047+192+2]%asi,%f12 + fxtod %f4,%f4 + ldda [%sp+2047+192+0]%asi,%f14 + fxtod %f6,%f6 + ldd [%l1+%l6],%f16 ! load a[j] in double format + fxtod %f8,%f8 + ldd [%l2+%l6],%f18 + fxtod %f10,%f10 + ldd [%l3+%l6],%f20 ! load n[j] in double format + fxtod %f12,%f12 + ldd [%l4+%l6],%f22 + fxtod %f14,%f14 + + fmuld %f16,%f0,%f32 + fmuld %f20,%f8,%f48 + fmuld %f16,%f2,%f34 + fmuld %f20,%f10,%f50 + fmuld %f16,%f4,%f36 + faddd %f32,%f48,%f48 + fmuld %f20,%f12,%f52 + fmuld %f16,%f6,%f38 + faddd %f34,%f50,%f50 + fmuld %f20,%f14,%f54 + fmuld %f18,%f0,%f40 + faddd %f36,%f52,%f52 + fmuld %f22,%f8,%f56 + fmuld %f18,%f2,%f42 + faddd %f38,%f54,%f54 + fmuld %f22,%f10,%f58 + fmuld %f18,%f4,%f44 + faddd %f40,%f56,%f56 + fmuld %f22,%f12,%f60 + fmuld %f18,%f6,%f46 + faddd %f42,%f58,%f58 + fmuld %f22,%f14,%f62 + + faddd %f44,%f60,%f24 ! %f60 + faddd %f46,%f62,%f26 ! %f62 + + faddd %f52,%f56,%f52 + faddd %f54,%f58,%f54 + + fdtox %f48,%f48 + fdtox %f50,%f50 + fdtox %f52,%f52 + fdtox %f54,%f54 + + std %f48,[%sp+2047+192+0] + std %f50,[%sp+2047+192+8] + std %f52,[%sp+2047+192+16] + add %l6,8,%l6 + std %f54,[%sp+2047+192+24] + + ldd [%l1+%l6],%f16 ! load a[j] in double format + ldd [%l2+%l6],%f18 + ldd [%l3+%l6],%f20 ! load n[j] in double format + ldd [%l4+%l6],%f22 + + fmuld %f16,%f0,%f32 + fmuld %f20,%f8,%f48 + fmuld %f16,%f2,%f34 + fmuld %f20,%f10,%f50 + fmuld %f16,%f4,%f36 + ldx [%sp+2047+192+0],%o0 + faddd %f32,%f48,%f48 + fmuld %f20,%f12,%f52 + ldx [%sp+2047+192+8],%o1 + fmuld %f16,%f6,%f38 + ldx [%sp+2047+192+16],%o2 + faddd %f34,%f50,%f50 + fmuld %f20,%f14,%f54 + ldx [%sp+2047+192+24],%o3 + fmuld %f18,%f0,%f40 + + srlx %o0,16,%o7 + faddd %f36,%f52,%f52 + fmuld %f22,%f8,%f56 + add %o7,%o1,%o1 + fmuld %f18,%f2,%f42 + srlx %o1,16,%o7 + faddd %f38,%f54,%f54 + fmuld %f22,%f10,%f58 + add %o7,%o2,%o2 + fmuld %f18,%f4,%f44 + srlx %o2,16,%o7 + faddd %f40,%f56,%f56 + fmuld %f22,%f12,%f60 + add %o7,%o3,%o3 ! %o3.%o2[0..15].%o1[0..15].%o0[0..15] + ! why? + and %o0,%l7,%o0 + fmuld %f18,%f6,%f46 + and %o1,%l7,%o1 + and %o2,%l7,%o2 + faddd %f42,%f58,%f58 + fmuld %f22,%f14,%f62 + sllx %o1,16,%o1 + faddd %f24,%f48,%f48 + sllx %o2,32,%o2 + faddd %f26,%f50,%f50 + sllx %o3,48,%o7 + or %o1,%o0,%o0 + faddd %f44,%f60,%f24 ! %f60 + or %o2,%o0,%o0 + faddd %f46,%f62,%f26 ! %f62 + or %o7,%o0,%o0 ! 64-bit result + ldx [%l0],%o7 + faddd %f52,%f56,%f52 + addcc %o7,%o0,%o0 + ! end-of-why? + faddd %f54,%f58,%f54 + srlx %o3,16,%g1 ! 34-bit carry + fdtox %f48,%f48 + bcs,a %xcc,.+8 + add %g1,1,%g1 + + fdtox %f50,%f50 + fdtox %f52,%f52 + fdtox %f54,%f54 + + std %f48,[%sp+2047+192+0] + std %f50,[%sp+2047+192+8] + addcc %l6,8,%l6 + std %f52,[%sp+2047+192+16] + bz,pn %icc,.Linnerskip + std %f54,[%sp+2047+192+24] + + ba .Linner + nop +.align 32 +.Linner: + ldd [%l1+%l6],%f16 ! load a[j] in double format + ldd [%l2+%l6],%f18 + ldd [%l3+%l6],%f20 ! load n[j] in double format + ldd [%l4+%l6],%f22 + + fmuld %f16,%f0,%f32 + fmuld %f20,%f8,%f48 + fmuld %f16,%f2,%f34 + fmuld %f20,%f10,%f50 + fmuld %f16,%f4,%f36 + ldx [%sp+2047+192+0],%o0 + faddd %f32,%f48,%f48 + fmuld %f20,%f12,%f52 + ldx [%sp+2047+192+8],%o1 + fmuld %f16,%f6,%f38 + ldx [%sp+2047+192+16],%o2 + faddd %f34,%f50,%f50 + fmuld %f20,%f14,%f54 + ldx [%sp+2047+192+24],%o3 + fmuld %f18,%f0,%f40 + + srlx %o0,16,%o7 + faddd %f36,%f52,%f52 + fmuld %f22,%f8,%f56 + add %o7,%o1,%o1 + fmuld %f18,%f2,%f42 + srlx %o1,16,%o7 + faddd %f38,%f54,%f54 + fmuld %f22,%f10,%f58 + add %o7,%o2,%o2 + fmuld %f18,%f4,%f44 + srlx %o2,16,%o7 + faddd %f40,%f56,%f56 + fmuld %f22,%f12,%f60 + add %o7,%o3,%o3 ! %o3.%o2[0..15].%o1[0..15].%o0[0..15] + and %o0,%l7,%o0 + fmuld %f18,%f6,%f46 + and %o1,%l7,%o1 + and %o2,%l7,%o2 + faddd %f42,%f58,%f58 + fmuld %f22,%f14,%f62 + sllx %o1,16,%o1 + faddd %f24,%f48,%f48 + sllx %o2,32,%o2 + faddd %f26,%f50,%f50 + sllx %o3,48,%o7 + or %o1,%o0,%o0 + faddd %f44,%f60,%f24 ! %f60 + or %o2,%o0,%o0 + faddd %f46,%f62,%f26 ! %f62 + or %o7,%o0,%o0 ! 64-bit result + faddd %f52,%f56,%f52 + addcc %g1,%o0,%o0 + ldx [%l0+8],%o7 ! tp[j] + faddd %f54,%f58,%f54 + srlx %o3,16,%g1 ! 34-bit carry + fdtox %f48,%f48 + bcs,a %xcc,.+8 + add %g1,1,%g1 + fdtox %f50,%f50 + addcc %o7,%o0,%o0 + fdtox %f52,%f52 + bcs,a %xcc,.+8 + add %g1,1,%g1 + + stx %o0,[%l0] ! tp[j-1] + fdtox %f54,%f54 + + std %f48,[%sp+2047+192+0] + std %f50,[%sp+2047+192+8] + std %f52,[%sp+2047+192+16] + addcc %l6,8,%l6 + std %f54,[%sp+2047+192+24] + bnz,pt %icc,.Linner + add %l0,8,%l0 + +.Linnerskip: + fdtox %f24,%f24 + fdtox %f26,%f26 + + ldx [%sp+2047+192+0],%o0 + ldx [%sp+2047+192+8],%o1 + ldx [%sp+2047+192+16],%o2 + ldx [%sp+2047+192+24],%o3 + + srlx %o0,16,%o7 + std %f24,[%sp+2047+192+32] + add %o7,%o1,%o1 + std %f26,[%sp+2047+192+40] + srlx %o1,16,%o7 + add %o7,%o2,%o2 + srlx %o2,16,%o7 + add %o7,%o3,%o3 ! %o3.%o2[0..15].%o1[0..15].%o0[0..15] + and %o0,%l7,%o0 + and %o1,%l7,%o1 + and %o2,%l7,%o2 + sllx %o1,16,%o1 + sllx %o2,32,%o2 + sllx %o3,48,%o7 + or %o1,%o0,%o0 + or %o2,%o0,%o0 + ldx [%sp+2047+192+32],%o4 + or %o7,%o0,%o0 ! 64-bit result + ldx [%sp+2047+192+40],%o5 + addcc %g1,%o0,%o0 + ldx [%l0+8],%o7 ! tp[j] + srlx %o3,16,%g1 ! 34-bit carry + bcs,a %xcc,.+8 + add %g1,1,%g1 + + addcc %o7,%o0,%o0 + bcs,a %xcc,.+8 + add %g1,1,%g1 + + stx %o0,[%l0] ! tp[j-1] + add %l0,8,%l0 + + srlx %o4,16,%o7 + add %o7,%o5,%o5 + and %o4,%l7,%o4 + sllx %o5,16,%o7 + or %o7,%o4,%o4 + addcc %g1,%o4,%o4 + srlx %o5,48,%g1 + bcs,a %xcc,.+8 + add %g1,1,%g1 + + addcc %i4,%o4,%o4 + stx %o4,[%l0] ! tp[num-1] + mov %g1,%i4 + bcs,a %xcc,.+8 + add %i4,1,%i4 + + addcc %l5,8,%l5 + bnz %icc,.Louter + nop + + add %l0,8,%l0 ! adjust tp to point at the end + orn %g0,%g0,%g4 + sub %g0,%i5,%o7 ! n=-num + ba .Lsub + subcc %g0,%g0,%g0 ! clear %icc.c + +.align 32 +.Lsub: + ldx [%l0+%o7],%o0 + add %i3,%o7,%g1 + ld [%g1+0],%o2 + ld [%g1+4],%o3 + srlx %o0,32,%o1 + subccc %o0,%o2,%o2 + add %i0,%o7,%g1 + subccc %o1,%o3,%o3 + st %o2,[%g1+0] + add %o7,8,%o7 + brnz,pt %o7,.Lsub + st %o3,[%g1+4] + subc %i4,0,%g4 + sub %g0,%i5,%o7 ! n=-num + ba .Lcopy + nop + +.align 32 +.Lcopy: + ldx [%l0+%o7],%o0 + add %i0,%o7,%g1 + ld [%g1+0],%o2 + ld [%g1+4],%o3 + stx %g0,[%l0+%o7] + and %o0,%g4,%o0 + srlx %o0,32,%o1 + andn %o2,%g4,%o2 + andn %o3,%g4,%o3 + or %o2,%o0,%o0 + or %o3,%o1,%o1 + st %o0,[%g1+0] + add %o7,8,%o7 + brnz,pt %o7,.Lcopy + st %o1,[%g1+4] + sub %g0,%i5,%o7 ! n=-num + +.Lzap: + stx %g0,[%l1+%o7] + stx %g0,[%l2+%o7] + stx %g0,[%l3+%o7] + stx %g0,[%l4+%o7] + add %o7,8,%o7 + brnz,pt %o7,.Lzap + nop + + ldx [%sp+2047+192+48],%o7 + wr %g0,%o7,%asi ! restore %asi + + mov 1,%i0 +.Lret: + ret + restore +.type bn_mul_mont_fpu,#function +.size bn_mul_mont_fpu,(.-bn_mul_mont_fpu) +.asciz "Montgomery Multipltication for UltraSPARC, CRYPTOGAMS by <appro@openssl.org>" +.align 32 |
