Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(296)

Delta Between Two Patch Sets: src/pkg/crypto/rc4/rc4_amd64.s

Issue 7234055: code review 7234055: crypto/rc4: add simple amd64 asm implementation. (Closed)
Left Patch Set: diff -r 74ba903952d9 https://code.google.com/p/go/ Created 12 years, 1 month ago
Right Patch Set: diff -r 4346c244291a https://code.google.com/p/go/ Created 12 years, 1 month ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « src/pkg/crypto/rc4/rc4.go ('k') | src/pkg/crypto/rc4/rc4_asm.go » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
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
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b