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

View File

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

View File

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