diff options
Diffstat (limited to 'arch/arm/lib')
-rw-r--r-- | arch/arm/lib/copy_from_user.S | 5 | ||||
-rw-r--r-- | arch/arm/lib/copy_template.S | 30 | ||||
-rw-r--r-- | arch/arm/lib/copy_to_user.S | 5 | ||||
-rw-r--r-- | arch/arm/lib/memcpy.S | 5 | ||||
-rw-r--r-- | arch/arm/lib/memmove.S | 28 | ||||
-rw-r--r-- | arch/arm/lib/memset.S | 12 | ||||
-rw-r--r-- | arch/arm/lib/memzero.S | 12 |
7 files changed, 97 insertions, 0 deletions
diff --git a/arch/arm/lib/copy_from_user.S b/arch/arm/lib/copy_from_user.S index 66a477a3e3cc..7a235b9952be 100644 --- a/arch/arm/lib/copy_from_user.S +++ b/arch/arm/lib/copy_from_user.S | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <asm/assembler.h> | 14 | #include <asm/assembler.h> |
15 | #include <asm/unwind.h> | ||
15 | 16 | ||
16 | /* | 17 | /* |
17 | * Prototype: | 18 | * Prototype: |
@@ -77,6 +78,10 @@ | |||
77 | stmdb sp!, {r0, r2, r3, \reg1, \reg2} | 78 | stmdb sp!, {r0, r2, r3, \reg1, \reg2} |
78 | .endm | 79 | .endm |
79 | 80 | ||
81 | .macro usave reg1 reg2 | ||
82 | UNWIND( .save {r0, r2, r3, \reg1, \reg2} ) | ||
83 | .endm | ||
84 | |||
80 | .macro exit reg1 reg2 | 85 | .macro exit reg1 reg2 |
81 | add sp, sp, #8 | 86 | add sp, sp, #8 |
82 | ldmfd sp!, {r0, \reg1, \reg2} | 87 | ldmfd sp!, {r0, \reg1, \reg2} |
diff --git a/arch/arm/lib/copy_template.S b/arch/arm/lib/copy_template.S index 3bc8eb811a73..652e4d98cd47 100644 --- a/arch/arm/lib/copy_template.S +++ b/arch/arm/lib/copy_template.S | |||
@@ -53,6 +53,12 @@ | |||
53 | * data as needed by the implementation including this code. Called | 53 | * data as needed by the implementation including this code. Called |
54 | * upon code entry. | 54 | * upon code entry. |
55 | * | 55 | * |
56 | * usave reg1 reg2 | ||
57 | * | ||
58 | * Unwind annotation macro is corresponding for 'enter' macro. | ||
59 | * It tell unwinder that preserved some provided registers on the stack | ||
60 | * and additional data by a prior 'enter' macro. | ||
61 | * | ||
56 | * exit reg1 reg2 | 62 | * exit reg1 reg2 |
57 | * | 63 | * |
58 | * Restore registers with the values previously saved with the | 64 | * Restore registers with the values previously saved with the |
@@ -67,7 +73,12 @@ | |||
67 | */ | 73 | */ |
68 | 74 | ||
69 | 75 | ||
76 | UNWIND( .fnstart ) | ||
70 | enter r4, lr | 77 | enter r4, lr |
78 | UNWIND( .fnend ) | ||
79 | |||
80 | UNWIND( .fnstart ) | ||
81 | usave r4, lr @ in first stmdb block | ||
71 | 82 | ||
72 | subs r2, r2, #4 | 83 | subs r2, r2, #4 |
73 | blt 8f | 84 | blt 8f |
@@ -79,6 +90,11 @@ | |||
79 | 90 | ||
80 | 1: subs r2, r2, #(28) | 91 | 1: subs r2, r2, #(28) |
81 | stmfd sp!, {r5 - r8} | 92 | stmfd sp!, {r5 - r8} |
93 | UNWIND( .fnend ) | ||
94 | |||
95 | UNWIND( .fnstart ) | ||
96 | usave r4, lr | ||
97 | UNWIND( .save {r5 - r8} ) @ in second stmfd block | ||
82 | blt 5f | 98 | blt 5f |
83 | 99 | ||
84 | CALGN( ands ip, r0, #31 ) | 100 | CALGN( ands ip, r0, #31 ) |
@@ -144,7 +160,10 @@ | |||
144 | CALGN( bcs 2b ) | 160 | CALGN( bcs 2b ) |
145 | 161 | ||
146 | 7: ldmfd sp!, {r5 - r8} | 162 | 7: ldmfd sp!, {r5 - r8} |
163 | UNWIND( .fnend ) @ end of second stmfd block | ||
147 | 164 | ||
165 | UNWIND( .fnstart ) | ||
166 | usave r4, lr @ still in first stmdb block | ||
148 | 8: movs r2, r2, lsl #31 | 167 | 8: movs r2, r2, lsl #31 |
149 | ldr1b r1, r3, ne, abort=21f | 168 | ldr1b r1, r3, ne, abort=21f |
150 | ldr1b r1, r4, cs, abort=21f | 169 | ldr1b r1, r4, cs, abort=21f |
@@ -173,10 +192,13 @@ | |||
173 | ldr1w r1, lr, abort=21f | 192 | ldr1w r1, lr, abort=21f |
174 | beq 17f | 193 | beq 17f |
175 | bgt 18f | 194 | bgt 18f |
195 | UNWIND( .fnend ) | ||
176 | 196 | ||
177 | 197 | ||
178 | .macro forward_copy_shift pull push | 198 | .macro forward_copy_shift pull push |
179 | 199 | ||
200 | UNWIND( .fnstart ) | ||
201 | usave r4, lr @ still in first stmdb block | ||
180 | subs r2, r2, #28 | 202 | subs r2, r2, #28 |
181 | blt 14f | 203 | blt 14f |
182 | 204 | ||
@@ -187,7 +209,11 @@ | |||
187 | CALGN( bcc 15f ) | 209 | CALGN( bcc 15f ) |
188 | 210 | ||
189 | 11: stmfd sp!, {r5 - r9} | 211 | 11: stmfd sp!, {r5 - r9} |
212 | UNWIND( .fnend ) | ||
190 | 213 | ||
214 | UNWIND( .fnstart ) | ||
215 | usave r4, lr | ||
216 | UNWIND( .save {r5 - r9} ) @ in new second stmfd block | ||
191 | PLD( pld [r1, #0] ) | 217 | PLD( pld [r1, #0] ) |
192 | PLD( subs r2, r2, #96 ) | 218 | PLD( subs r2, r2, #96 ) |
193 | PLD( pld [r1, #28] ) | 219 | PLD( pld [r1, #28] ) |
@@ -221,7 +247,10 @@ | |||
221 | PLD( bge 13b ) | 247 | PLD( bge 13b ) |
222 | 248 | ||
223 | ldmfd sp!, {r5 - r9} | 249 | ldmfd sp!, {r5 - r9} |
250 | UNWIND( .fnend ) @ end of the second stmfd block | ||
224 | 251 | ||
252 | UNWIND( .fnstart ) | ||
253 | usave r4, lr @ still in first stmdb block | ||
225 | 14: ands ip, r2, #28 | 254 | 14: ands ip, r2, #28 |
226 | beq 16f | 255 | beq 16f |
227 | 256 | ||
@@ -236,6 +265,7 @@ | |||
236 | 265 | ||
237 | 16: sub r1, r1, #(\push / 8) | 266 | 16: sub r1, r1, #(\push / 8) |
238 | b 8b | 267 | b 8b |
268 | UNWIND( .fnend ) | ||
239 | 269 | ||
240 | .endm | 270 | .endm |
241 | 271 | ||
diff --git a/arch/arm/lib/copy_to_user.S b/arch/arm/lib/copy_to_user.S index d066df686e17..a9d3db16ecb5 100644 --- a/arch/arm/lib/copy_to_user.S +++ b/arch/arm/lib/copy_to_user.S | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <asm/assembler.h> | 14 | #include <asm/assembler.h> |
15 | #include <asm/unwind.h> | ||
15 | 16 | ||
16 | /* | 17 | /* |
17 | * Prototype: | 18 | * Prototype: |
@@ -80,6 +81,10 @@ | |||
80 | stmdb sp!, {r0, r2, r3, \reg1, \reg2} | 81 | stmdb sp!, {r0, r2, r3, \reg1, \reg2} |
81 | .endm | 82 | .endm |
82 | 83 | ||
84 | .macro usave reg1 reg2 | ||
85 | UNWIND( .save {r0, r2, r3, \reg1, \reg2} ) | ||
86 | .endm | ||
87 | |||
83 | .macro exit reg1 reg2 | 88 | .macro exit reg1 reg2 |
84 | add sp, sp, #8 | 89 | add sp, sp, #8 |
85 | ldmfd sp!, {r0, \reg1, \reg2} | 90 | ldmfd sp!, {r0, \reg1, \reg2} |
diff --git a/arch/arm/lib/memcpy.S b/arch/arm/lib/memcpy.S index a9b9e2287a09..7797e81e40e0 100644 --- a/arch/arm/lib/memcpy.S +++ b/arch/arm/lib/memcpy.S | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <asm/assembler.h> | 14 | #include <asm/assembler.h> |
15 | #include <asm/unwind.h> | ||
15 | 16 | ||
16 | #define LDR1W_SHIFT 0 | 17 | #define LDR1W_SHIFT 0 |
17 | #define STR1W_SHIFT 0 | 18 | #define STR1W_SHIFT 0 |
@@ -48,6 +49,10 @@ | |||
48 | stmdb sp!, {r0, \reg1, \reg2} | 49 | stmdb sp!, {r0, \reg1, \reg2} |
49 | .endm | 50 | .endm |
50 | 51 | ||
52 | .macro usave reg1 reg2 | ||
53 | UNWIND( .save {r0, \reg1, \reg2} ) | ||
54 | .endm | ||
55 | |||
51 | .macro exit reg1 reg2 | 56 | .macro exit reg1 reg2 |
52 | ldmfd sp!, {r0, \reg1, \reg2} | 57 | ldmfd sp!, {r0, \reg1, \reg2} |
53 | .endm | 58 | .endm |
diff --git a/arch/arm/lib/memmove.S b/arch/arm/lib/memmove.S index d1fc0c0c342c..69a9d47fc5ab 100644 --- a/arch/arm/lib/memmove.S +++ b/arch/arm/lib/memmove.S | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <asm/assembler.h> | 14 | #include <asm/assembler.h> |
15 | #include <asm/unwind.h> | ||
15 | 16 | ||
16 | .text | 17 | .text |
17 | 18 | ||
@@ -27,12 +28,17 @@ | |||
27 | */ | 28 | */ |
28 | 29 | ||
29 | ENTRY(memmove) | 30 | ENTRY(memmove) |
31 | UNWIND( .fnstart ) | ||
30 | 32 | ||
31 | subs ip, r0, r1 | 33 | subs ip, r0, r1 |
32 | cmphi r2, ip | 34 | cmphi r2, ip |
33 | bls memcpy | 35 | bls memcpy |
34 | 36 | ||
35 | stmfd sp!, {r0, r4, lr} | 37 | stmfd sp!, {r0, r4, lr} |
38 | UNWIND( .fnend ) | ||
39 | |||
40 | UNWIND( .fnstart ) | ||
41 | UNWIND( .save {r0, r4, lr} ) @ in first stmfd block | ||
36 | add r1, r1, r2 | 42 | add r1, r1, r2 |
37 | add r0, r0, r2 | 43 | add r0, r0, r2 |
38 | subs r2, r2, #4 | 44 | subs r2, r2, #4 |
@@ -45,6 +51,11 @@ ENTRY(memmove) | |||
45 | 51 | ||
46 | 1: subs r2, r2, #(28) | 52 | 1: subs r2, r2, #(28) |
47 | stmfd sp!, {r5 - r8} | 53 | stmfd sp!, {r5 - r8} |
54 | UNWIND( .fnend ) | ||
55 | |||
56 | UNWIND( .fnstart ) | ||
57 | UNWIND( .save {r0, r4, lr} ) | ||
58 | UNWIND( .save {r5 - r8} ) @ in second stmfd block | ||
48 | blt 5f | 59 | blt 5f |
49 | 60 | ||
50 | CALGN( ands ip, r0, #31 ) | 61 | CALGN( ands ip, r0, #31 ) |
@@ -97,6 +108,10 @@ ENTRY(memmove) | |||
97 | CALGN( bcs 2b ) | 108 | CALGN( bcs 2b ) |
98 | 109 | ||
99 | 7: ldmfd sp!, {r5 - r8} | 110 | 7: ldmfd sp!, {r5 - r8} |
111 | UNWIND( .fnend ) @ end of second stmfd block | ||
112 | |||
113 | UNWIND( .fnstart ) | ||
114 | UNWIND( .save {r0, r4, lr} ) @ still in first stmfd block | ||
100 | 115 | ||
101 | 8: movs r2, r2, lsl #31 | 116 | 8: movs r2, r2, lsl #31 |
102 | ldrneb r3, [r1, #-1]! | 117 | ldrneb r3, [r1, #-1]! |
@@ -124,10 +139,13 @@ ENTRY(memmove) | |||
124 | ldr r3, [r1, #0] | 139 | ldr r3, [r1, #0] |
125 | beq 17f | 140 | beq 17f |
126 | blt 18f | 141 | blt 18f |
142 | UNWIND( .fnend ) | ||
127 | 143 | ||
128 | 144 | ||
129 | .macro backward_copy_shift push pull | 145 | .macro backward_copy_shift push pull |
130 | 146 | ||
147 | UNWIND( .fnstart ) | ||
148 | UNWIND( .save {r0, r4, lr} ) @ still in first stmfd block | ||
131 | subs r2, r2, #28 | 149 | subs r2, r2, #28 |
132 | blt 14f | 150 | blt 14f |
133 | 151 | ||
@@ -137,6 +155,11 @@ ENTRY(memmove) | |||
137 | CALGN( bcc 15f ) | 155 | CALGN( bcc 15f ) |
138 | 156 | ||
139 | 11: stmfd sp!, {r5 - r9} | 157 | 11: stmfd sp!, {r5 - r9} |
158 | UNWIND( .fnend ) | ||
159 | |||
160 | UNWIND( .fnstart ) | ||
161 | UNWIND( .save {r0, r4, lr} ) | ||
162 | UNWIND( .save {r5 - r9} ) @ in new second stmfd block | ||
140 | 163 | ||
141 | PLD( pld [r1, #-4] ) | 164 | PLD( pld [r1, #-4] ) |
142 | PLD( subs r2, r2, #96 ) | 165 | PLD( subs r2, r2, #96 ) |
@@ -171,6 +194,10 @@ ENTRY(memmove) | |||
171 | PLD( bge 13b ) | 194 | PLD( bge 13b ) |
172 | 195 | ||
173 | ldmfd sp!, {r5 - r9} | 196 | ldmfd sp!, {r5 - r9} |
197 | UNWIND( .fnend ) @ end of the second stmfd block | ||
198 | |||
199 | UNWIND( .fnstart ) | ||
200 | UNWIND( .save {r0, r4, lr} ) @ still in first stmfd block | ||
174 | 201 | ||
175 | 14: ands ip, r2, #28 | 202 | 14: ands ip, r2, #28 |
176 | beq 16f | 203 | beq 16f |
@@ -186,6 +213,7 @@ ENTRY(memmove) | |||
186 | 213 | ||
187 | 16: add r1, r1, #(\pull / 8) | 214 | 16: add r1, r1, #(\pull / 8) |
188 | b 8b | 215 | b 8b |
216 | UNWIND( .fnend ) | ||
189 | 217 | ||
190 | .endm | 218 | .endm |
191 | 219 | ||
diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S index 671455c854fa..a4ee97b5a2bf 100644 --- a/arch/arm/lib/memset.S +++ b/arch/arm/lib/memset.S | |||
@@ -11,11 +11,13 @@ | |||
11 | */ | 11 | */ |
12 | #include <linux/linkage.h> | 12 | #include <linux/linkage.h> |
13 | #include <asm/assembler.h> | 13 | #include <asm/assembler.h> |
14 | #include <asm/unwind.h> | ||
14 | 15 | ||
15 | .text | 16 | .text |
16 | .align 5 | 17 | .align 5 |
17 | 18 | ||
18 | ENTRY(memset) | 19 | ENTRY(memset) |
20 | UNWIND( .fnstart ) | ||
19 | ands r3, r0, #3 @ 1 unaligned? | 21 | ands r3, r0, #3 @ 1 unaligned? |
20 | mov ip, r0 @ preserve r0 as return value | 22 | mov ip, r0 @ preserve r0 as return value |
21 | bne 6f @ 1 | 23 | bne 6f @ 1 |
@@ -34,6 +36,9 @@ ENTRY(memset) | |||
34 | * We need 2 extra registers for this loop - use r8 and the LR | 36 | * We need 2 extra registers for this loop - use r8 and the LR |
35 | */ | 37 | */ |
36 | stmfd sp!, {r8, lr} | 38 | stmfd sp!, {r8, lr} |
39 | UNWIND( .fnend ) | ||
40 | UNWIND( .fnstart ) | ||
41 | UNWIND( .save {r8, lr} ) | ||
37 | mov r8, r1 | 42 | mov r8, r1 |
38 | mov lr, r1 | 43 | mov lr, r1 |
39 | 44 | ||
@@ -53,6 +58,7 @@ ENTRY(memset) | |||
53 | tst r2, #16 | 58 | tst r2, #16 |
54 | stmneia ip!, {r1, r3, r8, lr} | 59 | stmneia ip!, {r1, r3, r8, lr} |
55 | ldmfd sp!, {r8, lr} | 60 | ldmfd sp!, {r8, lr} |
61 | UNWIND( .fnend ) | ||
56 | 62 | ||
57 | #else | 63 | #else |
58 | 64 | ||
@@ -62,6 +68,9 @@ ENTRY(memset) | |||
62 | */ | 68 | */ |
63 | 69 | ||
64 | stmfd sp!, {r4-r8, lr} | 70 | stmfd sp!, {r4-r8, lr} |
71 | UNWIND( .fnend ) | ||
72 | UNWIND( .fnstart ) | ||
73 | UNWIND( .save {r4-r8, lr} ) | ||
65 | mov r4, r1 | 74 | mov r4, r1 |
66 | mov r5, r1 | 75 | mov r5, r1 |
67 | mov r6, r1 | 76 | mov r6, r1 |
@@ -94,9 +103,11 @@ ENTRY(memset) | |||
94 | tst r2, #16 | 103 | tst r2, #16 |
95 | stmneia ip!, {r4-r7} | 104 | stmneia ip!, {r4-r7} |
96 | ldmfd sp!, {r4-r8, lr} | 105 | ldmfd sp!, {r4-r8, lr} |
106 | UNWIND( .fnend ) | ||
97 | 107 | ||
98 | #endif | 108 | #endif |
99 | 109 | ||
110 | UNWIND( .fnstart ) | ||
100 | 4: tst r2, #8 | 111 | 4: tst r2, #8 |
101 | stmneia ip!, {r1, r3} | 112 | stmneia ip!, {r1, r3} |
102 | tst r2, #4 | 113 | tst r2, #4 |
@@ -120,4 +131,5 @@ ENTRY(memset) | |||
120 | strb r1, [ip], #1 @ 1 | 131 | strb r1, [ip], #1 @ 1 |
121 | add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3)) | 132 | add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3)) |
122 | b 1b | 133 | b 1b |
134 | UNWIND( .fnend ) | ||
123 | ENDPROC(memset) | 135 | ENDPROC(memset) |
diff --git a/arch/arm/lib/memzero.S b/arch/arm/lib/memzero.S index 385ccb306fa2..0eded952e089 100644 --- a/arch/arm/lib/memzero.S +++ b/arch/arm/lib/memzero.S | |||
@@ -9,6 +9,7 @@ | |||
9 | */ | 9 | */ |
10 | #include <linux/linkage.h> | 10 | #include <linux/linkage.h> |
11 | #include <asm/assembler.h> | 11 | #include <asm/assembler.h> |
12 | #include <asm/unwind.h> | ||
12 | 13 | ||
13 | .text | 14 | .text |
14 | .align 5 | 15 | .align 5 |
@@ -18,6 +19,7 @@ | |||
18 | * mis-aligned by, and r1 is the number of bytes. If r1 < 4, then we | 19 | * mis-aligned by, and r1 is the number of bytes. If r1 < 4, then we |
19 | * don't bother; we use byte stores instead. | 20 | * don't bother; we use byte stores instead. |
20 | */ | 21 | */ |
22 | UNWIND( .fnstart ) | ||
21 | 1: subs r1, r1, #4 @ 1 do we have enough | 23 | 1: subs r1, r1, #4 @ 1 do we have enough |
22 | blt 5f @ 1 bytes to align with? | 24 | blt 5f @ 1 bytes to align with? |
23 | cmp r3, #2 @ 1 | 25 | cmp r3, #2 @ 1 |
@@ -47,6 +49,9 @@ ENTRY(__memzero) | |||
47 | * use the LR | 49 | * use the LR |
48 | */ | 50 | */ |
49 | str lr, [sp, #-4]! @ 1 | 51 | str lr, [sp, #-4]! @ 1 |
52 | UNWIND( .fnend ) | ||
53 | UNWIND( .fnstart ) | ||
54 | UNWIND( .save {lr} ) | ||
50 | mov ip, r2 @ 1 | 55 | mov ip, r2 @ 1 |
51 | mov lr, r2 @ 1 | 56 | mov lr, r2 @ 1 |
52 | 57 | ||
@@ -66,6 +71,7 @@ ENTRY(__memzero) | |||
66 | tst r1, #16 @ 1 16 bytes or more? | 71 | tst r1, #16 @ 1 16 bytes or more? |
67 | stmneia r0!, {r2, r3, ip, lr} @ 4 | 72 | stmneia r0!, {r2, r3, ip, lr} @ 4 |
68 | ldr lr, [sp], #4 @ 1 | 73 | ldr lr, [sp], #4 @ 1 |
74 | UNWIND( .fnend ) | ||
69 | 75 | ||
70 | #else | 76 | #else |
71 | 77 | ||
@@ -75,6 +81,9 @@ ENTRY(__memzero) | |||
75 | */ | 81 | */ |
76 | 82 | ||
77 | stmfd sp!, {r4-r7, lr} | 83 | stmfd sp!, {r4-r7, lr} |
84 | UNWIND( .fnend ) | ||
85 | UNWIND( .fnstart ) | ||
86 | UNWIND( .save {r4-r7, lr} ) | ||
78 | mov r4, r2 | 87 | mov r4, r2 |
79 | mov r5, r2 | 88 | mov r5, r2 |
80 | mov r6, r2 | 89 | mov r6, r2 |
@@ -105,9 +114,11 @@ ENTRY(__memzero) | |||
105 | tst r1, #16 | 114 | tst r1, #16 |
106 | stmneia r0!, {r4-r7} | 115 | stmneia r0!, {r4-r7} |
107 | ldmfd sp!, {r4-r7, lr} | 116 | ldmfd sp!, {r4-r7, lr} |
117 | UNWIND( .fnend ) | ||
108 | 118 | ||
109 | #endif | 119 | #endif |
110 | 120 | ||
121 | UNWIND( .fnstart ) | ||
111 | 4: tst r1, #8 @ 1 8 bytes or more? | 122 | 4: tst r1, #8 @ 1 8 bytes or more? |
112 | stmneia r0!, {r2, r3} @ 2 | 123 | stmneia r0!, {r2, r3} @ 2 |
113 | tst r1, #4 @ 1 4 bytes or more? | 124 | tst r1, #4 @ 1 4 bytes or more? |
@@ -122,4 +133,5 @@ ENTRY(__memzero) | |||
122 | tst r1, #1 @ 1 a byte left over | 133 | tst r1, #1 @ 1 a byte left over |
123 | strneb r2, [r0], #1 @ 1 | 134 | strneb r2, [r0], #1 @ 1 |
124 | ret lr @ 1 | 135 | ret lr @ 1 |
136 | UNWIND( .fnend ) | ||
125 | ENDPROC(__memzero) | 137 | ENDPROC(__memzero) |