diff options
Diffstat (limited to 'src/lib/libcrypto/s390xcpuid.S')
-rw-r--r-- | src/lib/libcrypto/s390xcpuid.S | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/lib/libcrypto/s390xcpuid.S b/src/lib/libcrypto/s390xcpuid.S new file mode 100644 index 0000000000..b053c6a281 --- /dev/null +++ b/src/lib/libcrypto/s390xcpuid.S | |||
@@ -0,0 +1,92 @@ | |||
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 | ||