-// Copyright 2018 The Go Authors. All rights reserved.\r
-// Use of this source code is governed by a BSD-style\r
-// license that can be found in the LICENSE file.\r
-\r
-#include "textflag.h"\r
-\r
-// func hasKM() bool\r
-TEXT ·hasKM(SB),NOSPLIT,$16-1\r
- XOR R0, R0 // set function code to 0 (query)\r
- LA mask-16(SP), R1 // 16-byte stack variable for mask\r
- MOVD $(0x38<<40), R3 // mask for bits 18-20 (big endian)\r
-\r
- // check for KM AES functions\r
- WORD $0xB92E0024 // cipher message (KM)\r
- MOVD mask-16(SP), R2\r
- AND R3, R2\r
- CMPBNE R2, R3, notfound\r
-\r
- MOVB $1, ret+0(FP)\r
- RET\r
-notfound:\r
- MOVB $0, ret+0(FP)\r
- RET\r
-\r
-// func hasKMC() bool\r
-TEXT ·hasKMC(SB),NOSPLIT,$16-1\r
- XOR R0, R0 // set function code to 0 (query)\r
- LA mask-16(SP), R1 // 16-byte stack variable for mask\r
- MOVD $(0x38<<40), R3 // mask for bits 18-20 (big endian)\r
-\r
- // check for KMC AES functions\r
- WORD $0xB92F0024 // cipher message with chaining (KMC)\r
- MOVD mask-16(SP), R2\r
- AND R3, R2\r
- CMPBNE R2, R3, notfound\r
-\r
- MOVB $1, ret+0(FP)\r
- RET\r
-notfound:\r
- MOVB $0, ret+0(FP)\r
- RET\r
-\r
-// func hasKMCTR() bool\r
-TEXT ·hasKMCTR(SB),NOSPLIT,$16-1\r
- XOR R0, R0 // set function code to 0 (query)\r
- LA mask-16(SP), R1 // 16-byte stack variable for mask\r
- MOVD $(0x38<<40), R3 // mask for bits 18-20 (big endian)\r
-\r
- // check for KMCTR AES functions\r
- WORD $0xB92D4024 // cipher message with counter (KMCTR)\r
- MOVD mask-16(SP), R2\r
- AND R3, R2\r
- CMPBNE R2, R3, notfound\r
-\r
- MOVB $1, ret+0(FP)\r
- RET\r
-notfound:\r
- MOVB $0, ret+0(FP)\r
- RET\r
-\r
-// func hasKMA() bool\r
-TEXT ·hasKMA(SB),NOSPLIT,$24-1\r
- MOVD $tmp-24(SP), R1\r
- MOVD $2, R0 // store 24-bytes\r
- XC $24, (R1), (R1)\r
- WORD $0xb2b01000 // STFLE (R1)\r
- MOVWZ 16(R1), R2\r
- ANDW $(1<<13), R2 // test bit 146 (message-security-assist 8)\r
- BEQ no\r
-\r
- MOVD $0, R0 // KMA-Query\r
- XC $16, (R1), (R1)\r
- WORD $0xb9296024 // kma %r6,%r2,%r4\r
- MOVWZ (R1), R2\r
- WORD $0xa7213800 // TMLL R2, $0x3800\r
- BVS yes\r
-no:\r
- MOVB $0, ret+0(FP)\r
- RET\r
-yes:\r
- MOVB $1, ret+0(FP)\r
- RET\r
-\r
-// func hasKIMD() bool\r
-TEXT ·hasKIMD(SB),NOSPLIT,$16-1\r
- XOR R0, R0 // set function code to 0 (query)\r
- LA mask-16(SP), R1 // 16-byte stack variable for mask\r
- MOVD $(0x38<<40), R3 // mask for bits 18-20 (big endian)\r
-\r
- // check for KIMD GHASH function\r
- WORD $0xB93E0024 // compute intermediate message digest (KIMD)\r
- MOVD mask-8(SP), R2 // bits 64-127\r
- MOVD $(1<<62), R5\r
- AND R5, R2\r
- CMPBNE R2, R5, notfound\r
-\r
- MOVB $1, ret+0(FP)\r
- RET\r
-notfound:\r
- MOVB $0, ret+0(FP)\r
- RET\r
+// Copyright 2018 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.
+
+#include "textflag.h"
+
+// func hasKM() bool
+TEXT ·hasKM(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
+
+ MOVB $1, ret+0(FP)
+ RET
+notfound:
+ MOVB $0, ret+0(FP)
+ RET
+
+// func hasKMC() bool
+TEXT ·hasKMC(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 KMC AES functions
+ WORD $0xB92F0024 // cipher message with chaining (KMC)
+ MOVD mask-16(SP), R2
+ AND R3, R2
+ CMPBNE R2, R3, notfound
+
+ MOVB $1, ret+0(FP)
+ RET
+notfound:
+ MOVB $0, ret+0(FP)
+ RET
+
+// func hasKMCTR() bool
+TEXT ·hasKMCTR(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 KMCTR AES functions
+ WORD $0xB92D4024 // cipher message with counter (KMCTR)
+ MOVD mask-16(SP), R2
+ AND R3, R2
+ CMPBNE R2, R3, notfound
+
+ MOVB $1, ret+0(FP)
+ RET
+notfound:
+ MOVB $0, ret+0(FP)
+ RET
+
+// func hasKMA() bool
+TEXT ·hasKMA(SB),NOSPLIT,$24-1
+ MOVD $tmp-24(SP), R1
+ MOVD $2, R0 // store 24-bytes
+ XC $24, (R1), (R1)
+ WORD $0xb2b01000 // STFLE (R1)
+ MOVWZ 16(R1), R2
+ ANDW $(1<<13), R2 // test bit 146 (message-security-assist 8)
+ BEQ no
+
+ MOVD $0, R0 // KMA-Query
+ XC $16, (R1), (R1)
+ WORD $0xb9296024 // kma %r6,%r2,%r4
+ MOVWZ (R1), R2
+ WORD $0xa7213800 // TMLL R2, $0x3800
+ BVS yes
+no:
+ MOVB $0, ret+0(FP)
+ RET
+yes:
+ MOVB $1, ret+0(FP)
+ RET
+
+// func hasKIMD() bool
+TEXT ·hasKIMD(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 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