]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libc/sparc/strcpy.s
fltfmt: %.ng is supposed to print a number with n significant figures, but it prints...
[plan9front.git] / sys / src / libc / sparc / strcpy.s
1         TEXT    strcpy(SB), $0
2
3 MOVW    R7, 0(FP)
4         MOVW    s1+0(FP), R9            /* R9 is to pointer */
5         MOVW    s2+4(FP), R10           /* R10 is from pointer */
6
7 /*
8  * test if both pointers
9  * are similarly word aligned
10  */
11         XOR     R9,R10, R7
12         ANDCC   $3,R7, R0
13         BNE     una
14
15 /*
16  * make byte masks
17  */
18         MOVW    $0xff, R17
19         SLL     $8,R17, R16
20         SLL     $16,R17, R13
21         SLL     $24,R17, R12
22
23 /*
24  * byte at a time to word align
25  */
26 al1:
27         ANDCC   $3,R10, R0
28         BE      al2
29         MOVB    (R10), R11
30         ADD     $1, R10
31         MOVB    R11, (R9)
32         ADD     $1, R9
33         SUBCC   R0,R11, R0
34         BNE     al1
35         JMP     out
36
37 /*
38  * word at a time
39  */
40 al2:
41         ADD     $4, R9
42         MOVW    (R10), R11      /* fetch */
43         ADD     $4, R10
44         ANDCC   R12,R11, R0     /* is it byte 0 */
45         BE      b0
46         ANDCC   R13,R11, R0     /* is it byte 1 */
47         BE      b1
48         ANDCC   R16,R11, R0     /* is it byte 2 */
49         BE      b2
50         MOVW    R11, -4(R9)     /* store */
51         ANDCC   R17,R11, R0     /* is it byte 3 */
52         BNE     al2
53
54         JMP     out
55
56 b0:
57         MOVB    R0, -4(R9)
58         JMP     out
59
60 b1:
61         SRL     $24, R11
62         MOVB    R11, -4(R9)
63         MOVB    R0, -3(R9)
64         JMP     out
65
66 b2:
67         SRL     $24,R11, R7
68         MOVB    R7, -4(R9)
69         SRL     $16, R11
70         MOVB    R11, -3(R9)
71         MOVB    R0, -2(R9)
72         JMP     out
73
74 una:
75         MOVB    (R10), R11
76         ADD     $1, R10
77         MOVB    R11, (R9)
78         ADD     $1, R9
79         SUBCC   R0,R11, R0
80         BNE     una
81
82 out:
83         MOVW    s1+0(FP),R7
84         RETURN