LEFT | RIGHT |
1 // Copyright 2013 The Go Authors. All rights reserved. | 1 // Copyright 2013 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 // func xorKeyStream(dst, src *byte, n int, state *[256]byte, i, j *uint8) | 5 // func xorKeyStream(dst, src *byte, n int, state *[256]byte, i, j *uint8) |
6 TEXT ·xorKeyStream(SB),7,$0 | 6 TEXT ·xorKeyStream(SB),7,$0 |
7 MOVQ dst+0(FP), DI | 7 MOVQ dst+0(FP), DI |
8 MOVQ src+8(FP), SI | 8 MOVQ src+8(FP), SI |
9 MOVQ n+16(FP), CX | 9 MOVQ n+16(FP), CX |
10 MOVQ state+24(FP), R8 | 10 MOVQ state+24(FP), R8 |
11 | 11 |
12 MOVQ xPtr+32(FP), AX | 12 MOVQ xPtr+32(FP), AX |
13 MOVBQZX (AX), AX | 13 MOVBQZX (AX), AX |
14 MOVQ yPtr+40(FP), BX | 14 MOVQ yPtr+40(FP), BX |
15 MOVBQZX (BX), BX | 15 MOVBQZX (BX), BX |
16 | 16 |
17 loop: | 17 loop: |
18 CMPQ CX, $0 | 18 CMPQ CX, $0 |
19 » JZ done | 19 » JE done |
20 | 20 |
21 // c.i += 1 | 21 // c.i += 1 |
22 INCB AX | 22 INCB AX |
23 | 23 |
24 // c.j += c.s[c.i] | 24 // c.j += c.s[c.i] |
25 MOVB (R8)(AX*1), R9 | 25 MOVB (R8)(AX*1), R9 |
26 ADDB R9, BX | 26 ADDB R9, BX |
27 | 27 |
28 MOVBQZX (R8)(BX*1), R10 | 28 MOVBQZX (R8)(BX*1), R10 |
29 | 29 |
30 MOVB R10, (R8)(AX*1) | 30 MOVB R10, (R8)(AX*1) |
31 MOVB R9, (R8)(BX*1) | 31 MOVB R9, (R8)(BX*1) |
32 | 32 |
33 // R11 = c.s[c.i]+c.s[c.j] | 33 // R11 = c.s[c.i]+c.s[c.j] |
34 MOVQ R10, R11 | 34 MOVQ R10, R11 |
35 ADDB R9, R11 | 35 ADDB R9, R11 |
36 | 36 |
37 MOVB (R8)(R11*1), R11 | 37 MOVB (R8)(R11*1), R11 |
38 MOVB (SI), R12 | 38 MOVB (SI), R12 |
39 XORB R11, R12 | 39 XORB R11, R12 |
40 MOVB R12, (DI) | 40 MOVB R12, (DI) |
41 | 41 |
42 INCQ SI | 42 INCQ SI |
43 INCQ DI | 43 INCQ DI |
44 DECQ CX | 44 DECQ CX |
| 45 |
45 JMP loop | 46 JMP loop |
46 | |
47 done: | 47 done: |
48 MOVQ xPtr+32(FP), R8 | 48 MOVQ xPtr+32(FP), R8 |
49 MOVB AX, (R8) | 49 MOVB AX, (R8) |
50 MOVQ yPtr+40(FP), R8 | 50 MOVQ yPtr+40(FP), R8 |
51 MOVB BX, (R8) | 51 MOVB BX, (R8) |
52 | 52 |
53 RET | 53 RET |
LEFT | RIGHT |