Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/avr32/lib/csum_partial.S
10817 views
1
/*
2
* Copyright (C) 2004-2006 Atmel Corporation
3
*
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License version 2 as
6
* published by the Free Software Foundation.
7
*/
8
9
/*
10
* unsigned int csum_partial(const unsigned char *buff,
11
* int len, unsigned int sum)
12
*/
13
.text
14
.global csum_partial
15
.type csum_partial,"function"
16
.align 1
17
csum_partial:
18
/* checksum complete words, aligned or not */
19
3: sub r11, 4
20
brlt 5f
21
4: ld.w r9, r12++
22
add r10, r9
23
acr r10
24
sub r11, 4
25
brge 4b
26
27
/* return if we had a whole number of words */
28
5: sub r11, -4
29
reteq r10
30
31
/* checksum any remaining bytes at the end */
32
mov r9, 0
33
mov r8, 0
34
cp r11, 2
35
brlt 6f
36
ld.uh r9, r12++
37
sub r11, 2
38
breq 7f
39
lsl r9, 16
40
6: ld.ub r8, r12++
41
lsl r8, 8
42
7: or r9, r8
43
add r10, r9
44
acr r10
45
46
retal r10
47
.size csum_partial, . - csum_partial
48
49