1.text 2 3.globl OPENSSL_s390x_facilities 4.type OPENSSL_s390x_facilities,@function 5.align 16 6OPENSSL_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 54OPENSSL_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 63OPENSSL_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 76OPENSSL_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 96OPENSSL_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 132