1238384Sjkim.text
2238384Sjkim
3238384Sjkim.globl	OPENSSL_s390x_facilities
4238384Sjkim.type	OPENSSL_s390x_facilities,@function
5238384Sjkim.align	16
6238384SjkimOPENSSL_s390x_facilities:
7238384Sjkim	lghi	%r0,0
8238384Sjkim	larl	%r2,OPENSSL_s390xcap_P
9238384Sjkim	stg	%r0,8(%r2)
10238384Sjkim	.long	0xb2b02000	# stfle	0(%r2)
11238384Sjkim	brc	8,.Ldone
12238384Sjkim	lghi	%r0,1
13238384Sjkim	.long	0xb2b02000	# stfle 0(%r2)
14238384Sjkim.Ldone:
15238384Sjkim	lg	%r2,0(%r2)
16238384Sjkim	br	%r14
17238384Sjkim.size	OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
18238384Sjkim
19238384Sjkim.globl	OPENSSL_rdtsc
20238384Sjkim.type	OPENSSL_rdtsc,@function
21238384Sjkim.align	16
22238384SjkimOPENSSL_rdtsc:
23238384Sjkim	stck	16(%r15)
24238384Sjkim	lg	%r2,16(%r15)
25238384Sjkim	br	%r14
26238384Sjkim.size	OPENSSL_rdtsc,.-OPENSSL_rdtsc
27238384Sjkim
28238384Sjkim.globl	OPENSSL_atomic_add
29238384Sjkim.type	OPENSSL_atomic_add,@function
30238384Sjkim.align	16
31238384SjkimOPENSSL_atomic_add:
32238384Sjkim	l	%r1,0(%r2)
33238384Sjkim.Lspin:	lr	%r0,%r1
34238384Sjkim	ar	%r0,%r3
35238384Sjkim	cs	%r1,%r0,0(%r2)
36238384Sjkim	brc	4,.Lspin
37238384Sjkim	lgfr	%r2,%r0		# OpenSSL expects the new value
38238384Sjkim	br	%r14
39238384Sjkim.size	OPENSSL_atomic_add,.-OPENSSL_atomic_add
40238384Sjkim
41238384Sjkim.globl	OPENSSL_wipe_cpu
42238384Sjkim.type	OPENSSL_wipe_cpu,@function
43238384Sjkim.align	16
44238384SjkimOPENSSL_wipe_cpu:
45238384Sjkim	xgr	%r0,%r0
46238384Sjkim	xgr	%r1,%r1
47238384Sjkim	lgr	%r2,%r15
48238384Sjkim	xgr	%r3,%r3
49238384Sjkim	xgr	%r4,%r4
50238384Sjkim	lzdr	%f0
51238384Sjkim	lzdr	%f1
52238384Sjkim	lzdr	%f2
53238384Sjkim	lzdr	%f3
54238384Sjkim	lzdr	%f4
55238384Sjkim	lzdr	%f5
56238384Sjkim	lzdr	%f6
57238384Sjkim	lzdr	%f7
58238384Sjkim	br	%r14
59238384Sjkim.size	OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
60238384Sjkim
61238384Sjkim.globl	OPENSSL_cleanse
62238384Sjkim.type	OPENSSL_cleanse,@function
63238384Sjkim.align	16
64238384SjkimOPENSSL_cleanse:
65238384Sjkim#if !defined(__s390x__) && !defined(__s390x)
66238384Sjkim	llgfr	%r3,%r3
67238384Sjkim#endif
68238384Sjkim	lghi	%r4,15
69238384Sjkim	lghi	%r0,0
70238384Sjkim	clgr	%r3,%r4
71238384Sjkim	jh	.Lot
72238384Sjkim	clgr	%r3,%r0
73238384Sjkim	bcr	8,%r14
74238384Sjkim.Little:
75238384Sjkim	stc	%r0,0(%r2)
76238384Sjkim	la	%r2,1(%r2)
77238384Sjkim	brctg	%r3,.Little
78238384Sjkim	br	%r14
79238384Sjkim.align	4
80238384Sjkim.Lot:	tmll	%r2,7
81238384Sjkim	jz	.Laligned
82238384Sjkim	stc	%r0,0(%r2)
83238384Sjkim	la	%r2,1(%r2)
84238384Sjkim	brctg	%r3,.Lot
85238384Sjkim.Laligned:
86238384Sjkim	srlg	%r4,%r3,3
87238384Sjkim.Loop:	stg	%r0,0(%r2)
88238384Sjkim	la	%r2,8(%r2)
89238384Sjkim	brctg	%r4,.Loop
90238384Sjkim	lghi	%r4,7
91238384Sjkim	ngr	%r3,%r4
92238384Sjkim	jnz	.Little
93238384Sjkim	br	%r14
94238384Sjkim.size	OPENSSL_cleanse,.-OPENSSL_cleanse
95238384Sjkim
96238384Sjkim.section	.init
97238384Sjkim	brasl	%r14,OPENSSL_cpuid_setup
98238384Sjkim
99238384Sjkim.comm	OPENSSL_s390xcap_P,16,8
100