Text file src/internal/runtime/maps/memhash_arm64.s

     1  // Copyright 2026 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  #include "textflag.h"
     6  
     7  // func memHash32AES(p unsafe.Pointer, h uintptr) uintptr
     8  TEXT ·memHash32AES<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24
     9  	MOVD	$·aeskeysched+0(SB), R3
    10  
    11  	VEOR	V0.B16, V0.B16, V0.B16
    12  	VLD1	(R3), [V2.B16]
    13  	VLD1	(R0), V0.S[2]
    14  	VMOV	R1, V0.D[0]
    15  
    16  	AESE	V2.B16, V0.B16
    17  	AESMC	V0.B16, V0.B16
    18  	AESE	V2.B16, V0.B16
    19  	AESMC	V0.B16, V0.B16
    20  	AESE	V2.B16, V0.B16
    21  
    22  	VMOV	V0.D[0], R0
    23  	RET
    24  
    25  // func memHash64AES(p unsafe.Pointer, h uintptr) uintptr
    26  TEXT ·memHash64AES<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24
    27  	MOVD	$·aeskeysched+0(SB), R3
    28  
    29  	VEOR	V0.B16, V0.B16, V0.B16
    30  	VLD1	(R3), [V2.B16]
    31  	VLD1	(R0), V0.D[1]
    32  	VMOV	R1, V0.D[0]
    33  
    34  	AESE	V2.B16, V0.B16
    35  	AESMC	V0.B16, V0.B16
    36  	AESE	V2.B16, V0.B16
    37  	AESMC	V0.B16, V0.B16
    38  	AESE	V2.B16, V0.B16
    39  
    40  	VMOV	V0.D[0], R0
    41  	RET
    42  
    43  // func memHashAES(p unsafe.Pointer, h, size uintptr) uintptr
    44  TEXT ·memHashAES<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-32
    45  	B	·aeshashbody<>(SB)
    46  
    47  // func strHashAES(p unsafe.Pointer, h uintptr) uintptr
    48  TEXT ·strHashAES<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24
    49  	LDP	(R0), (R0, R2)	// string data / length
    50  	B	·aeshashbody<>(SB)
    51  
    52  // R0: data
    53  // R1: seed data
    54  // R2: length
    55  // At return, R0 = return value
    56  TEXT ·aeshashbody<>(SB),NOSPLIT|NOFRAME,$0
    57  	VEOR	V30.B16, V30.B16, V30.B16
    58  	VMOV	R1, V30.D[0]
    59  	VMOV	R2, V30.D[1] // load length into seed
    60  
    61  	MOVD	$·aeskeysched+0(SB), R4
    62  	VLD1.P	16(R4), [V0.B16]
    63  	AESE	V30.B16, V0.B16
    64  	AESMC	V0.B16, V0.B16
    65  	CMP	$16, R2
    66  	BLO	aes0to15
    67  	BEQ	aes16
    68  	CMP	$32, R2
    69  	BLS	aes17to32
    70  	CMP	$64, R2
    71  	BLS	aes33to64
    72  	CMP	$128, R2
    73  	BLS	aes65to128
    74  	B	aes129plus
    75  
    76  aes0to15:
    77  	CBZ	R2, aes0
    78  	VEOR	V2.B16, V2.B16, V2.B16
    79  	TBZ	$3, R2, less_than_8
    80  	VLD1.P	8(R0), V2.D[0]
    81  
    82  less_than_8:
    83  	TBZ	$2, R2, less_than_4
    84  	VLD1.P	4(R0), V2.S[2]
    85  
    86  less_than_4:
    87  	TBZ	$1, R2, less_than_2
    88  	VLD1.P	2(R0), V2.H[6]
    89  
    90  less_than_2:
    91  	TBZ	$0, R2, done
    92  	VLD1	(R0), V2.B[14]
    93  done:
    94  	AESE	V0.B16, V2.B16
    95  	AESMC	V2.B16, V2.B16
    96  	AESE	V0.B16, V2.B16
    97  	AESMC	V2.B16, V2.B16
    98  	AESE	V0.B16, V2.B16
    99  	AESMC	V2.B16, V2.B16
   100  
   101  	VMOV	V2.D[0], R0
   102  	RET
   103  
   104  aes0:
   105  	VMOV	V0.D[0], R0
   106  	RET
   107  
   108  aes16:
   109  	VLD1	(R0), [V2.B16]
   110  	B	done
   111  
   112  aes17to32:
   113  	// make second seed
   114  	VLD1	(R4), [V1.B16]
   115  	AESE	V30.B16, V1.B16
   116  	AESMC	V1.B16, V1.B16
   117  	SUB	$16, R2, R10
   118  	VLD1.P	(R0)(R10), [V2.B16]
   119  	VLD1	(R0), [V3.B16]
   120  
   121  	AESE	V0.B16, V2.B16
   122  	AESMC	V2.B16, V2.B16
   123  	AESE	V1.B16, V3.B16
   124  	AESMC	V3.B16, V3.B16
   125  
   126  	AESE	V0.B16, V2.B16
   127  	AESMC	V2.B16, V2.B16
   128  	AESE	V1.B16, V3.B16
   129  	AESMC	V3.B16, V3.B16
   130  
   131  	AESE	V0.B16, V2.B16
   132  	AESE	V1.B16, V3.B16
   133  
   134  	VEOR	V3.B16, V2.B16, V2.B16
   135  
   136  	VMOV	V2.D[0], R0
   137  	RET
   138  
   139  aes33to64:
   140  	VLD1	(R4), [V1.B16, V2.B16, V3.B16]
   141  	AESE	V30.B16, V1.B16
   142  	AESMC	V1.B16, V1.B16
   143  	AESE	V30.B16, V2.B16
   144  	AESMC	V2.B16, V2.B16
   145  	AESE	V30.B16, V3.B16
   146  	AESMC	V3.B16, V3.B16
   147  	SUB	$32, R2, R10
   148  
   149  	VLD1.P	(R0)(R10), [V4.B16, V5.B16]
   150  	VLD1	(R0), [V6.B16, V7.B16]
   151  
   152  	AESE	V0.B16, V4.B16
   153  	AESMC	V4.B16, V4.B16
   154  	AESE	V1.B16, V5.B16
   155  	AESMC	V5.B16, V5.B16
   156  	AESE	V2.B16, V6.B16
   157  	AESMC	V6.B16, V6.B16
   158  	AESE	V3.B16, V7.B16
   159  	AESMC	V7.B16, V7.B16
   160  
   161  	AESE	V0.B16, V4.B16
   162  	AESMC	V4.B16, V4.B16
   163  	AESE	V1.B16, V5.B16
   164  	AESMC	V5.B16, V5.B16
   165  	AESE	V2.B16, V6.B16
   166  	AESMC	V6.B16, V6.B16
   167  	AESE	V3.B16, V7.B16
   168  	AESMC	V7.B16, V7.B16
   169  
   170  	AESE	V0.B16, V4.B16
   171  	AESE	V1.B16, V5.B16
   172  	AESE	V2.B16, V6.B16
   173  	AESE	V3.B16, V7.B16
   174  
   175  	VEOR	V6.B16, V4.B16, V4.B16
   176  	VEOR	V7.B16, V5.B16, V5.B16
   177  	VEOR	V5.B16, V4.B16, V4.B16
   178  
   179  	VMOV	V4.D[0], R0
   180  	RET
   181  
   182  aes65to128:
   183  	VLD1.P	64(R4), [V1.B16, V2.B16, V3.B16, V4.B16]
   184  	VLD1	(R4), [V5.B16, V6.B16, V7.B16]
   185  	AESE	V30.B16, V1.B16
   186  	AESMC	V1.B16, V1.B16
   187  	AESE	V30.B16, V2.B16
   188  	AESMC	V2.B16, V2.B16
   189  	AESE	V30.B16, V3.B16
   190  	AESMC	V3.B16, V3.B16
   191  	AESE	V30.B16, V4.B16
   192  	AESMC	V4.B16, V4.B16
   193  	AESE	V30.B16, V5.B16
   194  	AESMC	V5.B16, V5.B16
   195  	AESE	V30.B16, V6.B16
   196  	AESMC	V6.B16, V6.B16
   197  	AESE	V30.B16, V7.B16
   198  	AESMC	V7.B16, V7.B16
   199  
   200  	SUB	$64, R2, R10
   201  	VLD1.P	(R0)(R10), [V8.B16, V9.B16, V10.B16, V11.B16]
   202  	VLD1	(R0), [V12.B16, V13.B16, V14.B16, V15.B16]
   203  	AESE	V0.B16,	 V8.B16
   204  	AESMC	V8.B16,  V8.B16
   205  	AESE	V1.B16,	 V9.B16
   206  	AESMC	V9.B16,  V9.B16
   207  	AESE	V2.B16, V10.B16
   208  	AESMC	V10.B16,  V10.B16
   209  	AESE	V3.B16, V11.B16
   210  	AESMC	V11.B16,  V11.B16
   211  	AESE	V4.B16, V12.B16
   212  	AESMC	V12.B16,  V12.B16
   213  	AESE	V5.B16, V13.B16
   214  	AESMC	V13.B16,  V13.B16
   215  	AESE	V6.B16, V14.B16
   216  	AESMC	V14.B16,  V14.B16
   217  	AESE	V7.B16, V15.B16
   218  	AESMC	V15.B16,  V15.B16
   219  
   220  	AESE	V0.B16,	 V8.B16
   221  	AESMC	V8.B16,  V8.B16
   222  	AESE	V1.B16,	 V9.B16
   223  	AESMC	V9.B16,  V9.B16
   224  	AESE	V2.B16, V10.B16
   225  	AESMC	V10.B16,  V10.B16
   226  	AESE	V3.B16, V11.B16
   227  	AESMC	V11.B16,  V11.B16
   228  	AESE	V4.B16, V12.B16
   229  	AESMC	V12.B16,  V12.B16
   230  	AESE	V5.B16, V13.B16
   231  	AESMC	V13.B16,  V13.B16
   232  	AESE	V6.B16, V14.B16
   233  	AESMC	V14.B16,  V14.B16
   234  	AESE	V7.B16, V15.B16
   235  	AESMC	V15.B16,  V15.B16
   236  
   237  	AESE	V0.B16,	 V8.B16
   238  	AESE	V1.B16,	 V9.B16
   239  	AESE	V2.B16, V10.B16
   240  	AESE	V3.B16, V11.B16
   241  	AESE	V4.B16, V12.B16
   242  	AESE	V5.B16, V13.B16
   243  	AESE	V6.B16, V14.B16
   244  	AESE	V7.B16, V15.B16
   245  
   246  	VEOR	V12.B16, V8.B16, V8.B16
   247  	VEOR	V13.B16, V9.B16, V9.B16
   248  	VEOR	V14.B16, V10.B16, V10.B16
   249  	VEOR	V15.B16, V11.B16, V11.B16
   250  	VEOR	V10.B16, V8.B16, V8.B16
   251  	VEOR	V11.B16, V9.B16, V9.B16
   252  	VEOR	V9.B16, V8.B16, V8.B16
   253  
   254  	VMOV	V8.D[0], R0
   255  	RET
   256  
   257  aes129plus:
   258  	PRFM (R0), PLDL1KEEP
   259  	VLD1.P	64(R4), [V1.B16, V2.B16, V3.B16, V4.B16]
   260  	VLD1	(R4), [V5.B16, V6.B16, V7.B16]
   261  	AESE	V30.B16, V1.B16
   262  	AESMC	V1.B16, V1.B16
   263  	AESE	V30.B16, V2.B16
   264  	AESMC	V2.B16, V2.B16
   265  	AESE	V30.B16, V3.B16
   266  	AESMC	V3.B16, V3.B16
   267  	AESE	V30.B16, V4.B16
   268  	AESMC	V4.B16, V4.B16
   269  	AESE	V30.B16, V5.B16
   270  	AESMC	V5.B16, V5.B16
   271  	AESE	V30.B16, V6.B16
   272  	AESMC	V6.B16, V6.B16
   273  	AESE	V30.B16, V7.B16
   274  	AESMC	V7.B16, V7.B16
   275  	ADD	R0, R2, R10
   276  	SUB	$128, R10, R10
   277  	VLD1.P	64(R10), [V8.B16, V9.B16, V10.B16, V11.B16]
   278  	VLD1	(R10), [V12.B16, V13.B16, V14.B16, V15.B16]
   279  	SUB	$1, R2, R2
   280  	LSR	$7, R2, R2
   281  
   282  aesloop:
   283  	AESE	V8.B16,	 V0.B16
   284  	AESMC	V0.B16,  V0.B16
   285  	AESE	V9.B16,	 V1.B16
   286  	AESMC	V1.B16,  V1.B16
   287  	AESE	V10.B16, V2.B16
   288  	AESMC	V2.B16,  V2.B16
   289  	AESE	V11.B16, V3.B16
   290  	AESMC	V3.B16,  V3.B16
   291  	AESE	V12.B16, V4.B16
   292  	AESMC	V4.B16,  V4.B16
   293  	AESE	V13.B16, V5.B16
   294  	AESMC	V5.B16,  V5.B16
   295  	AESE	V14.B16, V6.B16
   296  	AESMC	V6.B16,  V6.B16
   297  	AESE	V15.B16, V7.B16
   298  	AESMC	V7.B16,  V7.B16
   299  
   300  	VLD1.P	64(R0), [V8.B16, V9.B16, V10.B16, V11.B16]
   301  	AESE	V8.B16,	 V0.B16
   302  	AESMC	V0.B16,  V0.B16
   303  	AESE	V9.B16,	 V1.B16
   304  	AESMC	V1.B16,  V1.B16
   305  	AESE	V10.B16, V2.B16
   306  	AESMC	V2.B16,  V2.B16
   307  	AESE	V11.B16, V3.B16
   308  	AESMC	V3.B16,  V3.B16
   309  
   310  	VLD1.P	64(R0), [V12.B16, V13.B16, V14.B16, V15.B16]
   311  	AESE	V12.B16, V4.B16
   312  	AESMC	V4.B16,  V4.B16
   313  	AESE	V13.B16, V5.B16
   314  	AESMC	V5.B16,  V5.B16
   315  	AESE	V14.B16, V6.B16
   316  	AESMC	V6.B16,  V6.B16
   317  	AESE	V15.B16, V7.B16
   318  	AESMC	V7.B16,  V7.B16
   319  	SUB	$1, R2, R2
   320  	CBNZ	R2, aesloop
   321  
   322  	AESE	V8.B16,	 V0.B16
   323  	AESMC	V0.B16,  V0.B16
   324  	AESE	V9.B16,	 V1.B16
   325  	AESMC	V1.B16,  V1.B16
   326  	AESE	V10.B16, V2.B16
   327  	AESMC	V2.B16,  V2.B16
   328  	AESE	V11.B16, V3.B16
   329  	AESMC	V3.B16,  V3.B16
   330  	AESE	V12.B16, V4.B16
   331  	AESMC	V4.B16,  V4.B16
   332  	AESE	V13.B16, V5.B16
   333  	AESMC	V5.B16,  V5.B16
   334  	AESE	V14.B16, V6.B16
   335  	AESMC	V6.B16,  V6.B16
   336  	AESE	V15.B16, V7.B16
   337  	AESMC	V7.B16,  V7.B16
   338  
   339  	AESE	V8.B16,	 V0.B16
   340  	AESMC	V0.B16,  V0.B16
   341  	AESE	V9.B16,	 V1.B16
   342  	AESMC	V1.B16,  V1.B16
   343  	AESE	V10.B16, V2.B16
   344  	AESMC	V2.B16,  V2.B16
   345  	AESE	V11.B16, V3.B16
   346  	AESMC	V3.B16,  V3.B16
   347  	AESE	V12.B16, V4.B16
   348  	AESMC	V4.B16,  V4.B16
   349  	AESE	V13.B16, V5.B16
   350  	AESMC	V5.B16,  V5.B16
   351  	AESE	V14.B16, V6.B16
   352  	AESMC	V6.B16,  V6.B16
   353  	AESE	V15.B16, V7.B16
   354  	AESMC	V7.B16,  V7.B16
   355  
   356  	AESE	V8.B16,	 V0.B16
   357  	AESE	V9.B16,	 V1.B16
   358  	AESE	V10.B16, V2.B16
   359  	AESE	V11.B16, V3.B16
   360  	AESE	V12.B16, V4.B16
   361  	AESE	V13.B16, V5.B16
   362  	AESE	V14.B16, V6.B16
   363  	AESE	V15.B16, V7.B16
   364  
   365  	VEOR	V0.B16, V1.B16, V0.B16
   366  	VEOR	V2.B16, V3.B16, V2.B16
   367  	VEOR	V4.B16, V5.B16, V4.B16
   368  	VEOR	V6.B16, V7.B16, V6.B16
   369  	VEOR	V0.B16, V2.B16, V0.B16
   370  	VEOR	V4.B16, V6.B16, V4.B16
   371  	VEOR	V4.B16, V0.B16, V0.B16
   372  
   373  	VMOV	V0.D[0], R0
   374  	RET
   375  

View as plain text