github.com/piotrnar/gocoin@v0.0.0-20240512203912-faa0448c5e96/lib/others/siphash/hash128_arm.s (about)

     1  #include "textflag.h"
     2  #define R10 g
     3  #define ROUND()\
     4  	ADD.S	R2,R0,R0;\
     5  	ADC	R3,R1,R1;\
     6  	EOR	R2<<13,R0,R8;\
     7  	EOR	R3>>19,R8,R8;\
     8  	EOR	R2>>19,R1,R11;\
     9  	EOR	R3<<13,R11,R11;\
    10  	ADD.S	R6,R4,R4;\
    11  	ADC	R7,R5,R5;\
    12  	EOR	R6<<16,R4,R2;\
    13  	EOR	R7>>16,R2,R2;\
    14  	EOR	R6>>16,R5,R3;\
    15  	EOR	R7<<16,R3,R3;\
    16  	ADD.S	R2,R1,R1;\
    17  	ADC	R3,R0,R0;\
    18  	EOR	R2<<21,R1,R6;\
    19  	EOR	R3>>11,R6,R6;\
    20  	EOR	R2>>11,R0,R7;\
    21  	EOR	R3<<21,R7,R7;\
    22  	ADD.S	R8,R4,R4;\
    23  	ADC	R11,R5,R5;\
    24  	EOR	R8<<17,R4,R2;\
    25  	EOR	R11>>15,R2,R2;\
    26  	EOR	R8>>15,R5,R3;\
    27  	EOR	R11<<17,R3,R3;\
    28  	ADD.S	R2,R1,R1;\
    29  	ADC	R3,R0,R0;\
    30  	EOR	R2<<13,R1,R8;\
    31  	EOR	R3>>19,R8,R8;\
    32  	EOR	R2>>19,R0,R11;\
    33  	EOR	R3<<13,R11,R11;\
    34  	ADD.S	R6,R5,R5;\
    35  	ADC	R7,R4,R4;\
    36  	EOR	R6<<16,R5,R2;\
    37  	EOR	R7>>16,R2,R2;\
    38  	EOR	R6>>16,R4,R3;\
    39  	EOR	R7<<16,R3,R3;\
    40  	ADD.S	R2,R0,R0;\
    41  	ADC	R3,R1,R1;\
    42  	EOR	R2<<21,R0,R6;\
    43  	EOR	R3>>11,R6,R6;\
    44  	EOR	R2>>11,R1,R7;\
    45  	EOR	R3<<21,R7,R7;\
    46  	ADD.S	R8,R5,R5;\
    47  	ADC	R11,R4,R4;\
    48  	EOR	R8<<17,R5,R2;\
    49  	EOR	R11>>15,R2,R2;\
    50  	EOR	R8>>15,R4,R3;\
    51  	EOR	R11<<17,R3,R3;\
    52  
    53  // Hash128(k0, k1 uint64, b []byte) (uint64, uint64)
    54  TEXT ·Hash128(SB),NOSPLIT,$8-44
    55  	MOVW	R10,sav-8(SP)
    56  	MOVW	k0_lo+0(FP),R12
    57  	MOVW	k0_hi+4(FP),R14
    58  	MOVW	$0x70736575,R0
    59  	MOVW	$0x736f6d65,R1
    60  	MOVW	$0x6e657261,R4
    61  	MOVW	$0x6c796765,R5
    62  	EOR	R12,R0,R0
    63  	EOR	R14,R1,R1
    64  	EOR	R12,R4,R4
    65  	EOR	R14,R5,R5
    66  	MOVW	k1_lo+8(FP),R12
    67  	MOVW	k1_hi+12(FP),R14
    68  	MOVW	$0x6e646f83,R2
    69  	MOVW	$0x646f7261,R3
    70  	MOVW	$0x79746573,R6
    71  	MOVW	$0x74656462,R7
    72  	EOR	R12,R2,R2
    73  	EOR	R14,R3,R3
    74  	EOR	R12,R6,R6
    75  	EOR	R14,R7,R7
    76  	MOVW	b+16(FP),R10
    77  	MOVW	b_len+20(FP),R11
    78  	ADD	R10,R11,R11
    79  	MOVW	R11,endb-4(SP)
    80  hashloop128:
    81  	MOVW	endb-4(SP),R11
    82  	SUB	R10,R11,R11
    83  	SUB.S	$8,R11
    84  	BLO	hashend128
    85  	MOVM.IA.W (R10),[R12,R14]
    86  	EOR	R12,R6,R6
    87  	EOR	R14,R7,R7
    88  	ROUND()
    89  	EOR	R12,R0,R0
    90  	EOR	R14,R1,R1
    91  	B	hashloop128
    92  hashloop128unaligned:
    93  	MOVW	endb-4(SP),R11
    94  	SUB	R10,R11,R11
    95  	SUB.S	$8,R11
    96  	BLO	hashend128
    97  	MOVB	(R10),R12
    98  	MOVB	1(R10),R11
    99  	ORR	R11<<8,R12,R12
   100  	MOVB	2(R10),R11
   101  	ORR	R11<<16,R12,R12
   102  	MOVB	3(R10),R11
   103  	ORR	R11<<24,R12,R12
   104  	MOVB	4(R10),R14
   105  	MOVB	5(R10),R11
   106  	ORR	R11<<8,R14,R14
   107  	MOVB	6(R10),R11
   108  	ORR	R11<<16,R14,R14
   109  	MOVB	7(R10),R11
   110  	ORR	R11<<24,R14,R14
   111  	ADD	$8,R10,R10
   112  	EOR	R12,R6,R6
   113  	EOR	R14,R7,R7
   114  	ROUND()
   115  	EOR	R12,R0,R0
   116  	EOR	R14,R1,R1
   117  	B	hashloop128unaligned
   118  hashend128:
   119  	MOVW	$0x0,R12
   120  	MOVW	$0x0,R14
   121  	RSB	$0,R11,R11
   122  	AND.S	$7,R11
   123  	BEQ	hashlast128
   124  	MOVW	(R10),R12
   125  	SLL	$3,R11
   126  	AND	$63,R11
   127  	SUB.S	$32,R11,R11
   128  	BEQ	hashlast128
   129  	BLO	hashhi128
   130  	MOVW	R12<<R11,R12
   131  	MOVW	R12>>R11,R12
   132  	B	hashlast128
   133  hashhi128:
   134  	ADD	$32,R11
   135  	MOVW	4(R10),R14
   136  	MOVW	R14<<R11,R14
   137  	MOVW	R14>>R11,R14
   138  hashlast128:
   139  	MOVW	b_len+20(FP),R11
   140  	ORR	R11<<24,R14,R14
   141  	EOR	R12,R6,R6
   142  	EOR	R14,R7,R7
   143  	ROUND()
   144  	EOR	R12,R0,R0
   145  	EOR	R14,R1,R1
   146  	EOR	$238,R4
   147  	ROUND()
   148  	ROUND()
   149  	EOR	R0,R2,R12
   150  	EOR	R1,R3,R14
   151  	EOR	R4,R12,R12
   152  	EOR	R5,R14,R14
   153  	EOR	R6,R12,R12
   154  	EOR	R7,R14,R14
   155  	MOVW	R12,ret_lo+28(FP)
   156  	MOVW	R14,ret_hi+32(FP)
   157  	EOR	$221,R2
   158  	ROUND()
   159  	ROUND()
   160  	EOR	R0,R2,R12
   161  	EOR	R1,R3,R14
   162  	EOR	R4,R12,R12
   163  	EOR	R5,R14,R14
   164  	EOR	R6,R12,R12
   165  	EOR	R7,R14,R14
   166  	MOVW	R12,unnamed_lo+36(FP)
   167  	MOVW	R14,unnamed_hi+40(FP)
   168  	MOVW	sav-8(SP),R10
   169  	RET