1238384Sjkim.text 2238384Sjkim 3238384Sjkim.globl OPENSSL_s390x_facilities 4238384Sjkim.type OPENSSL_s390x_facilities,@function 5238384Sjkim.align 16 6238384SjkimOPENSSL_s390x_facilities: 7238384Sjkim lghi %r0,0 8298998Sjkim larl %r4,OPENSSL_s390xcap_P 9298998Sjkim stg %r0,8(%r4) # wipe capability vectors 10298998Sjkim stg %r0,16(%r4) 11298998Sjkim stg %r0,24(%r4) 12298998Sjkim stg %r0,32(%r4) 13298998Sjkim stg %r0,40(%r4) 14298998Sjkim stg %r0,48(%r4) 15298998Sjkim stg %r0,56(%r4) 16298998Sjkim stg %r0,64(%r4) 17298998Sjkim stg %r0,72(%r4) 18298998Sjkim 19298998Sjkim .long 0xb2b04000 # stfle 0(%r4) 20238384Sjkim brc 8,.Ldone 21238384Sjkim lghi %r0,1 22298998Sjkim .long 0xb2b04000 # stfle 0(%r4) 23238384Sjkim.Ldone: 24298998Sjkim lmg %r2,%r3,0(%r4) 25298998Sjkim tmhl %r2,0x4000 # check for message-security-assist 26298998Sjkim jz .Lret 27298998Sjkim 28298998Sjkim lghi %r0,0 # query kimd capabilities 29298998Sjkim la %r1,16(%r4) 30298998Sjkim .long 0xb93e0002 # kimd %r0,%r2 31298998Sjkim 32298998Sjkim lghi %r0,0 # query km capability vector 33298998Sjkim la %r1,32(%r4) 34298998Sjkim .long 0xb92e0042 # km %r4,%r2 35298998Sjkim 36298998Sjkim lghi %r0,0 # query kmc capability vector 37298998Sjkim la %r1,48(%r4) 38298998Sjkim .long 0xb92f0042 # kmc %r4,%r2 39298998Sjkim 40298998Sjkim tmhh %r3,0x0004 # check for message-security-assist-4 41298998Sjkim jz .Lret 42298998Sjkim 43298998Sjkim lghi %r0,0 # query kmctr capability vector 44298998Sjkim la %r1,64(%r4) 45298998Sjkim .long 0xb92d2042 # kmctr %r4,%r2,%r2 46298998Sjkim 47298998Sjkim.Lret: 48238384Sjkim br %r14 49238384Sjkim.size OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities 50238384Sjkim 51238384Sjkim.globl OPENSSL_rdtsc 52238384Sjkim.type OPENSSL_rdtsc,@function 53238384Sjkim.align 16 54238384SjkimOPENSSL_rdtsc: 55238384Sjkim stck 16(%r15) 56238384Sjkim lg %r2,16(%r15) 57238384Sjkim br %r14 58238384Sjkim.size OPENSSL_rdtsc,.-OPENSSL_rdtsc 59238384Sjkim 60238384Sjkim.globl OPENSSL_atomic_add 61238384Sjkim.type OPENSSL_atomic_add,@function 62238384Sjkim.align 16 63238384SjkimOPENSSL_atomic_add: 64238384Sjkim l %r1,0(%r2) 65238384Sjkim.Lspin: lr %r0,%r1 66238384Sjkim ar %r0,%r3 67238384Sjkim cs %r1,%r0,0(%r2) 68238384Sjkim brc 4,.Lspin 69238384Sjkim lgfr %r2,%r0 # OpenSSL expects the new value 70238384Sjkim br %r14 71238384Sjkim.size OPENSSL_atomic_add,.-OPENSSL_atomic_add 72238384Sjkim 73238384Sjkim.globl OPENSSL_wipe_cpu 74238384Sjkim.type OPENSSL_wipe_cpu,@function 75238384Sjkim.align 16 76238384SjkimOPENSSL_wipe_cpu: 77238384Sjkim xgr %r0,%r0 78238384Sjkim xgr %r1,%r1 79238384Sjkim lgr %r2,%r15 80238384Sjkim xgr %r3,%r3 81238384Sjkim xgr %r4,%r4 82238384Sjkim lzdr %f0 83238384Sjkim lzdr %f1 84238384Sjkim lzdr %f2 85238384Sjkim lzdr %f3 86238384Sjkim lzdr %f4 87238384Sjkim lzdr %f5 88238384Sjkim lzdr %f6 89238384Sjkim lzdr %f7 90238384Sjkim br %r14 91238384Sjkim.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 92238384Sjkim 93238384Sjkim.globl OPENSSL_cleanse 94238384Sjkim.type OPENSSL_cleanse,@function 95238384Sjkim.align 16 96238384SjkimOPENSSL_cleanse: 97238384Sjkim#if !defined(__s390x__) && !defined(__s390x) 98238384Sjkim llgfr %r3,%r3 99238384Sjkim#endif 100238384Sjkim lghi %r4,15 101238384Sjkim lghi %r0,0 102238384Sjkim clgr %r3,%r4 103238384Sjkim jh .Lot 104238384Sjkim clgr %r3,%r0 105238384Sjkim bcr 8,%r14 106238384Sjkim.Little: 107238384Sjkim stc %r0,0(%r2) 108238384Sjkim la %r2,1(%r2) 109238384Sjkim brctg %r3,.Little 110238384Sjkim br %r14 111238384Sjkim.align 4 112238384Sjkim.Lot: tmll %r2,7 113238384Sjkim jz .Laligned 114238384Sjkim stc %r0,0(%r2) 115238384Sjkim la %r2,1(%r2) 116238384Sjkim brctg %r3,.Lot 117238384Sjkim.Laligned: 118238384Sjkim srlg %r4,%r3,3 119238384Sjkim.Loop: stg %r0,0(%r2) 120238384Sjkim la %r2,8(%r2) 121238384Sjkim brctg %r4,.Loop 122238384Sjkim lghi %r4,7 123238384Sjkim ngr %r3,%r4 124238384Sjkim jnz .Little 125238384Sjkim br %r14 126238384Sjkim.size OPENSSL_cleanse,.-OPENSSL_cleanse 127238384Sjkim 128238384Sjkim.section .init 129238384Sjkim brasl %r14,OPENSSL_cpuid_setup 130238384Sjkim 131298998Sjkim.comm OPENSSL_s390xcap_P,80,8 132