1 /* x = (wp[off-f] ^ wp[off-8] ^ wp[off-14] ^ wp[off-16]) <<< 1;
9 #define BSWAPDI BYTE $0x0f; BYTE $0xcf;
11 #define BODY(off,FN,V,A,B,C,D,E)\
12 MOVL (off-64)(BP),DI;\
13 XORL (off-56)(BP),DI;\
14 XORL (off-32)(BP),DI;\
15 XORL (off-12)(BP),DI;\
26 #define BODY0(off,FN,V,A,B,C,D,E)\
39 * fn1 = (((C^D)&B)^D);
56 * fn3 = ((B ^ C) & (D ^= B)) ^ B
69 * void sha1block(uchar *DATA, int LEN, ulong *STATE)
76 * stack offsets for locals
79 * ulong *w15, *w40, *w60, *w80;
82 * ulong a = eax, b = ebx, c = ecx, d = edx, e = esi
86 #define WARRAY (-8-(80*4))
87 #define TMP1 (-16-(80*4))
88 #define TMP2 (-24-(80*4))
89 #define W15 (-32-(80*4))
90 #define W40 (-40-(80*4))
91 #define W60 (-48-(80*4))
92 #define W80 (-56-(80*4))
93 #define EDATA (-64-(80*4))
95 TEXT _sha1block+0(SB),$384
98 MOVLQZX len+LEN(FP),BX
100 MOVQ RARG,edata+EDATA(SP)
102 LEAQ aw15+(WARRAY+15*4)(SP),DI
104 LEAQ aw40+(WARRAY+40*4)(SP),DX
106 LEAQ aw60+(WARRAY+60*4)(SP),CX
108 LEAQ aw80+(WARRAY+80*4)(SP),DI
112 LEAQ warray+WARRAY(SP),BP
114 MOVQ state+STATE(FP),DI
117 MOVL BX,tmp1+TMP1(SP)
125 BODY0(0,FN1,0x5a827999,AX,tmp1+TMP1(SP),CX,DX,SI)
126 MOVL SI,tmp2+TMP2(SP)
127 BODY0(4,FN1,0x5a827999,SI,AX,tmp1+TMP1(SP),CX,DX)
128 MOVL tmp1+TMP1(SP),SI
129 BODY0(8,FN1,0x5a827999,DX,tmp2+TMP2(SP),AX,SI,CX)
130 BODY0(12,FN1,0x5a827999,CX,DX,tmp2+TMP2(SP),AX,SI)
131 MOVL SI,tmp1+TMP1(SP)
132 BODY0(16,FN1,0x5a827999,SI,CX,DX,tmp2+TMP2(SP),AX)
133 MOVL tmp2+TMP2(SP),SI
140 BODY0(0,FN1,0x5a827999,AX,tmp1+TMP1(SP),CX,DX,SI)
143 MOVQ tmp1+TMP1(SP),BX
145 BODY(4,FN1,0x5a827999,SI,AX,BX,CX,DX)
146 BODY(8,FN1,0x5a827999,DX,SI,AX,BX,CX)
147 BODY(12,FN1,0x5a827999,CX,DX,SI,AX,BX)
148 BODY(16,FN1,0x5a827999,BX,CX,DX,SI,AX)
153 BODY(0,FN24,0x6ed9eba1,AX,BX,CX,DX,SI)
154 BODY(4,FN24,0x6ed9eba1,SI,AX,BX,CX,DX)
155 BODY(8,FN24,0x6ed9eba1,DX,SI,AX,BX,CX)
156 BODY(12,FN24,0x6ed9eba1,CX,DX,SI,AX,BX)
157 BODY(16,FN24,0x6ed9eba1,BX,CX,DX,SI,AX)
164 BODY(0,FN3,0x8f1bbcdc,AX,BX,CX,DX,SI)
165 BODY(4,FN3,0x8f1bbcdc,SI,AX,BX,CX,DX)
166 BODY(8,FN3,0x8f1bbcdc,DX,SI,AX,BX,CX)
167 BODY(12,FN3,0x8f1bbcdc,CX,DX,SI,AX,BX)
168 BODY(16,FN3,0x8f1bbcdc,BX,CX,DX,SI,AX)
175 BODY(0,FN24,0xca62c1d6,AX,BX,CX,DX,SI)
176 BODY(4,FN24,0xca62c1d6,SI,AX,BX,CX,DX)
177 BODY(8,FN24,0xca62c1d6,DX,SI,AX,BX,CX)
178 BODY(12,FN24,0xca62c1d6,CX,DX,SI,AX,BX)
179 BODY(16,FN24,0xca62c1d6,BX,CX,DX,SI,AX)
185 MOVQ state+STATE(FP),DI
192 MOVQ edata+EDATA(SP),DI