blob: b053c6a28190ca4d4c83b74b6b4b603efb184d6d [file] [log] [blame]
Kinson Chika8fa74c2011-07-29 11:33:41 -07001.text
2
3.globl OPENSSL_s390x_facilities
4.type OPENSSL_s390x_facilities,@function
5.align 16
6OPENSSL_s390x_facilities:
7 lghi %r0,0
8 .long 0xb2b0f010 # stfle 16(%r15)
9 lg %r2,16(%r15)
10 larl %r1,OPENSSL_s390xcap_P
11 stg %r2,0(%r1)
12 br %r14
13.size OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
14
15.globl OPENSSL_rdtsc
16.type OPENSSL_rdtsc,@function
17.align 16
18OPENSSL_rdtsc:
19 stck 16(%r15)
20 lg %r2,16(%r15)
21 br %r14
22.size OPENSSL_rdtsc,.-OPENSSL_rdtsc
23
24.globl OPENSSL_atomic_add
25.type OPENSSL_atomic_add,@function
26.align 16
27OPENSSL_atomic_add:
28 l %r1,0(%r2)
29.Lspin: lr %r0,%r1
30 ar %r0,%r3
31 cs %r1,%r0,0(%r2)
32 brc 4,.Lspin
33 lgfr %r2,%r0 # OpenSSL expects the new value
34 br %r14
35.size OPENSSL_atomic_add,.-OPENSSL_atomic_add
36
37.globl OPENSSL_wipe_cpu
38.type OPENSSL_wipe_cpu,@function
39.align 16
40OPENSSL_wipe_cpu:
41 xgr %r0,%r0
42 xgr %r1,%r1
43 lgr %r2,%r15
44 xgr %r3,%r3
45 xgr %r4,%r4
46 lzdr %f0
47 lzdr %f1
48 lzdr %f2
49 lzdr %f3
50 lzdr %f4
51 lzdr %f5
52 lzdr %f6
53 lzdr %f7
54 br %r14
55.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
56
57.globl OPENSSL_cleanse
58.type OPENSSL_cleanse,@function
59.align 16
60OPENSSL_cleanse:
61 lghi %r4,15
62 lghi %r0,0
63 clgr %r3,%r4
64 jh .Lot
65 clgr %r3,%r0
66 bcr 8,%r14
67.Little:
68 stc %r0,0(%r2)
69 la %r2,1(%r2)
70 brctg %r3,.Little
71 br %r14
72.align 4
73.Lot: tmll %r2,7
74 jz .Laligned
75 stc %r0,0(%r2)
76 la %r2,1(%r2)
77 brctg %r3,.Lot
78.Laligned:
79 srlg %r4,%r3,3
80.Loop: stg %r0,0(%r2)
81 la %r2,8(%r2)
82 brctg %r4,.Loop
83 lghi %r4,7
84 ngr %r3,%r4
85 jnz .Little
86 br %r14
87.size OPENSSL_cleanse,.-OPENSSL_cleanse
88
89.section .init
90 brasl %r14,OPENSSL_cpuid_setup
91
92.comm OPENSSL_s390xcap_P,8,8