examples/stadtx: delete PeachPy comments

Fixes #16
This commit is contained in:
Michael McLoughlin
2019-01-09 22:53:38 -08:00
parent 56c962b9aa
commit 0e253b3753

View File

@@ -45,351 +45,341 @@ func main() {
ptr := Load(Param("key").Base(), GP64()) ptr := Load(Param("key").Base(), GP64())
n := Load(Param("key").Len(), GP64()) n := Load(Param("key").Len(), GP64())
v0 := GP64() // reg_v0 = GeneralPurposeRegister64() v0 := GP64()
v1 := GP64() // reg_v1 = GeneralPurposeRegister64() v1 := GP64()
MOVQ(Mem{Base: statePtr}, v0) // MOV(reg_v0, [reg_state_ptr]) MOVQ(Mem{Base: statePtr}, v0)
MOVQ(Mem{Base: statePtr, Disp: 8}, v1) // MOV(reg_v1, [reg_state_ptr+8]) MOVQ(Mem{Base: statePtr, Disp: 8}, v1)
t := GP64() // t = GeneralPurposeRegister64() t := GP64()
MOVQ(n, t) // MOV(t, reg_ptr_len) MOVQ(n, t)
ADDQ(U32(1), t) // ADD(t, 1) ADDQ(U32(1), t)
imul(k0U64, t) // imul(t, k0U64) imul(k0U64, t)
XORQ(t, v0) // XOR(reg_v0, t) XORQ(t, v0)
MOVQ(n, t) // MOV(t, reg_ptr_len) MOVQ(n, t)
ADDQ(U32(2), t) // ADD(t, 2) ADDQ(U32(2), t)
imul(k1U64, t) // imul(t, k1U64) imul(k1U64, t)
XORQ(t, v1) // XOR(reg_v1, t) XORQ(t, v1)
long := "coreLong" // coreLong = Label("coreLong") long := "coreLong"
CMPQ(n, U32(32)) // CMP(reg_ptr_len, 32) CMPQ(n, U32(32))
JGE(LabelRef(long)) // JGE(coreLong) JGE(LabelRef(long))
// //
u64s := GP64() // reg_u64s = GeneralPurposeRegister64() u64s := GP64()
MOVQ(n, u64s) // MOV(reg_u64s, reg_ptr_len) MOVQ(n, u64s)
SHRQ(U8(3), u64s) // SHR(reg_u64s, 3) SHRQ(U8(3), u64s)
// //
labels := makelabels("shortCore", 4) // labels = [Label("shortCore%d" % i) for i in range(4)] labels := makelabels("shortCore", 4)
// //
for i := 0; i < 4; i++ { // for i in range(4): for i := 0; i < 4; i++ {
CMPQ(u64s, U32(i)) // CMP(reg_u64s, i) CMPQ(u64s, U32(i))
JE(LabelRef(labels[i])) // JE(labels[i]) JE(LabelRef(labels[i]))
} // }
for i := 3; i > 0; i-- { // for i in range(3, 0, -1): for i := 3; i > 0; i-- {
Label(labels[i]) // Label(labels[i]) Label(labels[i])
r := GP64() // r = GeneralPurposeRegister64() r := GP64()
MOVQ(Mem{Base: ptr}, r) // MOV(r, [reg_ptr]) MOVQ(Mem{Base: ptr}, r)
imul(k3U64, r) // imul(r, k3U64) imul(k3U64, r)
ADDQ(r, v0) // ADD(reg_v0, r) ADDQ(r, v0)
RORQ(U8(17), v0) // ROR(reg_v0, 17) RORQ(U8(17), v0)
XORQ(v1, v0) // XOR(reg_v0, reg_v1) XORQ(v1, v0)
RORQ(U8(53), v1) // ROR(reg_v1, 53) RORQ(U8(53), v1)
ADDQ(v0, v1) // ADD(reg_v1, reg_v0) ADDQ(v0, v1)
ADDQ(U32(8), ptr) // ADD(reg_ptr,8) ADDQ(U32(8), ptr)
SUBQ(U32(8), n) // SUB(reg_ptr_len,8) SUBQ(U32(8), n)
} // }
Label(labels[0]) // Label(labels[0]) Label(labels[0])
//
labels = makelabels("shortTail", 8) // labels = [Label("shortTail%d" % i) for i in range(8)] labels = makelabels("shortTail", 8)
//
// split(labels, reg_ptr_len,0,7)
for i := 0; i < 8; i++ { for i := 0; i < 8; i++ {
CMPQ(n, U32(i)) CMPQ(n, U32(i))
JE(LabelRef(labels[i])) JE(LabelRef(labels[i]))
} }
//
after := "shortAfter" // after = Label("shortAfter") after := "shortAfter"
//
ch := GP64() // reg_ch = GeneralPurposeRegister64() ch := GP64()
//
Label(labels[7]) // Label(labels[7]) Label(labels[7])
MOVBQZX(Mem{Base: ptr, Disp: 6}, ch) // MOVZX(reg_ch, byte[reg_ptr+6]) MOVBQZX(Mem{Base: ptr, Disp: 6}, ch)
SHLQ(U8(32), ch) // SHL(reg_ch, 32) SHLQ(U8(32), ch)
ADDQ(ch, v0) // ADD(reg_v0, reg_ch) ADDQ(ch, v0)
//
Label(labels[6]) // Label(labels[6]) Label(labels[6])
MOVBQZX(Mem{Base: ptr, Disp: 5}, ch) // MOVZX(reg_ch, byte[reg_ptr+5]) MOVBQZX(Mem{Base: ptr, Disp: 5}, ch)
SHLQ(U8(48), ch) // SHL(reg_ch, 48) SHLQ(U8(48), ch)
ADDQ(ch, v1) // ADD(reg_v1, reg_ch) ADDQ(ch, v1)
//
Label(labels[5]) // Label(labels[5]) Label(labels[5])
MOVBQZX(Mem{Base: ptr, Disp: 4}, ch) // MOVZX(reg_ch, byte[reg_ptr+4]) MOVBQZX(Mem{Base: ptr, Disp: 4}, ch)
SHLQ(U8(16), ch) // SHL(reg_ch, 16) SHLQ(U8(16), ch)
ADDQ(ch, v0) // ADD(reg_v0, reg_ch) ADDQ(ch, v0)
//
Label(labels[4]) // Label(labels[4]) Label(labels[4])
// XOR(reg_ch, reg_ch)
MOVLQZX(Mem{Base: ptr}, ch) // MOV(reg_ch.as_dword, dword[reg_ptr]) MOVLQZX(Mem{Base: ptr}, ch)
ADDQ(ch, v1) // ADD(reg_v1, reg_ch) ADDQ(ch, v1)
//
JMP(LabelRef(after)) // JMP(after) JMP(LabelRef(after))
//
Label(labels[3]) // Label(labels[3]) Label(labels[3])
MOVBQZX(Mem{Base: ptr, Disp: 2}, ch) // MOVZX(reg_ch, byte[reg_ptr+2]) MOVBQZX(Mem{Base: ptr, Disp: 2}, ch)
SHLQ(U8(48), ch) // SHL(reg_ch, 48) SHLQ(U8(48), ch)
ADDQ(ch, v0) // ADD(reg_v0, reg_ch) ADDQ(ch, v0)
//
Label(labels[2]) // Label(labels[2]) Label(labels[2])
// XOR(reg_ch, reg_ch)
MOVWQZX(Mem{Base: ptr}, ch) // MOV(reg_ch.as_word, word[reg_ptr]) MOVWQZX(Mem{Base: ptr}, ch)
ADDQ(ch, v1) // ADD(reg_v1, reg_ch) ADDQ(ch, v1)
//
JMP(LabelRef(after)) // JMP(after) JMP(LabelRef(after))
//
Label(labels[1]) // Label(labels[1]) Label(labels[1])
MOVBQZX(Mem{Base: ptr}, ch) // MOVZX(reg_ch, byte[reg_ptr]) MOVBQZX(Mem{Base: ptr}, ch)
ADDQ(ch, v0) // ADD(reg_v0, reg_ch) ADDQ(ch, v0)
//
Label(labels[0]) // Label(labels[0]) Label(labels[0])
RORQ(U8(32), v1) // ROR(reg_v1, 32) RORQ(U8(32), v1)
XORQ(U32(0xff), v1) // XOR(reg_v1, 0xFF) XORQ(U32(0xff), v1)
//
Label(after) // Label(after) Label(after)
//
XORQ(v0, v1) // XOR(reg_v1, reg_v0) XORQ(v0, v1)
//
RORQ(U8(33), v0) // ROR(reg_v0, 33) RORQ(U8(33), v0)
ADDQ(v1, v0) // ADD(reg_v0, reg_v1) ADDQ(v1, v0)
//
ROLQ(U8(17), v1) // ROL(reg_v1, 17) ROLQ(U8(17), v1)
XORQ(v0, v1) // XOR(reg_v1, reg_v0) XORQ(v0, v1)
//
ROLQ(U8(43), v0) // ROL(reg_v0, 43) ROLQ(U8(43), v0)
ADDQ(v1, v0) // ADD(reg_v0, reg_v1) ADDQ(v1, v0)
//
ROLQ(U8(31), v1) // ROL(reg_v1, 31) ROLQ(U8(31), v1)
SUBQ(v0, v1) // SUB(reg_v1, reg_v0) SUBQ(v0, v1)
//
ROLQ(U8(13), v0) // ROL(reg_v0, 13) ROLQ(U8(13), v0)
XORQ(v1, v0) // XOR(reg_v0, reg_v1) XORQ(v1, v0)
//
SUBQ(v0, v1) // SUB(reg_v1, reg_v0) SUBQ(v0, v1)
//
ROLQ(U8(41), v0) // ROL(reg_v0, 41) ROLQ(U8(41), v0)
ADDQ(v1, v0) // ADD(reg_v0, reg_v1) ADDQ(v1, v0)
//
ROLQ(U8(37), v1) // ROL(reg_v1, 37) ROLQ(U8(37), v1)
XORQ(v0, v1) // XOR(reg_v1, reg_v0) XORQ(v0, v1)
//
RORQ(U8(39), v0) // ROR(reg_v0, 39) RORQ(U8(39), v0)
ADDQ(v1, v0) // ADD(reg_v0, reg_v1) ADDQ(v1, v0)
//
RORQ(U8(15), v1) // ROR(reg_v1, 15) RORQ(U8(15), v1)
ADDQ(v0, v1) // ADD(reg_v1, reg_v0) ADDQ(v0, v1)
//
ROLQ(U8(15), v0) // ROL(reg_v0, 15) ROLQ(U8(15), v0)
XORQ(v1, v0) // XOR(reg_v0, reg_v1) XORQ(v1, v0)
//
RORQ(U8(5), v1) // ROR(reg_v1, 5) RORQ(U8(5), v1)
//
XORQ(v1, v0) // XOR(reg_v0, reg_v1) XORQ(v1, v0)
//
Store(v0, ReturnIndex(0)) Store(v0, ReturnIndex(0))
RET() // RETURN(reg_v0) RET()
//
Label(long) // Label(coreLong) Label(long)
//
v2 := GP64() // reg_v2 = GeneralPurposeRegister64() v2 := GP64()
v3 := GP64() // reg_v3 = GeneralPurposeRegister64() v3 := GP64()
//
MOVQ(Mem{Base: statePtr, Disp: 16}, v2) // MOV(reg_v2, [reg_state_ptr+16]) MOVQ(Mem{Base: statePtr, Disp: 16}, v2)
MOVQ(Mem{Base: statePtr, Disp: 24}, v3) // MOV(reg_v3, [reg_state_ptr+24]) MOVQ(Mem{Base: statePtr, Disp: 24}, v3)
//
// t = GeneralPurposeRegister64() MOVQ(n, t)
MOVQ(n, t) // MOV(t, reg_ptr_len) ADDQ(U32(3), t)
ADDQ(U32(3), t) // ADD(t, 3) imul(k2U64, t)
imul(k2U64, t) // imul(t, k2U64) XORQ(t, v2)
XORQ(t, v2) // XOR(reg_v2, t)
// MOVQ(n, t)
MOVQ(n, t) // MOV(t, reg_ptr_len) ADDQ(U32(4), t)
ADDQ(U32(4), t) // ADD(t, 4) imul(k3U64, t)
imul(k3U64, t) // imul(t, k3U64) XORQ(t, v3)
XORQ(t, v3) // XOR(reg_v3, t)
// r := GP64()
r := GP64() // r = GeneralPurposeRegister64() loop := "block"
loop := "block" // with Loop() as loop:
Label(loop) Label(loop)
MOVQ(Mem{Base: ptr}, r) // MOV(r, [reg_ptr]) MOVQ(Mem{Base: ptr}, r)
imul(k2U32, r) // imul(r, k2U32) imul(k2U32, r)
ADDQ(r, v0) // ADD(reg_v0, r) ADDQ(r, v0)
ROLQ(U8(57), v0) // ROL(reg_v0, 57) ROLQ(U8(57), v0)
XORQ(v3, v0) // XOR(reg_v0, reg_v3) XORQ(v3, v0)
//
MOVQ(Mem{Base: ptr, Disp: 8}, r) // MOV(r, [reg_ptr + 8]) MOVQ(Mem{Base: ptr, Disp: 8}, r)
imul(k3U32, r) // imul(r, k3U32) imul(k3U32, r)
ADDQ(r, v1) // ADD(reg_v1, r) ADDQ(r, v1)
ROLQ(U8(63), v1) // ROL(reg_v1, 63) ROLQ(U8(63), v1)
XORQ(v2, v1) // XOR(reg_v1, reg_v2) XORQ(v2, v1)
//
MOVQ(Mem{Base: ptr, Disp: 16}, r) // MOV(r, [reg_ptr + 16]) MOVQ(Mem{Base: ptr, Disp: 16}, r)
imul(k4U32, r) // imul(r, k4U32) imul(k4U32, r)
ADDQ(r, v2) // ADD(reg_v2, r) ADDQ(r, v2)
RORQ(U8(47), v2) // ROR(reg_v2, 47) RORQ(U8(47), v2)
ADDQ(v0, v2) // ADD(reg_v2, reg_v0) ADDQ(v0, v2)
//
MOVQ(Mem{Base: ptr, Disp: 24}, r) // MOV(r, [reg_ptr + 24]) MOVQ(Mem{Base: ptr, Disp: 24}, r)
imul(k5U32, r) // imul(r, k5U32) imul(k5U32, r)
ADDQ(r, v3) // ADD(reg_v3, r) ADDQ(r, v3)
RORQ(U8(11), v3) // ROR(reg_v3, 11) RORQ(U8(11), v3)
SUBQ(v1, v3) // SUB(reg_v3, reg_v1) SUBQ(v1, v3)
//
ADDQ(U32(32), ptr) // ADD(reg_ptr, 32) ADDQ(U32(32), ptr)
SUBQ(U32(32), n) // SUB(reg_ptr_len, 32) SUBQ(U32(32), n)
//
CMPQ(n, U32(32)) // CMP(reg_ptr_len, 32) CMPQ(n, U32(32))
JGE(LabelRef(loop)) // JGE(loop.begin) JGE(LabelRef(loop))
//
// nsave := GP64()
nsave := GP64() // reg_ptr_len_saved = GeneralPurposeRegister64() MOVQ(n, nsave)
MOVQ(n, nsave) // MOV(reg_ptr_len_saved, reg_ptr_len)
// MOVQ(n, u64s)
// reg_u64s = GeneralPurposeRegister64() SHRQ(U8(3), u64s)
MOVQ(n, u64s) // MOV(reg_u64s, reg_ptr_len)
SHRQ(U8(3), u64s) // SHR(reg_u64s, 3) labels = makelabels("longCore", 4)
//
labels = makelabels("longCore", 4) // labels = [Label("longCore%d" % i) for i in range(4)] for i := 0; i < 4; i++ {
// CMPQ(u64s, U32(i))
for i := 0; i < 4; i++ { // for i in range(4): JE(LabelRef(labels[i]))
CMPQ(u64s, U32(i)) // CMP(reg_u64s, i) }
JE(LabelRef(labels[i])) // JE(labels[i]) Label(labels[3])
} //
Label(labels[3]) // Label(labels[3]) MOVQ(Mem{Base: ptr}, r)
// imul(k2U32, r)
MOVQ(Mem{Base: ptr}, r) // MOV(r, [reg_ptr]) ADDQ(r, v0)
imul(k2U32, r) // imul(r, k2U32) ROLQ(U8(57), v0)
ADDQ(r, v0) // ADD(reg_v0, r) XORQ(v3, v0)
ROLQ(U8(57), v0) // ROL(reg_v0, 57) ADDQ(U32(8), ptr)
XORQ(v3, v0) // XOR(reg_v0, reg_v3) SUBQ(U32(8), n)
ADDQ(U32(8), ptr) // ADD(reg_ptr, 8)
SUBQ(U32(8), n) // SUB(reg_ptr_len, 8) Label(labels[2])
//
Label(labels[2]) // Label(labels[2]) MOVQ(Mem{Base: ptr}, r)
// imul(k3U32, r)
MOVQ(Mem{Base: ptr}, r) // MOV(r, [reg_ptr]) ADDQ(r, v1)
imul(k3U32, r) // imul(r, k3U32) ROLQ(U8(63), v1)
ADDQ(r, v1) // ADD(reg_v1, r) XORQ(v2, v1)
ROLQ(U8(63), v1) // ROL(reg_v1, 63) ADDQ(U32(8), ptr)
XORQ(v2, v1) // XOR(reg_v1, reg_v2) SUBQ(U32(8), n)
ADDQ(U32(8), ptr) // ADD(reg_ptr, 8)
SUBQ(U32(8), n) // SUB(reg_ptr_len, 8) Label(labels[1])
//
Label(labels[1]) // Label(labels[1]) MOVQ(Mem{Base: ptr}, r)
// imul(k4U32, r)
MOVQ(Mem{Base: ptr}, r) // MOV(r, [reg_ptr]) ADDQ(r, v2)
imul(k4U32, r) // imul(r, k4U32) RORQ(U8(47), v2)
ADDQ(r, v2) // ADD(reg_v2, r) ADDQ(v0, v2)
RORQ(U8(47), v2) // ROR(reg_v2, 47) ADDQ(U32(8), ptr)
ADDQ(v0, v2) // ADD(reg_v2, reg_v0) SUBQ(U32(8), n)
ADDQ(U32(8), ptr) // ADD(reg_ptr, 8)
SUBQ(U32(8), n) // SUB(reg_ptr_len, 8) Label(labels[0])
//
Label(labels[0]) // Label(labels[0]) RORQ(U8(11), v3)
// SUBQ(v1, v3)
RORQ(U8(11), v3) // ROR(reg_v3, 11)
SUBQ(v1, v3) // SUB(reg_v3, reg_v1) ADDQ(U32(1), nsave)
// imul(k3U64, nsave)
ADDQ(U32(1), nsave) // ADD(reg_ptr_len_saved, 1) XORQ(nsave, v0)
imul(k3U64, nsave) // imul(reg_ptr_len_saved, k3U64)
XORQ(nsave, v0) // XOR(reg_v0, reg_ptr_len_saved) labels = makelabels("longTail", 8)
//
labels = makelabels("longTail", 8) // labels = [Label("longTail%d" % i) for i in range(8)]
//
// split(labels, reg_ptr_len, 0, 7)
for i := 0; i < 8; i++ { for i := 0; i < 8; i++ {
CMPQ(n, U32(i)) CMPQ(n, U32(i))
JE(LabelRef(labels[i])) JE(LabelRef(labels[i]))
} }
//
after = "longAfter" // after = Label("longAfter") after = "longAfter"
// Label(labels[7])
// reg_ch = GeneralPurposeRegister64() MOVBQZX(Mem{Base: ptr, Disp: 6}, ch)
// ADDQ(ch, v1)
Label(labels[7]) // Label(labels[7])
MOVBQZX(Mem{Base: ptr, Disp: 6}, ch) // MOVZX(reg_ch, byte[reg_ptr+6]) Label(labels[6])
ADDQ(ch, v1) // ADD(reg_v1, reg_ch)
// MOVWQZX(Mem{Base: ptr, Disp: 4}, ch)
Label(labels[6]) // Label(labels[6]) ADDQ(ch, v2)
// XOR(reg_ch, reg_ch) MOVLQZX(Mem{Base: ptr}, ch)
MOVWQZX(Mem{Base: ptr, Disp: 4}, ch) // MOV(reg_ch.as_word, word[reg_ptr + 4]) ADDQ(ch, v3)
ADDQ(ch, v2) // ADD(reg_v2, reg_ch) JMP(LabelRef(after))
MOVLQZX(Mem{Base: ptr}, ch) // MOV(reg_ch.as_dword, dword[reg_ptr])
ADDQ(ch, v3) // ADD(reg_v3, reg_ch) Label(labels[5])
JMP(LabelRef(after)) // JMP(after) MOVBQZX(Mem{Base: ptr, Disp: 4}, ch)
// ADDQ(ch, v1)
Label(labels[5]) // Label(labels[5])
MOVBQZX(Mem{Base: ptr, Disp: 4}, ch) // MOVZX(reg_ch, byte[reg_ptr+4]) Label(labels[4])
ADDQ(ch, v1) // ADD(reg_v1, reg_ch)
// MOVLQZX(Mem{Base: ptr}, ch)
Label(labels[4]) // Label(labels[4]) ADDQ(ch, v2)
// XOR(reg_ch, reg_ch)
MOVLQZX(Mem{Base: ptr}, ch) // MOV(reg_ch.as_dword, dword[reg_ptr]) JMP(LabelRef(after))
ADDQ(ch, v2) // ADD(reg_v2, reg_ch)
// Label(labels[3])
JMP(LabelRef(after)) // JMP(after) MOVBQZX(Mem{Base: ptr, Disp: 2}, ch)
// ADDQ(ch, v3)
Label(labels[3]) // Label(labels[3])
MOVBQZX(Mem{Base: ptr, Disp: 2}, ch) // MOVZX(reg_ch, byte[reg_ptr+2]) Label(labels[2])
ADDQ(ch, v3) // ADD(reg_v3, reg_ch)
// MOVWQZX(Mem{Base: ptr}, ch)
Label(labels[2]) // Label(labels[2]) ADDQ(ch, v1)
// XOR(reg_ch, reg_ch)
MOVWQZX(Mem{Base: ptr}, ch) // MOV(reg_ch.as_word, word[reg_ptr]) JMP(LabelRef(after))
ADDQ(ch, v1) // ADD(reg_v1, reg_ch)
// Label(labels[1])
JMP(LabelRef(after)) // JMP(after) MOVBQZX(Mem{Base: ptr}, ch)
// ADDQ(ch, v2)
Label(labels[1]) // Label(labels[1])
MOVBQZX(Mem{Base: ptr}, ch) // MOVZX(reg_ch, byte[reg_ptr]) Label(labels[0])
ADDQ(ch, v2) // ADD(reg_v2, reg_ch) ROLQ(U8(32), v3)
// XORQ(U32(0xff), v3)
Label(labels[0]) // Label(labels[0])
ROLQ(U8(32), v3) // ROL(reg_v3, 32) Label(after)
XORQ(U32(0xff), v3) // XOR(reg_v3, 0xFF)
// SUBQ(v2, v1)
Label(after) // Label(after) RORQ(U8(19), v0)
// SUBQ(v0, v1)
// ## finalize RORQ(U8(53), v1)
// XORQ(v1, v3)
SUBQ(v2, v1) // SUB(reg_v1, reg_v2) SUBQ(v3, v0)
RORQ(U8(19), v0) // ROR(reg_v0, 19) ROLQ(U8(43), v3)
SUBQ(v0, v1) // SUB(reg_v1, reg_v0) ADDQ(v3, v0)
RORQ(U8(53), v1) // ROR(reg_v1, 53) RORQ(U8(3), v0)
XORQ(v1, v3) // XOR(reg_v3, reg_v1) SUBQ(v0, v3)
SUBQ(v3, v0) // SUB(reg_v0, reg_v3) RORQ(U8(43), v2)
ROLQ(U8(43), v3) // ROL(reg_v3, 43) SUBQ(v3, v2)
ADDQ(v3, v0) // ADD(reg_v0, reg_v3) ROLQ(U8(55), v2)
RORQ(U8(3), v0) // ROR(reg_v0, 3) XORQ(v0, v2)
SUBQ(v0, v3) // SUB(reg_v3, reg_v0) SUBQ(v2, v1)
RORQ(U8(43), v2) // ROR(reg_v2, 43) RORQ(U8(7), v3)
SUBQ(v3, v2) // SUB(reg_v2, reg_v3) SUBQ(v2, v3)
ROLQ(U8(55), v2) // ROL(reg_v2, 55) RORQ(U8(31), v2)
XORQ(v0, v2) // XOR(reg_v2, reg_v0) ADDQ(v2, v3)
SUBQ(v2, v1) // SUB(reg_v1, reg_v2) SUBQ(v1, v2)
RORQ(U8(7), v3) // ROR(reg_v3, 7) RORQ(U8(39), v3)
SUBQ(v2, v3) // SUB(reg_v3, reg_v2) XORQ(v3, v2)
RORQ(U8(31), v2) // ROR(reg_v2, 31) RORQ(U8(17), v3)
ADDQ(v2, v3) // ADD(reg_v3, reg_v2) XORQ(v2, v3)
SUBQ(v1, v2) // SUB(reg_v2, reg_v1) ADDQ(v3, v1)
RORQ(U8(39), v3) // ROR(reg_v3, 39) RORQ(U8(9), v1)
XORQ(v3, v2) // XOR(reg_v2, reg_v3) XORQ(v1, v2)
RORQ(U8(17), v3) // ROR(reg_v3, 17) ROLQ(U8(24), v2)
XORQ(v2, v3) // XOR(reg_v3, reg_v2) XORQ(v2, v3)
ADDQ(v3, v1) // ADD(reg_v1, reg_v3) RORQ(U8(59), v3)
RORQ(U8(9), v1) // ROR(reg_v1, 9) RORQ(U8(1), v0)
XORQ(v1, v2) // XOR(reg_v2, reg_v1) SUBQ(v1, v0)
ROLQ(U8(24), v2) // ROL(reg_v2, 24)
XORQ(v2, v3) // XOR(reg_v3, reg_v2) XORQ(v1, v0)
RORQ(U8(59), v3) // ROR(reg_v3, 59) XORQ(v3, v2)
RORQ(U8(1), v0) // ROR(reg_v0, 1)
SUBQ(v1, v0) // SUB(reg_v0, reg_v1) XORQ(v2, v0)
//
XORQ(v1, v0) // XOR(reg_v0, reg_v1)
XORQ(v3, v2) // XOR(reg_v2, reg_v3)
//
XORQ(v2, v0) // XOR(reg_v0, reg_v2)
//
Store(v0, ReturnIndex(0)) Store(v0, ReturnIndex(0))
RET() // RETURN(reg_v0) RET()
Generate() Generate()
} }