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 6TEXT ·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 26loopBody: 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 61afterLoop: 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 92sw7: MOVBQZX 6(SI)(DI*1),DX 93 SHLQ $0x30,DX 94 ORQ DX,R11 95sw6: MOVBQZX 0x5(SI)(DI*1),DX 96 SHLQ $0x28,DX 97 ORQ DX,R11 98sw5: MOVBQZX 0x4(SI)(DI*1),DX 99 SHLQ $0x20,DX 100 ORQ DX,R11 101sw4: MOVBQZX 0x3(SI)(DI*1),DX 102 SHLQ $0x18,DX 103 ORQ DX,R11 104sw3: MOVBQZX 0x2(SI)(DI*1),DX 105 SHLQ $0x10,DX 106 ORQ DX,R11 107sw2: MOVBQZX 0x1(SI)(DI*1),DX 108 SHLQ $0x8,DX 109 ORQ DX,R11 110sw1: MOVBQZX 0(SI)(DI*1),DX 111 ORQ DX,R11 112afterSwitch: 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 202