1221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.text
2221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
3221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl	OPENSSL_s390x_facilities
4221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type	OPENSSL_s390x_facilities,@function
5221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	16
6221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_s390x_facilities:
7221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lghi	%r0,0
8392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	larl	%r2,OPENSSL_s390xcap_P
9392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	stg	%r0,8(%r2)
10392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.long	0xb2b02000	# stfle	0(%r2)
11392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	brc	8,.Ldone
12392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	lghi	%r0,1
13392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	.long	0xb2b02000	# stfle 0(%r2)
14392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Ldone:
15392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	lg	%r2,0(%r2)
16221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	br	%r14
17221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size	OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
18221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
19221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl	OPENSSL_rdtsc
20221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type	OPENSSL_rdtsc,@function
21221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	16
22221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_rdtsc:
23221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	stck	16(%r15)
24221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lg	%r2,16(%r15)
25221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	br	%r14
26221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size	OPENSSL_rdtsc,.-OPENSSL_rdtsc
27221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
28221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl	OPENSSL_atomic_add
29221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type	OPENSSL_atomic_add,@function
30221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	16
31221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_atomic_add:
32221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	l	%r1,0(%r2)
33221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lspin:	lr	%r0,%r1
34221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	ar	%r0,%r3
35221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	cs	%r1,%r0,0(%r2)
36221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	brc	4,.Lspin
37221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lgfr	%r2,%r0		# OpenSSL expects the new value
38221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	br	%r14
39221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size	OPENSSL_atomic_add,.-OPENSSL_atomic_add
40221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
41221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl	OPENSSL_wipe_cpu
42221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type	OPENSSL_wipe_cpu,@function
43221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	16
44221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_wipe_cpu:
45221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xgr	%r0,%r0
46221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xgr	%r1,%r1
47221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lgr	%r2,%r15
48221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xgr	%r3,%r3
49221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	xgr	%r4,%r4
50221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lzdr	%f0
51221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lzdr	%f1
52221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lzdr	%f2
53221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lzdr	%f3
54221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lzdr	%f4
55221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lzdr	%f5
56221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lzdr	%f6
57221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lzdr	%f7
58221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	br	%r14
59221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size	OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
60221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
61221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl	OPENSSL_cleanse
62221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type	OPENSSL_cleanse,@function
63221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	16
64221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_cleanse:
65392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if !defined(__s390x__) && !defined(__s390x)
66392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom	llgfr	%r3,%r3
67392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif
68221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lghi	%r4,15
69221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lghi	%r0,0
70221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	clgr	%r3,%r4
71221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	jh	.Lot
72221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	clgr	%r3,%r0
73221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	bcr	8,%r14
74221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Little:
75221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	stc	%r0,0(%r2)
76221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	la	%r2,1(%r2)
77221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	brctg	%r3,.Little
78221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	br	%r14
79221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align	4
80221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lot:	tmll	%r2,7
81221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	jz	.Laligned
82221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	stc	%r0,0(%r2)
83221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	la	%r2,1(%r2)
84221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	brctg	%r3,.Lot
85221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Laligned:
86221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	srlg	%r4,%r3,3
87221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop:	stg	%r0,0(%r2)
88221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	la	%r2,8(%r2)
89221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	brctg	%r4,.Loop
90221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	lghi	%r4,7
91221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	ngr	%r3,%r4
92221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	jnz	.Little
93221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	br	%r14
94221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size	OPENSSL_cleanse,.-OPENSSL_cleanse
95221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
96221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.section	.init
97221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	brasl	%r14,OPENSSL_cpuid_setup
98221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
99392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.comm	OPENSSL_s390xcap_P,16,8
100