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

     1  // +build amd64,!appengine,!gccgo
     2  
     3  // This is a translation of the gcc output of FloodyBerry's pure-C public
     4  // domain siphash implementation at https://github.com/floodyberry/siphash
     5  // func Hash(k0, k1 uint64, b []byte) uint64
     6  TEXT	·Hash(SB),4,$0-48
     7  	MOVQ	k0+0(FP),CX
     8  	MOVQ	$0x736F6D6570736575,R9
     9  	MOVQ	k1+8(FP),DI
    10  	MOVQ	$0x6C7967656E657261,BX
    11  	MOVQ	$0x646F72616E646F6D,AX
    12  	MOVQ	b_len+24(FP),DX
    13  	MOVQ	DX,R11
    14  	MOVQ	DX,R10
    15  	XORQ	CX,R9
    16  	XORQ	CX,BX
    17  	MOVQ	$0x7465646279746573,CX
    18  	XORQ	DI,AX
    19  	XORQ	DI,CX
    20  	SHLQ	$0x38,R11
    21  	XORQ	DI,DI
    22  	MOVQ	b_base+16(FP),SI
    23  	ANDQ	$0xFFFFFFFFFFFFFFF8,R10
    24  	JE	afterLoop
    25  	XCHGQ	AX,AX
    26  loopBody:
    27  	MOVQ	0(SI)(DI*1),R8
    28  	ADDQ	AX,R9
    29  	RORQ	$0x33,AX
    30  	XORQ	R9,AX
    31  	RORQ	$0x20,R9
    32  	ADDQ	$0x8,DI
    33  	XORQ	R8,CX
    34  	ADDQ	CX,BX
    35  	RORQ	$0x30,CX
    36  	XORQ	BX,CX
    37  	ADDQ	AX,BX
    38  	RORQ	$0x2F,AX
    39  	ADDQ	CX,R9
    40  	RORQ	$0x2B,CX
    41  	XORQ	BX,AX
    42  	XORQ	R9,CX
    43  	RORQ	$0x20,BX
    44  	ADDQ	AX,R9
    45  	ADDQ	CX,BX
    46  	RORQ	$0x33,AX
    47  	RORQ	$0x30,CX
    48  	XORQ	R9,AX
    49  	XORQ	BX,CX
    50  	RORQ	$0x20,R9
    51  	ADDQ	AX,BX
    52  	ADDQ	CX,R9
    53  	RORQ	$0x2F,AX
    54  	RORQ	$0x2B,CX
    55  	XORQ	BX,AX
    56  	RORQ	$0x20,BX
    57  	XORQ	R9,CX
    58  	XORQ	R8,R9
    59  	CMPQ	R10,DI
    60  	JA	loopBody
    61  afterLoop:
    62  	SUBQ	R10,DX
    63  
    64  	CMPQ	DX,$0x7
    65  	JA	afterSwitch
    66  
    67  	// no support for jump tables
    68  
    69  	CMPQ	DX,$0x7
    70  	JE	sw7
    71  
    72  	CMPQ	DX,$0x6
    73  	JE	sw6
    74  
    75  	CMPQ	DX,$0x5
    76  	JE	sw5
    77  
    78  	CMPQ	DX,$0x4
    79  	JE	sw4
    80  
    81  	CMPQ	DX,$0x3
    82  	JE	sw3
    83  
    84  	CMPQ	DX,$0x2
    85  	JE	sw2
    86  
    87  	CMPQ	DX,$0x1
    88  	JE	sw1
    89  
    90  	JMP	afterSwitch
    91  
    92  sw7:	MOVBQZX	6(SI)(DI*1),DX
    93  	SHLQ	$0x30,DX
    94  	ORQ	DX,R11
    95  sw6:	MOVBQZX	0x5(SI)(DI*1),DX
    96  	SHLQ	$0x28,DX
    97  	ORQ	DX,R11
    98  sw5:	MOVBQZX	0x4(SI)(DI*1),DX
    99  	SHLQ	$0x20,DX
   100  	ORQ	DX,R11
   101  sw4:	MOVBQZX	0x3(SI)(DI*1),DX
   102  	SHLQ	$0x18,DX
   103  	ORQ	DX,R11
   104  sw3:	MOVBQZX	0x2(SI)(DI*1),DX
   105  	SHLQ	$0x10,DX
   106  	ORQ	DX,R11
   107  sw2:	MOVBQZX	0x1(SI)(DI*1),DX
   108  	SHLQ	$0x8,DX
   109  	ORQ	DX,R11
   110  sw1:	MOVBQZX	0(SI)(DI*1),DX
   111  	ORQ	DX,R11
   112  afterSwitch:
   113  	LEAQ	(AX)(R9*1),SI
   114  	XORQ	R11,CX
   115  	RORQ	$0x33,AX
   116  	ADDQ	CX,BX
   117  	MOVQ	CX,DX
   118  	XORQ	SI,AX
   119  	RORQ	$0x30,DX
   120  	RORQ	$0x20,SI
   121  	LEAQ	0(BX)(AX*1),CX
   122  	XORQ	BX,DX
   123  	RORQ	$0x2F,AX
   124  	ADDQ	DX,SI
   125  	RORQ	$0x2B,DX
   126  	XORQ	CX,AX
   127  	XORQ	SI,DX
   128  	RORQ	$0x20,CX
   129  	ADDQ	AX,SI
   130  	RORQ	$0x33,AX
   131  	ADDQ	DX,CX
   132  	XORQ	SI,AX
   133  	RORQ	$0x30,DX
   134  	RORQ	$0x20,SI
   135  	XORQ	CX,DX
   136  	ADDQ	AX,CX
   137  	RORQ	$0x2F,AX
   138  	ADDQ	DX,SI
   139  	XORQ	CX,AX
   140  	RORQ	$0x2B,DX
   141  	RORQ	$0x20,CX
   142  	XORQ	SI,DX
   143  	XORQ	R11,SI
   144  	XORB	$0xFF,CL
   145  	ADDQ	AX,SI
   146  	RORQ	$0x33,AX
   147  	ADDQ	DX,CX
   148  	RORQ	$0x30,DX
   149  	XORQ	SI,AX
   150  	XORQ	CX,DX
   151  	RORQ	$0x20,SI
   152  	ADDQ	AX,CX
   153  	ADDQ	DX,SI
   154  	RORQ	$0x2F,AX
   155  	RORQ	$0x2B,DX
   156  	XORQ	CX,AX
   157  	XORQ	SI,DX
   158  	RORQ	$0x20,CX
   159  	ADDQ	AX,SI
   160  	ADDQ	DX,CX
   161  	RORQ	$0x33,AX
   162  	RORQ	$0x30,DX
   163  	XORQ	SI,AX
   164  	RORQ	$0x20,SI
   165  	XORQ	CX,DX
   166  	ADDQ	AX,CX
   167  	RORQ	$0x2F,AX
   168  	ADDQ	DX,SI
   169  	RORQ	$0x2B,DX
   170  	XORQ	CX,AX
   171  	XORQ	SI,DX
   172  	RORQ	$0x20,CX
   173  	ADDQ	AX,SI
   174  	ADDQ	DX,CX
   175  	RORQ	$0x33,AX
   176  	RORQ	$0x30,DX
   177  	XORQ	CX,DX
   178  	XORQ	SI,AX
   179  	RORQ	$0x20,SI
   180  	ADDQ	DX,SI
   181  	ADDQ	AX,CX
   182  	RORQ	$0x2F,AX
   183  	XORQ	CX,AX
   184  	RORQ	$0x2B,DX
   185  	RORQ	$0x20,CX
   186  	XORQ	SI,DX
   187  	ADDQ	AX,SI
   188  	RORQ	$0x33,AX
   189  	ADDQ	DX,CX
   190  	XORQ	SI,AX
   191  	RORQ	$0x30,DX
   192  	XORQ	CX,DX
   193  	ADDQ	AX,CX
   194  	RORQ	$0x2F,AX
   195  	XORQ	CX,AX
   196  	RORQ	$0x2B,DX
   197  	RORQ	$0x20,CX
   198  	XORQ	DX,AX
   199  	XORQ	CX,AX
   200  	MOVQ	AX,ret+40(FP)
   201  	RET