# salsa20_word_pm version 20050327 # D. J. Bernstein # Public domain. register int32 in register int32 out register int32 in12 register int32 in0 register int32 in1 register int32 in2 register int32 in3 register int32 in4 register int32 in5 register int32 in6 register int32 in7 register int32 in8 register int32 in9 register int32 in10 register int32 in11 register int32 in13 register int32 in14 register int32 in15 register int32 out14 register int32 out13 register int32 out12 register int32 out0 register int32 out1 register int32 out2 register int32 out3 register int32 out4 register int32 out5 register int32 out6 register int32 out7 register int32 out8 register int32 out9 register int32 out10 register int32 out11 register int32 out15 register int32 p register int32 s register int32 t register int32 w register int32 i register int32 r register int32 v temporary mem32 x0 temporary mem32 x1 temporary mem32 x2 temporary mem32 x3 temporary mem32 x4 temporary mem32 x5 temporary mem32 x6 temporary mem32 x7 temporary mem32 x8 temporary mem32 x9 temporary mem32 x10 temporary mem32 x11 temporary mem32 x12 temporary mem32 x13 temporary mem32 x14 temporary mem32 x15 enter salsa20_word_pm input out input in load in store callerint ebx store callerint esi store callerint edi in12 = *(uint32 *) (in + 48) store callerint ebp in6 = *(uint32 *) (in + 24) in1 = *(uint32 *) (in + 4) in11 = *(uint32 *) (in + 44) x12 = in12 in4 = *(uint32 *) (in + 16) x6 = in6 in14 = *(uint32 *) (in + 56) x1 = in1 in9 = *(uint32 *) (in + 36) x11 = in11 in3 = *(uint32 *) (in + 12) x4 = in4 in8 = *(uint32 *) (in + 32) x14 = in14 in2 = *(uint32 *) (in + 8) x9 = in9 in13 = *(uint32 *) (in + 52) x3 = in3 in7 = *(uint32 *) (in + 28) x8 = in8 p = *(uint32 *) (in + 0) x2 = in2 t = *(uint32 *) (in + 40) x13 = in13 s = *(uint32 *) (in + 20) x7 = in7 w = *(uint32 *) (in + 60) i = 20 mainloop: x0 = p x10 = t inplace p += x12 x5 = s inplace t += x6 x15 = w r = x1 inplace r += s v = x11 inplace v += w inplace p <<<= 7 inplace p ^= x4 inplace t <<<= 7 inplace t ^= x14 inplace r <<<= 7 inplace r ^= x9 inplace v <<<= 7 inplace v ^= x3 x4 = p x14 = t inplace p += x0 x9 = r inplace t += x10 x3 = v inplace p <<<= 9 inplace p ^= x8 inplace t <<<= 9 inplace t ^= x2 inplace s += r inplace s <<<= 9 inplace s ^= x13 inplace w += v inplace w <<<= 9 inplace w ^= x7 x8 = p x2 = t inplace p += x4 x13 = s inplace t += x14 x7 = w inplace p <<<= 13 inplace p ^= x12 inplace t <<<= 13 inplace t ^= x6 inplace r += s inplace r <<<= 13 inplace r ^= x1 inplace v += w inplace v <<<= 13 inplace v ^= x11 x12 = p x6 = t inplace p += x8 x1 = r inplace t += x2 x11 = v inplace p <<<= 18 inplace p ^= x0 inplace t <<<= 18 inplace t ^= x10 inplace s += r inplace s <<<= 18 inplace s ^= x5 inplace w += v inplace w <<<= 18 inplace w ^= x15 x0 = p x10 = t inplace p += x3 inplace p <<<= 7 x5 = s inplace t += x9 x15 = w r = x4 inplace r += s v = x14 inplace v += w inplace p ^= x1 inplace t <<<= 7 inplace t ^= x11 inplace r <<<= 7 inplace r ^= x6 inplace v <<<= 7 inplace v ^= x12 x1 = p x11 = t inplace p += x0 x6 = r inplace t += x10 x12 = v inplace p <<<= 9 inplace p ^= x2 inplace t <<<= 9 inplace t ^= x8 inplace s += r inplace s <<<= 9 inplace s ^= x7 inplace w += v inplace w <<<= 9 inplace w ^= x13 x2 = p x8 = t inplace p += x1 x7 = s inplace t += x11 x13 = w inplace p <<<= 13 inplace p ^= x3 inplace t <<<= 13 inplace t ^= x9 inplace r += s inplace r <<<= 13 inplace r ^= x4 inplace v += w inplace v <<<= 13 inplace v ^= x14 x3 = p x9 = t inplace p += x2 x4 = r inplace t += x8 x14 = v inplace p <<<= 18 inplace p ^= x0 inplace t <<<= 18 inplace t ^= x10 inplace s += r inplace s <<<= 18 inplace s ^= x5 inplace w += v inplace w <<<= 18 inplace w ^= x15 x0 = p x10 = t inplace p += x12 x5 = s inplace t += x6 x15 = w r = x1 inplace r += s v = x11 inplace v += w inplace p <<<= 7 inplace p ^= x4 inplace t <<<= 7 inplace t ^= x14 inplace r <<<= 7 inplace r ^= x9 inplace v <<<= 7 inplace v ^= x3 x4 = p x14 = t inplace p += x0 x9 = r inplace t += x10 x3 = v inplace p <<<= 9 inplace p ^= x8 inplace t <<<= 9 inplace t ^= x2 inplace s += r inplace s <<<= 9 inplace s ^= x13 inplace w += v inplace w <<<= 9 inplace w ^= x7 x8 = p x2 = t inplace p += x4 x13 = s inplace t += x14 x7 = w inplace p <<<= 13 inplace p ^= x12 inplace t <<<= 13 inplace t ^= x6 inplace r += s inplace r <<<= 13 inplace r ^= x1 inplace v += w inplace v <<<= 13 inplace v ^= x11 x12 = p x6 = t inplace p += x8 x1 = r inplace t += x2 x11 = v inplace p <<<= 18 inplace p ^= x0 inplace t <<<= 18 inplace t ^= x10 inplace s += r inplace s <<<= 18 inplace s ^= x5 inplace w += v inplace w <<<= 18 inplace w ^= x15 x0 = p x10 = t inplace p += x3 inplace p <<<= 7 x5 = s inplace t += x9 x15 = w r = x4 inplace r += s v = x14 inplace v += w inplace p ^= x1 inplace t <<<= 7 inplace t ^= x11 inplace r <<<= 7 inplace r ^= x6 inplace v <<<= 7 inplace v ^= x12 x1 = p x11 = t inplace p += x0 x6 = r inplace t += x10 x12 = v inplace p <<<= 9 inplace p ^= x2 inplace t <<<= 9 inplace t ^= x8 inplace s += r inplace s <<<= 9 inplace s ^= x7 inplace w += v inplace w <<<= 9 inplace w ^= x13 x2 = p x8 = t inplace p += x1 x7 = s inplace t += x11 x13 = w inplace p <<<= 13 inplace p ^= x3 inplace t <<<= 13 inplace t ^= x9 inplace r += s inplace r <<<= 13 inplace r ^= x4 inplace v += w inplace v <<<= 13 inplace v ^= x14 x3 = p x9 = t inplace p += x2 x4 = r inplace t += x8 x14 = v inplace p <<<= 18 inplace p ^= x0 inplace t <<<= 18 inplace t ^= x10 inplace s += r inplace s <<<= 18 inplace s ^= x5 inplace w += v inplace w <<<= 18 inplace w ^= x15 inplace i -= 4 goto mainloop if unsigned > load in load out p += *(uint32 *) (in + 0) s += *(uint32 *) (in + 20) t += *(uint32 *) (in + 40) w += *(uint32 *) (in + 60) *(uint32 *) (out + 0) = p *(uint32 *) (out + 20) = s out1 = x1 *(uint32 *) (out + 40) = t out2 = x2 *(uint32 *) (out + 60) = w out3 = x3 out1 += *(uint32 *) (in + 4) out2 += *(uint32 *) (in + 8) out3 += *(uint32 *) (in + 12) *(uint32 *) (out + 4) = out1 out4 = x4 *(uint32 *) (out + 8) = out2 out6 = x6 *(uint32 *) (out + 12) = out3 out7 = x7 out4 += *(uint32 *) (in + 16) out6 += *(uint32 *) (in + 24) out7 += *(uint32 *) (in + 28) *(uint32 *) (out + 16) = out4 out8 = x8 *(uint32 *) (out + 24) = out6 out9 = x9 *(uint32 *) (out + 28) = out7 out11 = x11 out8 += *(uint32 *) (in + 32) out9 += *(uint32 *) (in + 36) out11 += *(uint32 *) (in + 44) *(uint32 *) (out + 32) = out8 out12 = x12 *(uint32 *) (out + 36) = out9 out13 = x13 *(uint32 *) (out + 44) = out11 out14 = x14 out12 += *(uint32 *) (in + 48) out13 += *(uint32 *) (in + 52) out14 += *(uint32 *) (in + 56) load callerint ebx *(uint32 *) (out + 48) = out12 load callerint esi *(uint32 *) (out + 52) = out13 load callerint edi *(uint32 *) (out + 56) = out14 load callerint ebp leave