o_time.c: use gmtime_s with MSVC
[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    %r4,OPENSSL_s390xcap_P
9         stg     %r0,8(%r4)      # wipe capability vectors
10         stg     %r0,16(%r4)
11         stg     %r0,24(%r4)
12         stg     %r0,32(%r4)
13         stg     %r0,40(%r4)
14         stg     %r0,48(%r4)
15         stg     %r0,56(%r4)
16         stg     %r0,64(%r4)
17         stg     %r0,72(%r4)
18
19         .long   0xb2b04000      # stfle 0(%r4)
20         brc     8,.Ldone
21         lghi    %r0,1
22         .long   0xb2b04000      # stfle 0(%r4)
23 .Ldone:
24         lmg     %r2,%r3,0(%r4)
25         tmhl    %r2,0x4000      # check for message-security-assist
26         jz      .Lret
27
28         lghi    %r0,0           # query kimd capabilities
29         la      %r1,16(%r4)
30         .long   0xb93e0002      # kimd %r0,%r2
31
32         lghi    %r0,0           # query km capability vector
33         la      %r1,32(%r4)
34         .long   0xb92e0042      # km %r4,%r2
35
36         lghi    %r0,0           # query kmc capability vector
37         la      %r1,48(%r4)
38         .long   0xb92f0042      # kmc %r4,%r2
39
40         tmhh    %r3,0x0004      # check for message-security-assist-4
41         jz      .Lret
42
43         lghi    %r0,0           # query kmctr capability vector
44         la      %r1,64(%r4)
45         .long   0xb92d2042      # kmctr %r4,%r2,%r2
46
47 .Lret:
48         br      %r14
49 .size   OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
50
51 .globl  OPENSSL_rdtsc
52 .type   OPENSSL_rdtsc,@function
53 .align  16
54 OPENSSL_rdtsc:
55         stck    16(%r15)
56         lg      %r2,16(%r15)
57         br      %r14
58 .size   OPENSSL_rdtsc,.-OPENSSL_rdtsc
59
60 .globl  OPENSSL_atomic_add
61 .type   OPENSSL_atomic_add,@function
62 .align  16
63 OPENSSL_atomic_add:
64         l       %r1,0(%r2)
65 .Lspin: lr      %r0,%r1
66         ar      %r0,%r3
67         cs      %r1,%r0,0(%r2)
68         brc     4,.Lspin
69         lgfr    %r2,%r0         # OpenSSL expects the new value
70         br      %r14
71 .size   OPENSSL_atomic_add,.-OPENSSL_atomic_add
72
73 .globl  OPENSSL_wipe_cpu
74 .type   OPENSSL_wipe_cpu,@function
75 .align  16
76 OPENSSL_wipe_cpu:
77         xgr     %r0,%r0
78         xgr     %r1,%r1
79         lgr     %r2,%r15
80         xgr     %r3,%r3
81         xgr     %r4,%r4
82         lzdr    %f0
83         lzdr    %f1
84         lzdr    %f2
85         lzdr    %f3
86         lzdr    %f4
87         lzdr    %f5
88         lzdr    %f6
89         lzdr    %f7
90         br      %r14
91 .size   OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
92
93 .globl  OPENSSL_cleanse
94 .type   OPENSSL_cleanse,@function
95 .align  16
96 OPENSSL_cleanse:
97 #if !defined(__s390x__) && !defined(__s390x)
98         llgfr   %r3,%r3
99 #endif
100         lghi    %r4,15
101         lghi    %r0,0
102         clgr    %r3,%r4
103         jh      .Lot
104         clgr    %r3,%r0
105         bcr     8,%r14
106 .Little:
107         stc     %r0,0(%r2)
108         la      %r2,1(%r2)
109         brctg   %r3,.Little
110         br      %r14
111 .align  4
112 .Lot:   tmll    %r2,7
113         jz      .Laligned
114         stc     %r0,0(%r2)
115         la      %r2,1(%r2)
116         brctg   %r3,.Lot
117 .Laligned:
118         srlg    %r4,%r3,3
119 .Loop:  stg     %r0,0(%r2)
120         la      %r2,8(%r2)
121         brctg   %r4,.Loop
122         lghi    %r4,7
123         ngr     %r3,%r4
124         jnz     .Little
125         br      %r14
126 .size   OPENSSL_cleanse,.-OPENSSL_cleanse
127
128 .section        .init
129         brasl   %r14,OPENSSL_cpuid_setup
130
131 .comm   OPENSSL_s390xcap_P,80,8