| // Copyright 2016 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // +build s390x,!gccgo,!appengine |
| |
| #include "textflag.h" |
| |
| // func hasHWSupport() bool |
| TEXT ·hasHWSupport(SB),NOSPLIT,$16-1 |
| XOR R0, R0 // set function code to 0 (query) |
| LA mask-16(SP), R1 // 16-byte stack variable for mask |
| MOVD $(0x38<<40), R3 // mask for bits 18-20 (big endian) |
| |
| // check for KM AES functions |
| WORD $0xB92E0024 // cipher message (KM) |
| MOVD mask-16(SP), R2 |
| AND R3, R2 |
| CMPBNE R2, R3, notfound |
| |
| // check for KMC AES functions |
| WORD $0xB92F0024 // cipher message with chaining (KMC) |
| MOVD mask-16(SP), R2 |
| AND R3, R2 |
| CMPBNE R2, R3, notfound |
| |
| // check for KMCTR AES functions |
| WORD $0xB92D4024 // cipher message with counter (KMCTR) |
| MOVD mask-16(SP), R2 |
| AND R3, R2 |
| CMPBNE R2, R3, notfound |
| |
| // check for KIMD GHASH function |
| WORD $0xB93E0024 // compute intermediate message digest (KIMD) |
| MOVD mask-8(SP), R2 // bits 64-127 |
| MOVD $(1<<62), R5 |
| AND R5, R2 |
| CMPBNE R2, R5, notfound |
| |
| MOVB $1, ret+0(FP) |
| RET |
| notfound: |
| MOVB $0, ret+0(FP) |
| RET |