# salsa20_word_macos version 20050328 # D. J. Bernstein # Public domain. register int32 y0 register int32 y1 register int32 y2 register int32 y3 register int32 y4 register int32 y5 register int32 y6 register int32 y7 register int32 y8 register int32 y9 register int32 y10 register int32 y11 register int32 y12 register int32 y13 register int32 y14 register int32 y15 register int32 i register int32 x0 register int32 x1 register int32 x2 register int32 x3 register int32 x4 register int32 x5 register int32 x6 register int32 x7 register int32 x8 register int32 x9 register int32 x10 register int32 x11 register int32 x12 register int32 x13 register int32 x14 register int32 x15 register int32 in register int32 out enter salsa20_word_macos input out input in store callerint 31 store callerint 30 store callerint 29 store callerint 28 store callerint 27 store callerint 26 store callerint 25 store callerint 24 store callerint 23 store callerint 22 store callerint 21 store callerint 20 store callerint 19 x0 = *(uint32 *) (in + 0) x1 = *(uint32 *) (in + 4) x2 = *(uint32 *) (in + 8) x3 = *(uint32 *) (in + 12) x4 = *(uint32 *) (in + 16) x5 = *(uint32 *) (in + 20) x6 = *(uint32 *) (in + 24) x7 = *(uint32 *) (in + 28) x8 = *(uint32 *) (in + 32) x9 = *(uint32 *) (in + 36) x10 = *(uint32 *) (in + 40) x11 = *(uint32 *) (in + 44) x12 = *(uint32 *) (in + 48) x13 = *(uint32 *) (in + 52) x14 = *(uint32 *) (in + 56) x15 = *(uint32 *) (in + 60) i = 20 mainloop: y4 = x0 + x12 y9 = x5 + x1 y4 <<<= 7 y14 = x10 + x6 y9 <<<= 7 y3 = x15 + x11 y14 <<<= 7 x4 ^= y4 y3 <<<= 7 x9 ^= y9 x14 ^= y14 x3 ^= y3 y8 = x4 + x0 y13 = x9 + x5 y8 <<<= 9 y2 = x14 + x10 y13 <<<= 9 y7 = x3 + x15 y2 <<<= 9 x8 ^= y8 y7 <<<= 9 x13 ^= y13 x2 ^= y2 x7 ^= y7 y12 = x8 + x4 y1 = x13 + x9 y12 <<<= 13 y6 = x2 + x14 y1 <<<= 13 y11 = x7 + x3 y6 <<<= 13 x12 ^= y12 y11 <<<= 13 x1 ^= y1 x6 ^= y6 x11 ^= y11 y0 = x12 + x8 y5 = x1 + x13 y0 <<<= 18 y10 = x6 + x2 y5 <<<= 18 y15 = x11 + x7 y10 <<<= 18 x0 ^= y0 y15 <<<= 18 x5 ^= y5 x10 ^= y10 x15 ^= y15 y1 = x0 + x3 y6 = x5 + x4 y1 <<<= 7 y11 = x10 + x9 y6 <<<= 7 y12 = x15 + x14 y11 <<<= 7 x1 ^= y1 y12 <<<= 7 x6 ^= y6 x11 ^= y11 x12 ^= y12 y2 = x1 + x0 y7 = x6 + x5 y2 <<<= 9 y8 = x11 + x10 y7 <<<= 9 y13 = x12 + x15 lgeflags signed i = i - 2 x2 ^= y2 y8 <<<= 9 x7 ^= y7 y13 <<<= 9 x8 ^= y8 x13 ^= y13 y3 = x2 + x1 y4 = x7 + x6 y9 = x8 + x11 y3 <<<= 13 y14 = x13 + x12 y4 <<<= 13 x3 ^= y3 y9 <<<= 13 x4 ^= y4 y14 <<<= 13 x9 ^= y9 x14 ^= y14 y0 = x3 + x2 y5 = x4 + x7 y10 = x9 + x8 y0 <<<= 18 y15 = x14 + x13 y5 <<<= 18 x0 ^= y0 y10 <<<= 18 x5 ^= y5 y15 <<<= 18 x10 ^= y10 x15 ^= y15 goto mainloop if > y0 = *(uint32 *) (in + 0) x0 += y0 y1 = *(uint32 *) (in + 4) x1 += y1 y2 = *(uint32 *) (in + 8) x2 += y2 y3 = *(uint32 *) (in + 12) x3 += y3 y4 = *(uint32 *) (in + 16) x4 += y4 y5 = *(uint32 *) (in + 20) x5 += y5 y6 = *(uint32 *) (in + 24) x6 += y6 y7 = *(uint32 *) (in + 28) x7 += y7 y8 = *(uint32 *) (in + 32) x8 += y8 y9 = *(uint32 *) (in + 36) x9 += y9 y10 = *(uint32 *) (in + 40) x10 += y10 y11 = *(uint32 *) (in + 44) x11 += y11 y12 = *(uint32 *) (in + 48) x12 += y12 y13 = *(uint32 *) (in + 52) x13 += y13 y14 = *(uint32 *) (in + 56) x14 += y14 y15 = *(uint32 *) (in + 60) x15 += y15 *(uint32 *) (out + 0) = x0 *(uint32 *) (out + 4) = x1 *(uint32 *) (out + 8) = x2 *(uint32 *) (out + 12) = x3 *(uint32 *) (out + 16) = x4 *(uint32 *) (out + 20) = x5 *(uint32 *) (out + 24) = x6 *(uint32 *) (out + 28) = x7 *(uint32 *) (out + 32) = x8 *(uint32 *) (out + 36) = x9 *(uint32 *) (out + 40) = x10 *(uint32 *) (out + 44) = x11 *(uint32 *) (out + 48) = x12 *(uint32 *) (out + 52) = x13 *(uint32 *) (out + 56) = x14 *(uint32 *) (out + 60) = x15 load callerint 31 load callerint 30 load callerint 29 load callerint 28 load callerint 27 load callerint 26 load callerint 25 load callerint 24 load callerint 23 load callerint 22 load callerint 21 load callerint 20 load callerint 19 leave