examples/sha1: use loops where possible
This commit is contained in:
36
README.md
36
README.md
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user