s390x assembler update: add support for run-time facility detection [from HEAD].
[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         .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 .Little:
66         stc     %r0,0(%r2)
67         la      %r2,1(%r2)
68         brctg   %r3,.Little
69         br      %r14
70 .align  4
71 .Lot:   tmll    %r2,7
72         jz      .Laligned
73         stc     %r0,0(%r2)
74         la      %r2,1(%r2)
75         brctg   %r3,.Lot
76 .Laligned:
77         srlg    %r4,%r3,3
78 .Loop:  stg     %r0,0(%r2)
79         la      %r2,8(%r2)
80         brctg   %r4,.Loop
81         lghi    %r4,7
82         ngr     %r3,%r4
83         jnz     .Little
84         br      %r14
85 .size   OPENSSL_cleanse,.-OPENSSL_cleanse
86
87 .section        .init
88         brasl   %r14,OPENSSL_cpuid_setup
89
90 .comm   OPENSSL_s390xcap_P,8,8