blob: ffe9ada85bb3b5c473d79c2366809e7121683201 [file] [log] [blame]
// Copyright 2013 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// func xorKeyStream(dst, src *byte, n int, state *[256]byte, i, j *uint8)
TEXT ·xorKeyStream(SB),7,$0
MOVQ dst+0(FP), DI
MOVQ src+8(FP), SI
MOVQ n+16(FP), CX
MOVQ state+24(FP), R8
MOVQ xPtr+32(FP), AX
MOVBQZX (AX), AX
MOVQ yPtr+40(FP), BX
MOVBQZX (BX), BX
loop:
CMPQ CX, $0
JE done
// c.i += 1
INCB AX
// c.j += c.s[c.i]
MOVB (R8)(AX*1), R9
ADDB R9, BX
MOVBQZX (R8)(BX*1), R10
MOVB R10, (R8)(AX*1)
MOVB R9, (R8)(BX*1)
// R11 = c.s[c.i]+c.s[c.j]
MOVQ R10, R11
ADDB R9, R11
MOVB (R8)(R11*1), R11
MOVB (SI), R12
XORB R11, R12
MOVB R12, (DI)
INCQ SI
INCQ DI
DECQ CX
JMP loop
done:
MOVQ xPtr+32(FP), R8
MOVB AX, (R8)
MOVQ yPtr+40(FP), R8
MOVB BX, (R8)
RET