aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/cris/arch-v10/lib/memset.c82
1 files changed, 41 insertions, 41 deletions
diff --git a/arch/cris/arch-v10/lib/memset.c b/arch/cris/arch-v10/lib/memset.c
index 82bb66839171..42c1101043a3 100644
--- a/arch/cris/arch-v10/lib/memset.c
+++ b/arch/cris/arch-v10/lib/memset.c
@@ -66,7 +66,7 @@ void *memset(void *pdst,
66 66
67 { 67 {
68 register char *dst __asm__ ("r13") = pdst; 68 register char *dst __asm__ ("r13") = pdst;
69 69
70 /* This is NONPORTABLE, but since this whole routine is */ 70 /* This is NONPORTABLE, but since this whole routine is */
71 /* grossly nonportable that doesn't matter. */ 71 /* grossly nonportable that doesn't matter. */
72 72
@@ -110,52 +110,52 @@ void *memset(void *pdst,
110 If you want to check that the allocation was right; then 110 If you want to check that the allocation was right; then
111 check the equalities in the first comment. It should say 111 check the equalities in the first comment. It should say
112 "r13=r13, r12=r12, r11=r11" */ 112 "r13=r13, r12=r12, r11=r11" */
113 __asm__ volatile (" 113 __asm__ volatile ("\n\
114 ;; Check that the following is true (same register names on 114 ;; Check that the following is true (same register names on \n\
115 ;; both sides of equal sign, as in r8=r8): 115 ;; both sides of equal sign, as in r8=r8): \n\
116 ;; %0=r13, %1=r12, %4=r11 116 ;; %0=r13, %1=r12, %4=r11 \n\
117 ;; 117 ;; \n\
118 ;; Save the registers we'll clobber in the movem process 118 ;; Save the registers we'll clobber in the movem process \n\
119 ;; on the stack. Don't mention them to gcc, it will only be 119 ;; on the stack. Don't mention them to gcc, it will only be \n\
120 ;; upset. 120 ;; upset. \n\
121 subq 11*4,$sp 121 subq 11*4,$sp \n\
122 movem $r10,[$sp] 122 movem $r10,[$sp] \n\
123 123 \n\
124 move.d $r11,$r0 124 move.d $r11,$r0 \n\
125 move.d $r11,$r1 125 move.d $r11,$r1 \n\
126 move.d $r11,$r2 126 move.d $r11,$r2 \n\
127 move.d $r11,$r3 127 move.d $r11,$r3 \n\
128 move.d $r11,$r4 128 move.d $r11,$r4 \n\
129 move.d $r11,$r5 129 move.d $r11,$r5 \n\
130 move.d $r11,$r6 130 move.d $r11,$r6 \n\
131 move.d $r11,$r7 131 move.d $r11,$r7 \n\
132 move.d $r11,$r8 132 move.d $r11,$r8 \n\
133 move.d $r11,$r9 133 move.d $r11,$r9 \n\
134 move.d $r11,$r10 134 move.d $r11,$r10 \n\
135 135 \n\
136 ;; Now we've got this: 136 ;; Now we've got this: \n\
137 ;; r13 - dst 137 ;; r13 - dst \n\
138 ;; r12 - n 138 ;; r12 - n \n\
139 139 \n\
140 ;; Update n for the first loop 140 ;; Update n for the first loop \n\
141 subq 12*4,$r12 141 subq 12*4,$r12 \n\
1420: 1420: \n\
143 subq 12*4,$r12 143 subq 12*4,$r12 \n\
144 bge 0b 144 bge 0b \n\
145 movem $r11,[$r13+] 145 movem $r11,[$r13+] \n\
146 146 \n\
147 addq 12*4,$r12 ;; compensate for last loop underflowing n 147 addq 12*4,$r12 ;; compensate for last loop underflowing n \n\
148 148 \n\
149 ;; Restore registers from stack 149 ;; Restore registers from stack \n\
150 movem [$sp+],$r10" 150 movem [$sp+],$r10"
151 151
152 /* Outputs */ : "=r" (dst), "=r" (n) 152 /* Outputs */ : "=r" (dst), "=r" (n)
153 /* Inputs */ : "0" (dst), "1" (n), "r" (lc)); 153 /* Inputs */ : "0" (dst), "1" (n), "r" (lc));
154 154
155 } 155 }
156 156
157 /* Either we directly starts copying, using dword copying 157 /* Either we directly starts copying, using dword copying
158 in a loop, or we copy as much as possible with 'movem' 158 in a loop, or we copy as much as possible with 'movem'
159 and then the last block (<44 bytes) is copied here. 159 and then the last block (<44 bytes) is copied here.
160 This will work since 'movem' will have updated src,dst,n. */ 160 This will work since 'movem' will have updated src,dst,n. */
161 161