Elide OPENSSL_INIT_set_config_filename() for no-stdio build
[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         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 .globl  OPENSSL_instrument_bus
97 .type   OPENSSL_instrument_bus,@function
98 .align  16
99 OPENSSL_instrument_bus:
100         lghi    %r2,0
101         br      %r14
102 .size   OPENSSL_instrument_bus,.-OPENSSL_instrument_bus
103
104 .globl  OPENSSL_instrument_bus2
105 .type   OPENSSL_instrument_bus2,@function
106 .align  16
107 OPENSSL_instrument_bus2:
108         lghi    %r2,0
109         br      %r14
110 .size   OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2
111
112 .section        .init
113         brasl   %r14,OPENSSL_cpuid_setup
114
115 .comm   OPENSSL_s390xcap_P,16,8