summaryrefslogtreecommitdiff
path: root/lib/libcrypto/arch
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2008-05-11 16:35:28 +0000
committerchristos <christos@NetBSD.org>2008-05-11 16:35:28 +0000
commitf15eff55bfc17dedfaeeeb4a2f7410c0982dfbc8 (patch)
tree4358faedbaf43133986240354049f4dfe92ce3d3 /lib/libcrypto/arch
parenta034c1c5e1d7afe392bc8390e3ef6410d47245f6 (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/Makefile15
-rw-r--r--lib/libcrypto/arch/sparc64/aes-sparcv9.S1467
-rw-r--r--lib/libcrypto/arch/sparc64/sha1-sparcv9.S1509
-rw-r--r--lib/libcrypto/arch/sparc64/sha512-sparcv9.S1849
-rw-r--r--lib/libcrypto/arch/sparc64/sparcv9-mont.S515
-rw-r--r--lib/libcrypto/arch/sparc64/sparcv9a-mont.S741
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