PR: 2149
[oweals/openssl.git] / crypto / s390xcpuid.S
1 .text
2
3 .globl  OPENSSL_s390x_facilities
4 .type   OPENSSL_s390x_facilities,@function
5 .align  16
6 OPENSSL_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
18 OPENSSL_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
27 OPENSSL_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
40 OPENSSL_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
60 OPENSSL_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