examples/sha1: use loops where possible

This commit is contained in:
Michael McLoughlin
2019-01-06 20:26:04 -08:00
parent 4f73a6ea72
commit ea3d101f08
3 changed files with 39 additions and 69 deletions

View File

@@ -211,22 +211,16 @@ func main() {
W := func(r int) Mem { return w.Offset((r % 16) * 4) }
// Load initial hash.
h0, h1, h2, h3, h4 := GP32(), GP32(), GP32(), GP32(), GP32()
MOVL(h.Offset(0), h0)
MOVL(h.Offset(4), h1)
MOVL(h.Offset(8), h2)
MOVL(h.Offset(12), h3)
MOVL(h.Offset(16), h4)
hash := [5]Register{GP32(), GP32(), GP32(), GP32(), GP32()}
for i, r := range hash {
MOVL(h.Offset(4*i), r)
}
// Initialize registers.
a, b, c, d, e := GP32(), GP32(), GP32(), GP32(), GP32()
MOVL(h0, a)
MOVL(h1, b)
MOVL(h2, c)
MOVL(h3, d)
MOVL(h4, e)
for i, r := range []Register{a, b, c, d, e} {
MOVL(hash[i], r)
}
// Generate round updates.
quarter := []struct {
@@ -271,18 +265,14 @@ func main() {
}
// Final add.
ADDL(a, h0)
ADDL(b, h1)
ADDL(c, h2)
ADDL(d, h3)
ADDL(e, h4)
for i, r := range []Register{a, b, c, d, e} {
ADDL(r, hash[i])
}
// Store results back.
MOVL(h0, h.Offset(0))
MOVL(h1, h.Offset(4))
MOVL(h2, h.Offset(8))
MOVL(h3, h.Offset(12))
MOVL(h4, h.Offset(16))
for i, r := range hash {
MOVL(r, h.Offset(4*i))
}
RET()
Generate()