1238384Sjkim.text 2238384Sjkim 3238384Sjkim.globl OPENSSL_s390x_facilities 4238384Sjkim.type OPENSSL_s390x_facilities,@function 5238384Sjkim.align 16 6238384SjkimOPENSSL_s390x_facilities: 7238384Sjkim lghi %r0,0 8238384Sjkim larl %r2,OPENSSL_s390xcap_P 9238384Sjkim stg %r0,8(%r2) 10238384Sjkim .long 0xb2b02000 # stfle 0(%r2) 11238384Sjkim brc 8,.Ldone 12238384Sjkim lghi %r0,1 13238384Sjkim .long 0xb2b02000 # stfle 0(%r2) 14238384Sjkim.Ldone: 15238384Sjkim lg %r2,0(%r2) 16238384Sjkim br %r14 17238384Sjkim.size OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities 18238384Sjkim 19238384Sjkim.globl OPENSSL_rdtsc 20238384Sjkim.type OPENSSL_rdtsc,@function 21238384Sjkim.align 16 22238384SjkimOPENSSL_rdtsc: 23238384Sjkim stck 16(%r15) 24238384Sjkim lg %r2,16(%r15) 25238384Sjkim br %r14 26238384Sjkim.size OPENSSL_rdtsc,.-OPENSSL_rdtsc 27238384Sjkim 28238384Sjkim.globl OPENSSL_atomic_add 29238384Sjkim.type OPENSSL_atomic_add,@function 30238384Sjkim.align 16 31238384SjkimOPENSSL_atomic_add: 32238384Sjkim l %r1,0(%r2) 33238384Sjkim.Lspin: lr %r0,%r1 34238384Sjkim ar %r0,%r3 35238384Sjkim cs %r1,%r0,0(%r2) 36238384Sjkim brc 4,.Lspin 37238384Sjkim lgfr %r2,%r0 # OpenSSL expects the new value 38238384Sjkim br %r14 39238384Sjkim.size OPENSSL_atomic_add,.-OPENSSL_atomic_add 40238384Sjkim 41238384Sjkim.globl OPENSSL_wipe_cpu 42238384Sjkim.type OPENSSL_wipe_cpu,@function 43238384Sjkim.align 16 44238384SjkimOPENSSL_wipe_cpu: 45238384Sjkim xgr %r0,%r0 46238384Sjkim xgr %r1,%r1 47238384Sjkim lgr %r2,%r15 48238384Sjkim xgr %r3,%r3 49238384Sjkim xgr %r4,%r4 50238384Sjkim lzdr %f0 51238384Sjkim lzdr %f1 52238384Sjkim lzdr %f2 53238384Sjkim lzdr %f3 54238384Sjkim lzdr %f4 55238384Sjkim lzdr %f5 56238384Sjkim lzdr %f6 57238384Sjkim lzdr %f7 58238384Sjkim br %r14 59238384Sjkim.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 60238384Sjkim 61238384Sjkim.globl OPENSSL_cleanse 62238384Sjkim.type OPENSSL_cleanse,@function 63238384Sjkim.align 16 64238384SjkimOPENSSL_cleanse: 65238384Sjkim#if !defined(__s390x__) && !defined(__s390x) 66238384Sjkim llgfr %r3,%r3 67238384Sjkim#endif 68238384Sjkim lghi %r4,15 69238384Sjkim lghi %r0,0 70238384Sjkim clgr %r3,%r4 71238384Sjkim jh .Lot 72238384Sjkim clgr %r3,%r0 73238384Sjkim bcr 8,%r14 74238384Sjkim.Little: 75238384Sjkim stc %r0,0(%r2) 76238384Sjkim la %r2,1(%r2) 77238384Sjkim brctg %r3,.Little 78238384Sjkim br %r14 79238384Sjkim.align 4 80238384Sjkim.Lot: tmll %r2,7 81238384Sjkim jz .Laligned 82238384Sjkim stc %r0,0(%r2) 83238384Sjkim la %r2,1(%r2) 84238384Sjkim brctg %r3,.Lot 85238384Sjkim.Laligned: 86238384Sjkim srlg %r4,%r3,3 87238384Sjkim.Loop: stg %r0,0(%r2) 88238384Sjkim la %r2,8(%r2) 89238384Sjkim brctg %r4,.Loop 90238384Sjkim lghi %r4,7 91238384Sjkim ngr %r3,%r4 92238384Sjkim jnz .Little 93238384Sjkim br %r14 94238384Sjkim.size OPENSSL_cleanse,.-OPENSSL_cleanse 95238384Sjkim 96238384Sjkim.section .init 97238384Sjkim brasl %r14,OPENSSL_cpuid_setup 98238384Sjkim 99238384Sjkim.comm OPENSSL_s390xcap_P,16,8 100