Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/alpha/lib/strcat.S
10817 views
1
/*
2
* arch/alpha/lib/strcat.S
3
* Contributed by Richard Henderson ([email protected])
4
*
5
* Append a null-terminated string from SRC to DST.
6
*/
7
8
.text
9
10
.align 3
11
.globl strcat
12
.ent strcat
13
strcat:
14
.frame $30, 0, $26
15
.prologue 0
16
17
mov $16, $0 # set up return value
18
19
/* Find the end of the string. */
20
21
ldq_u $1, 0($16) # load first quadword (a0 may be misaligned)
22
lda $2, -1
23
insqh $2, $16, $2
24
andnot $16, 7, $16
25
or $2, $1, $1
26
cmpbge $31, $1, $2 # bits set iff byte == 0
27
bne $2, $found
28
29
$loop: ldq $1, 8($16)
30
addq $16, 8, $16
31
cmpbge $31, $1, $2
32
beq $2, $loop
33
34
$found: negq $2, $3 # clear all but least set bit
35
and $2, $3, $2
36
37
and $2, 0xf0, $3 # binary search for that set bit
38
and $2, 0xcc, $4
39
and $2, 0xaa, $5
40
cmovne $3, 4, $3
41
cmovne $4, 2, $4
42
cmovne $5, 1, $5
43
addq $3, $4, $3
44
addq $16, $5, $16
45
addq $16, $3, $16
46
47
/* Now do the append. */
48
49
mov $26, $23
50
br __stxcpy
51
52
.end strcat
53
54