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 %r2,OPENSSL_s390xcap_P 9 stg %r0,8(%r2) 10 .long 0xb2b02000 # stfle 0(%r2) 11 brc 8,.Ldone 12 lghi %r0,1 13 .long 0xb2b02000 # stfle 0(%r2) 14 .Ldone: 15 lg %r2,0(%r2) 16 br %r14 17 .size OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities 18 19 .globl OPENSSL_rdtsc 20 .type OPENSSL_rdtsc,@function 21 .align 16 22 OPENSSL_rdtsc: 23 stck 16(%r15) 24 lg %r2,16(%r15) 25 br %r14 26 .size OPENSSL_rdtsc,.-OPENSSL_rdtsc 27 28 .globl OPENSSL_atomic_add 29 .type OPENSSL_atomic_add,@function 30 .align 16 31 OPENSSL_atomic_add: 32 l %r1,0(%r2) 33 .Lspin: lr %r0,%r1 34 ar %r0,%r3 35 cs %r1,%r0,0(%r2) 36 brc 4,.Lspin 37 lgfr %r2,%r0 # OpenSSL expects the new value 38 br %r14 39 .size OPENSSL_atomic_add,.-OPENSSL_atomic_add 40 41 .globl OPENSSL_wipe_cpu 42 .type OPENSSL_wipe_cpu,@function 43 .align 16 44 OPENSSL_wipe_cpu: 45 xgr %r0,%r0 46 xgr %r1,%r1 47 lgr %r2,%r15 48 xgr %r3,%r3 49 xgr %r4,%r4 50 lzdr %f0 51 lzdr %f1 52 lzdr %f2 53 lzdr %f3 54 lzdr %f4 55 lzdr %f5 56 lzdr %f6 57 lzdr %f7 58 br %r14 59 .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 60 61 .globl OPENSSL_cleanse 62 .type OPENSSL_cleanse,@function 63 .align 16 64 OPENSSL_cleanse: 65 #if !defined(__s390x__) && !defined(__s390x) 66 llgfr %r3,%r3 67 #endif 68 lghi %r4,15 69 lghi %r0,0 70 clgr %r3,%r4 71 jh .Lot 72 clgr %r3,%r0 73 bcr 8,%r14 74 .Little: 75 stc %r0,0(%r2) 76 la %r2,1(%r2) 77 brctg %r3,.Little 78 br %r14 79 .align 4 80 .Lot: tmll %r2,7 81 jz .Laligned 82 stc %r0,0(%r2) 83 la %r2,1(%r2) 84 brctg %r3,.Lot 85 .Laligned: 86 srlg %r4,%r3,3 87 .Loop: stg %r0,0(%r2) 88 la %r2,8(%r2) 89 brctg %r4,.Loop 90 lghi %r4,7 91 ngr %r3,%r4 92 jnz .Little 93 br %r14 94 .size OPENSSL_cleanse,.-OPENSSL_cleanse 95 96 .section .init 97 brasl %r14,OPENSSL_cpuid_setup 98 99 .comm OPENSSL_s390xcap_P,16,8 100