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 .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 18OPENSSL_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 27OPENSSL_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 40OPENSSL_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 60OPENSSL_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 93