Harden ASN.1 BIO handling of large amounts of data.
[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         larl    %r2,OPENSSL_s390xcap_P
9         stg     %r0,8(%r2)
10         .long   0xb2b02000      # stfle 0(%r2)
11         brc     8,.Ldone
12         lghi    %r0,1
13         .long   0xb2b02000      # stfle 0(%r2)
14 .Ldone:
15         lg      %r2,0(%r2)
16         br      %r14
17 .size   OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
18
19 .globl  OPENSSL_rdtsc
20 .type   OPENSSL_rdtsc,@function
21 .align  16
22 OPENSSL_rdtsc:
23         stck    16(%r15)
24         lg      %r2,16(%r15)
25         br      %r14
26 .size   OPENSSL_rdtsc,.-OPENSSL_rdtsc
27
28 .globl  OPENSSL_atomic_add
29 .type   OPENSSL_atomic_add,@function
30 .align  16
31 OPENSSL_atomic_add:
32         l       %r1,0(%r2)
33 .Lspin: lr      %r0,%r1
34         ar      %r0,%r3
35         cs      %r1,%r0,0(%r2)
36         brc     4,.Lspin
37         lgfr    %r2,%r0         # OpenSSL expects the new value
38         br      %r14
39 .size   OPENSSL_atomic_add,.-OPENSSL_atomic_add
40
41 .globl  OPENSSL_wipe_cpu
42 .type   OPENSSL_wipe_cpu,@function
43 .align  16
44 OPENSSL_wipe_cpu:
45         xgr     %r0,%r0
46         xgr     %r1,%r1
47         lgr     %r2,%r15
48         xgr     %r3,%r3
49         xgr     %r4,%r4
50         lzdr    %f0
51         lzdr    %f1
52         lzdr    %f2
53         lzdr    %f3
54         lzdr    %f4
55         lzdr    %f5
56         lzdr    %f6
57         lzdr    %f7
58         br      %r14
59 .size   OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
60
61 .globl  OPENSSL_cleanse
62 .type   OPENSSL_cleanse,@function
63 .align  16
64 OPENSSL_cleanse:
65 #if !defined(__s390x__) && !defined(__s390x)
66         llgfr   %r3,%r3
67 #endif
68         lghi    %r4,15
69         lghi    %r0,0
70         clgr    %r3,%r4
71         jh      .Lot
72         clgr    %r3,%r0
73         bcr     8,%r14
74 .Little:
75         stc     %r0,0(%r2)
76         la      %r2,1(%r2)
77         brctg   %r3,.Little
78         br      %r14
79 .align  4
80 .Lot:   tmll    %r2,7
81         jz      .Laligned
82         stc     %r0,0(%r2)
83         la      %r2,1(%r2)
84         brctg   %r3,.Lot
85 .Laligned:
86         srlg    %r4,%r3,3
87 .Loop:  stg     %r0,0(%r2)
88         la      %r2,8(%r2)
89         brctg   %r4,.Loop
90         lghi    %r4,7
91         ngr     %r3,%r4
92         jnz     .Little
93         br      %r14
94 .size   OPENSSL_cleanse,.-OPENSSL_cleanse
95
96 .section        .init
97         brasl   %r14,OPENSSL_cpuid_setup
98
99 .comm   OPENSSL_s390xcap_P,16,8