@@ -25,6 +25,7 @@ TEXT ·block(SB),NOSPLIT,$8-32
25
25
MOVL (1*4 )(BP), BX
26
26
MOVL (2*4 )(BP), CX
27
27
MOVL (3*4 )(BP), DX
28
+ MOVL $0xffffffff , R11
28
29
29
30
CMPQ SI, DI
30
31
JEQ end
@@ -40,14 +41,15 @@ loop:
40
41
41
42
#define ROUND1(a, b, c, d, index, const, shift) \
42
43
XORL c, R9; \
43
- LEAL const(a)(R8*1 ), a; \
44
+ ADDL $const, a; \
45
+ ADDL R8, a; \
44
46
ANDL b, R9; \
45
- XORL d, R9; \
46
- MOVL (index*4 )(SI), R8; \
47
- ADDL R9, a; \
48
- ROLL $shift, a; \
49
- MOVL c, R9; \
50
- ADDL b, a
47
+ XORL d, R9; \
48
+ MOVL (index*4 )(SI), R8; \
49
+ ADDL R9, a; \
50
+ ROLL $shift, a; \
51
+ MOVL c, R9; \
52
+ ADDL b, a
51
53
52
54
ROUND1(AX,BX,CX,DX, 1 ,0xd76aa478 , 7 );
53
55
ROUND1(DX,AX,BX,CX, 2 ,0xe8c7b756 ,12 );
@@ -64,21 +66,23 @@ loop:
64
66
ROUND1(AX,BX,CX,DX,13 ,0x6b901122 , 7 );
65
67
ROUND1(DX,AX,BX,CX,14 ,0xfd987193 ,12 );
66
68
ROUND1(CX,DX,AX,BX,15 ,0xa679438e ,17 );
67
- ROUND1(BX,CX,DX,AX, 0 ,0x49b40821 ,22 );
69
+ ROUND1(BX,CX,DX,AX, 1 ,0x49b40821 ,22 );
68
70
69
- MOVL (1*4 )(SI), R8
70
71
MOVL DX, R9
71
72
MOVL DX, R10
72
73
74
+ // Uses https://github.com/animetosho/md5-optimisation#dependency-shortcut-in-g-function
75
+
73
76
#define ROUND2(a, b, c, d, index, const, shift) \
74
- NOTL R9; \
75
- LEAL const(a)(R8*1 ),a; \
77
+ XORL R11, R9; \
78
+ ADDL $const, a; \
79
+ ADDL R8, a; \
76
80
ANDL b, R10; \
77
81
ANDL c, R9; \
78
82
MOVL (index*4 )(SI),R8; \
79
- ORL R9, R10; \
83
+ ADDL R9, a; \
84
+ ADDL R10, a; \
80
85
MOVL c, R9; \
81
- ADDL R10, a; \
82
86
MOVL c, R10; \
83
87
ROLL $shift, a; \
84
88
ADDL b, a
@@ -98,22 +102,34 @@ loop:
98
102
ROUND2(AX,BX,CX,DX, 2 ,0xa9e3e905 , 5 );
99
103
ROUND2(DX,AX,BX,CX, 7 ,0xfcefa3f8 , 9 );
100
104
ROUND2(CX,DX,AX,BX,12 ,0x676f02d9 ,14 );
101
- ROUND2(BX,CX,DX,AX, 0 ,0x8d2a4c8a ,20 );
105
+ ROUND2(BX,CX,DX,AX, 5 ,0x8d2a4c8a ,20 );
102
106
103
- MOVL (5*4 )(SI), R8
104
107
MOVL CX, R9
105
108
106
- #define ROUND3(a, b, c, d, index, const, shift) \
107
- LEAL const(a)(R8*1 ),a; \
109
+ // Uses https://github.com/animetosho/md5-optimisation#h-function-re-use
110
+
111
+ #define ROUND3FIRST(a, b, c, d, index, const, shift) \
112
+ MOVL d, R9; \
113
+ XORL c, R9; \
114
+ XORL b, R9; \
115
+ ADDL $const, a; \
116
+ ADDL R8, a; \
108
117
MOVL (index*4 )(SI),R8; \
109
- XORL d, R9; \
118
+ ADDL R9, a; \
119
+ ROLL $shift, a; \
120
+ ADDL b, a
121
+
122
+ #define ROUND3(a, b, c, d, index, const, shift) \
123
+ XORL a, R9; \
110
124
XORL b, R9; \
125
+ ADDL $const, a; \
126
+ ADDL R8, a; \
127
+ MOVL (index*4 )(SI),R8; \
111
128
ADDL R9, a; \
112
129
ROLL $shift, a; \
113
- MOVL b, R9; \
114
130
ADDL b, a
115
131
116
- ROUND3 (AX,BX,CX,DX, 8 ,0xfffa3942 , 4 );
132
+ ROUND3FIRST (AX,BX,CX,DX, 8 ,0xfffa3942 , 4 );
117
133
ROUND3(DX,AX,BX,CX,11 ,0x8771f681 ,11 );
118
134
ROUND3(CX,DX,AX,BX,14 ,0x6d9d6122 ,16 );
119
135
ROUND3(BX,CX,DX,AX, 1 ,0xfde5380c ,23 );
@@ -130,13 +146,13 @@ loop:
130
146
ROUND3(CX,DX,AX,BX, 2 ,0x1fa27cf8 ,16 );
131
147
ROUND3(BX,CX,DX,AX, 0 ,0xc4ac5665 ,23 );
132
148
133
- MOVL (0 *4 )(SI), R8
134
- MOVL $0xffffffff , R9
149
+ MOVL R11, R9
135
150
XORL DX, R9
136
151
137
152
#define ROUND4(a, b, c, d, index, const, shift) \
138
- LEAL const(a)(R8*1 ),a; \
139
- ORL b, R9; \
153
+ ADDL $const, a; \
154
+ ADDL R8, a; \
155
+ ORL b, R9; \
140
156
XORL c, R9; \
141
157
ADDL R9, a; \
142
158
MOVL (index*4 )(SI),R8; \
0 commit comments