| // Copyright 2026 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 memHash32AES(k uint32, h uintptr) uintptr | |
| TEXT ·memHash32AES<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24 | |
| MOVD $·aeskeysched+0(SB), R3 | |
| VEOR V0.B16, V0.B16, V0.B16 | |
| VLD1 (R3), [V2.B16] | |
| VMOV R0, V0.S[2] | |
| VMOV R1, V0.D[0] | |
| AESE V2.B16, V0.B16 | |
| AESMC V0.B16, V0.B16 | |
| AESE V2.B16, V0.B16 | |
| AESMC V0.B16, V0.B16 | |
| AESE V2.B16, V0.B16 | |
| VMOV V0.D[0], R0 | |
| RET | |
| // func memHash64AES(k uint64, h uintptr) uintptr | |
| TEXT ·memHash64AES<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24 | |
| MOVD $·aeskeysched+0(SB), R3 | |
| VEOR V0.B16, V0.B16, V0.B16 | |
| VLD1 (R3), [V2.B16] | |
| VMOV R0, V0.D[1] | |
| VMOV R1, V0.D[0] | |
| AESE V2.B16, V0.B16 | |
| AESMC V0.B16, V0.B16 | |
| AESE V2.B16, V0.B16 | |
| AESMC V0.B16, V0.B16 | |
| AESE V2.B16, V0.B16 | |
| VMOV V0.D[0], R0 | |
| RET | |
| // func memHashAES(p unsafe.Pointer, h, size uintptr) uintptr | |
| TEXT ·memHashAES<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-32 | |
| // R0: data | |
| // R1: seed data | |
| // R2: length | |
| // At return, R0 = return value | |
| VEOR V30.B16, V30.B16, V30.B16 | |
| VMOV R1, V30.D[0] | |
| VMOV R2, V30.D[1] // load length into seed | |
| MOVD $·aeskeysched+0(SB), R4 | |
| VLD1.P 16(R4), [V0.B16] | |
| AESE V30.B16, V0.B16 | |
| AESMC V0.B16, V0.B16 | |
| CMP $16, R2 | |
| BLO aes0to15 | |
| BEQ aes16 | |
| CMP $32, R2 | |
| BLS aes17to32 | |
| CMP $64, R2 | |
| BLS aes33to64 | |
| CMP $128, R2 | |
| BLS aes65to128 | |
| B aes129plus | |
| aes0to15: | |
| CBZ R2, aes0 | |
| VEOR V2.B16, V2.B16, V2.B16 | |
| TBZ $3, R2, less_than_8 | |
| VLD1.P 8(R0), V2.D[0] | |
| less_than_8: | |
| TBZ $2, R2, less_than_4 | |
| VLD1.P 4(R0), V2.S[2] | |
| less_than_4: | |
| TBZ $1, R2, less_than_2 | |
| VLD1.P 2(R0), V2.H[6] | |
| less_than_2: | |
| TBZ $0, R2, done | |
| VLD1 (R0), V2.B[14] | |
| done: | |
| AESE V0.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| AESE V0.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| AESE V0.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| VMOV V2.D[0], R0 | |
| RET | |
| aes0: | |
| VMOV V0.D[0], R0 | |
| RET | |
| aes16: | |
| VLD1 (R0), [V2.B16] | |
| B done | |
| aes17to32: | |
| // make second seed | |
| VLD1 (R4), [V1.B16] | |
| AESE V30.B16, V1.B16 | |
| AESMC V1.B16, V1.B16 | |
| SUB $16, R2, R10 | |
| VLD1.P (R0)(R10), [V2.B16] | |
| VLD1 (R0), [V3.B16] | |
| AESE V0.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| AESE V1.B16, V3.B16 | |
| AESMC V3.B16, V3.B16 | |
| AESE V0.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| AESE V1.B16, V3.B16 | |
| AESMC V3.B16, V3.B16 | |
| AESE V0.B16, V2.B16 | |
| AESE V1.B16, V3.B16 | |
| VEOR V3.B16, V2.B16, V2.B16 | |
| VMOV V2.D[0], R0 | |
| RET | |
| aes33to64: | |
| VLD1 (R4), [V1.B16, V2.B16, V3.B16] | |
| AESE V30.B16, V1.B16 | |
| AESMC V1.B16, V1.B16 | |
| AESE V30.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| AESE V30.B16, V3.B16 | |
| AESMC V3.B16, V3.B16 | |
| SUB $32, R2, R10 | |
| VLD1.P (R0)(R10), [V4.B16, V5.B16] | |
| VLD1 (R0), [V6.B16, V7.B16] | |
| AESE V0.B16, V4.B16 | |
| AESMC V4.B16, V4.B16 | |
| AESE V1.B16, V5.B16 | |
| AESMC V5.B16, V5.B16 | |
| AESE V2.B16, V6.B16 | |
| AESMC V6.B16, V6.B16 | |
| AESE V3.B16, V7.B16 | |
| AESMC V7.B16, V7.B16 | |
| AESE V0.B16, V4.B16 | |
| AESMC V4.B16, V4.B16 | |
| AESE V1.B16, V5.B16 | |
| AESMC V5.B16, V5.B16 | |
| AESE V2.B16, V6.B16 | |
| AESMC V6.B16, V6.B16 | |
| AESE V3.B16, V7.B16 | |
| AESMC V7.B16, V7.B16 | |
| AESE V0.B16, V4.B16 | |
| AESE V1.B16, V5.B16 | |
| AESE V2.B16, V6.B16 | |
| AESE V3.B16, V7.B16 | |
| VEOR V6.B16, V4.B16, V4.B16 | |
| VEOR V7.B16, V5.B16, V5.B16 | |
| VEOR V5.B16, V4.B16, V4.B16 | |
| VMOV V4.D[0], R0 | |
| RET | |
| aes65to128: | |
| VLD1.P 64(R4), [V1.B16, V2.B16, V3.B16, V4.B16] | |
| VLD1 (R4), [V5.B16, V6.B16, V7.B16] | |
| AESE V30.B16, V1.B16 | |
| AESMC V1.B16, V1.B16 | |
| AESE V30.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| AESE V30.B16, V3.B16 | |
| AESMC V3.B16, V3.B16 | |
| AESE V30.B16, V4.B16 | |
| AESMC V4.B16, V4.B16 | |
| AESE V30.B16, V5.B16 | |
| AESMC V5.B16, V5.B16 | |
| AESE V30.B16, V6.B16 | |
| AESMC V6.B16, V6.B16 | |
| AESE V30.B16, V7.B16 | |
| AESMC V7.B16, V7.B16 | |
| SUB $64, R2, R10 | |
| VLD1.P (R0)(R10), [V8.B16, V9.B16, V10.B16, V11.B16] | |
| VLD1 (R0), [V12.B16, V13.B16, V14.B16, V15.B16] | |
| AESE V0.B16, V8.B16 | |
| AESMC V8.B16, V8.B16 | |
| AESE V1.B16, V9.B16 | |
| AESMC V9.B16, V9.B16 | |
| AESE V2.B16, V10.B16 | |
| AESMC V10.B16, V10.B16 | |
| AESE V3.B16, V11.B16 | |
| AESMC V11.B16, V11.B16 | |
| AESE V4.B16, V12.B16 | |
| AESMC V12.B16, V12.B16 | |
| AESE V5.B16, V13.B16 | |
| AESMC V13.B16, V13.B16 | |
| AESE V6.B16, V14.B16 | |
| AESMC V14.B16, V14.B16 | |
| AESE V7.B16, V15.B16 | |
| AESMC V15.B16, V15.B16 | |
| AESE V0.B16, V8.B16 | |
| AESMC V8.B16, V8.B16 | |
| AESE V1.B16, V9.B16 | |
| AESMC V9.B16, V9.B16 | |
| AESE V2.B16, V10.B16 | |
| AESMC V10.B16, V10.B16 | |
| AESE V3.B16, V11.B16 | |
| AESMC V11.B16, V11.B16 | |
| AESE V4.B16, V12.B16 | |
| AESMC V12.B16, V12.B16 | |
| AESE V5.B16, V13.B16 | |
| AESMC V13.B16, V13.B16 | |
| AESE V6.B16, V14.B16 | |
| AESMC V14.B16, V14.B16 | |
| AESE V7.B16, V15.B16 | |
| AESMC V15.B16, V15.B16 | |
| AESE V0.B16, V8.B16 | |
| AESE V1.B16, V9.B16 | |
| AESE V2.B16, V10.B16 | |
| AESE V3.B16, V11.B16 | |
| AESE V4.B16, V12.B16 | |
| AESE V5.B16, V13.B16 | |
| AESE V6.B16, V14.B16 | |
| AESE V7.B16, V15.B16 | |
| VEOR V12.B16, V8.B16, V8.B16 | |
| VEOR V13.B16, V9.B16, V9.B16 | |
| VEOR V14.B16, V10.B16, V10.B16 | |
| VEOR V15.B16, V11.B16, V11.B16 | |
| VEOR V10.B16, V8.B16, V8.B16 | |
| VEOR V11.B16, V9.B16, V9.B16 | |
| VEOR V9.B16, V8.B16, V8.B16 | |
| VMOV V8.D[0], R0 | |
| RET | |
| aes129plus: | |
| PRFM (R0), PLDL1KEEP | |
| VLD1.P 64(R4), [V1.B16, V2.B16, V3.B16, V4.B16] | |
| VLD1 (R4), [V5.B16, V6.B16, V7.B16] | |
| AESE V30.B16, V1.B16 | |
| AESMC V1.B16, V1.B16 | |
| AESE V30.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| AESE V30.B16, V3.B16 | |
| AESMC V3.B16, V3.B16 | |
| AESE V30.B16, V4.B16 | |
| AESMC V4.B16, V4.B16 | |
| AESE V30.B16, V5.B16 | |
| AESMC V5.B16, V5.B16 | |
| AESE V30.B16, V6.B16 | |
| AESMC V6.B16, V6.B16 | |
| AESE V30.B16, V7.B16 | |
| AESMC V7.B16, V7.B16 | |
| ADD R0, R2, R10 | |
| SUB $128, R10, R10 | |
| VLD1.P 64(R10), [V8.B16, V9.B16, V10.B16, V11.B16] | |
| VLD1 (R10), [V12.B16, V13.B16, V14.B16, V15.B16] | |
| SUB $1, R2, R2 | |
| LSR $7, R2, R2 | |
| aesloop: | |
| AESE V8.B16, V0.B16 | |
| AESMC V0.B16, V0.B16 | |
| AESE V9.B16, V1.B16 | |
| AESMC V1.B16, V1.B16 | |
| AESE V10.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| AESE V11.B16, V3.B16 | |
| AESMC V3.B16, V3.B16 | |
| AESE V12.B16, V4.B16 | |
| AESMC V4.B16, V4.B16 | |
| AESE V13.B16, V5.B16 | |
| AESMC V5.B16, V5.B16 | |
| AESE V14.B16, V6.B16 | |
| AESMC V6.B16, V6.B16 | |
| AESE V15.B16, V7.B16 | |
| AESMC V7.B16, V7.B16 | |
| VLD1.P 64(R0), [V8.B16, V9.B16, V10.B16, V11.B16] | |
| AESE V8.B16, V0.B16 | |
| AESMC V0.B16, V0.B16 | |
| AESE V9.B16, V1.B16 | |
| AESMC V1.B16, V1.B16 | |
| AESE V10.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| AESE V11.B16, V3.B16 | |
| AESMC V3.B16, V3.B16 | |
| VLD1.P 64(R0), [V12.B16, V13.B16, V14.B16, V15.B16] | |
| AESE V12.B16, V4.B16 | |
| AESMC V4.B16, V4.B16 | |
| AESE V13.B16, V5.B16 | |
| AESMC V5.B16, V5.B16 | |
| AESE V14.B16, V6.B16 | |
| AESMC V6.B16, V6.B16 | |
| AESE V15.B16, V7.B16 | |
| AESMC V7.B16, V7.B16 | |
| SUB $1, R2, R2 | |
| CBNZ R2, aesloop | |
| AESE V8.B16, V0.B16 | |
| AESMC V0.B16, V0.B16 | |
| AESE V9.B16, V1.B16 | |
| AESMC V1.B16, V1.B16 | |
| AESE V10.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| AESE V11.B16, V3.B16 | |
| AESMC V3.B16, V3.B16 | |
| AESE V12.B16, V4.B16 | |
| AESMC V4.B16, V4.B16 | |
| AESE V13.B16, V5.B16 | |
| AESMC V5.B16, V5.B16 | |
| AESE V14.B16, V6.B16 | |
| AESMC V6.B16, V6.B16 | |
| AESE V15.B16, V7.B16 | |
| AESMC V7.B16, V7.B16 | |
| AESE V8.B16, V0.B16 | |
| AESMC V0.B16, V0.B16 | |
| AESE V9.B16, V1.B16 | |
| AESMC V1.B16, V1.B16 | |
| AESE V10.B16, V2.B16 | |
| AESMC V2.B16, V2.B16 | |
| AESE V11.B16, V3.B16 | |
| AESMC V3.B16, V3.B16 | |
| AESE V12.B16, V4.B16 | |
| AESMC V4.B16, V4.B16 | |
| AESE V13.B16, V5.B16 | |
| AESMC V5.B16, V5.B16 | |
| AESE V14.B16, V6.B16 | |
| AESMC V6.B16, V6.B16 | |
| AESE V15.B16, V7.B16 | |
| AESMC V7.B16, V7.B16 | |
| AESE V8.B16, V0.B16 | |
| AESE V9.B16, V1.B16 | |
| AESE V10.B16, V2.B16 | |
| AESE V11.B16, V3.B16 | |
| AESE V12.B16, V4.B16 | |
| AESE V13.B16, V5.B16 | |
| AESE V14.B16, V6.B16 | |
| AESE V15.B16, V7.B16 | |
| VEOR V0.B16, V1.B16, V0.B16 | |
| VEOR V2.B16, V3.B16, V2.B16 | |
| VEOR V4.B16, V5.B16, V4.B16 | |
| VEOR V6.B16, V7.B16, V6.B16 | |
| VEOR V0.B16, V2.B16, V0.B16 | |
| VEOR V4.B16, V6.B16, V4.B16 | |
| VEOR V4.B16, V0.B16, V0.B16 | |
| VMOV V0.D[0], R0 | |
| RET |