]> git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/s390xcpuid.S
rsa/*: switch to BN_bn2binpad.
[thirdparty/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