github.com/Psiphon-Labs/tls-tris@v0.0.0-20230824155421-58bf6d336a9a/cipherhw/asm_s390x.s (about) 1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // +build s390x,!gccgo,!appengine 6 7 #include "textflag.h" 8 9 // func hasHWSupport() bool 10 TEXT ·hasHWSupport(SB),NOSPLIT,$16-1 11 XOR R0, R0 // set function code to 0 (query) 12 LA mask-16(SP), R1 // 16-byte stack variable for mask 13 MOVD $(0x38<<40), R3 // mask for bits 18-20 (big endian) 14 15 // check for KM AES functions 16 WORD $0xB92E0024 // cipher message (KM) 17 MOVD mask-16(SP), R2 18 AND R3, R2 19 CMPBNE R2, R3, notfound 20 21 // check for KMC AES functions 22 WORD $0xB92F0024 // cipher message with chaining (KMC) 23 MOVD mask-16(SP), R2 24 AND R3, R2 25 CMPBNE R2, R3, notfound 26 27 // check for KMCTR AES functions 28 WORD $0xB92D4024 // cipher message with counter (KMCTR) 29 MOVD mask-16(SP), R2 30 AND R3, R2 31 CMPBNE R2, R3, notfound 32 33 // check for KIMD GHASH function 34 WORD $0xB93E0024 // compute intermediate message digest (KIMD) 35 MOVD mask-8(SP), R2 // bits 64-127 36 MOVD $(1<<62), R5 37 AND R5, R2 38 CMPBNE R2, R5, notfound 39 40 MOVB $1, ret+0(FP) 41 RET 42 notfound: 43 MOVB $0, ret+0(FP) 44 RET