equal
deleted
inserted
replaced
152 addl $4,%esi |
152 addl $4,%esi |
153 subl $1,%ecx |
153 subl $1,%ecx |
154 jnz 3b |
154 jnz 3b |
155 addl %esi,%edi |
155 addl %esi,%edi |
156 4: movl %eax,%ecx / byte count less prefix |
156 4: movl %eax,%ecx / byte count less prefix |
157 andl $3,%ecx / suffix byte count |
157 5: andl $3,%ecx / suffix byte count |
158 jz 7f / no suffix |
158 jz 7f / no suffix |
159 / copy suffix |
159 / copy suffix |
160 5: xorl %eax,%eax |
160 xorl %eax,%eax |
161 6: movb (%esi,%eax,1),%dl |
161 6: movb (%esi,%eax,1),%dl |
162 movb %dl,(%edi,%eax,1) |
162 movb %dl,(%edi,%eax,1) |
163 addl $1,%eax |
163 addl $1,%eax |
164 subl $1,%ecx |
164 subl $1,%ecx |
165 jnz 6b |
165 jnz 6b |
190 addl %esi,%edi |
190 addl %esi,%edi |
191 jmp 4f |
191 jmp 4f |
192 / copy dwords, aligned or not |
192 / copy dwords, aligned or not |
193 3: rep; smovl |
193 3: rep; smovl |
194 4: movl %eax,%ecx / byte count |
194 4: movl %eax,%ecx / byte count |
195 andl $3,%ecx / suffix byte count |
195 5: andl $3,%ecx / suffix byte count |
196 jz 7f / no suffix |
196 jz 7f / no suffix |
197 / copy suffix |
197 / copy suffix |
198 5: subl %esi,%edi |
198 subl %esi,%edi |
199 addl $3,%esi |
199 addl $3,%esi |
200 6: movb (%esi),%dl |
200 6: movb (%esi),%dl |
201 movb %dl,(%edi,%esi,1) |
201 movb %dl,(%edi,%esi,1) |
202 subl $1,%esi |
202 subl $1,%esi |
203 subl $1,%ecx |
203 subl $1,%ecx |
244 addl %esi,%edi |
244 addl %esi,%edi |
245 jmp 4f |
245 jmp 4f |
246 / copy aligned dwords |
246 / copy aligned dwords |
247 3: rep; smovl |
247 3: rep; smovl |
248 4: movl %eax,%ecx |
248 4: movl %eax,%ecx |
249 andl $3,%ecx |
249 5: andl $3,%ecx |
250 jz 7f |
250 jz 7f |
251 / copy suffix |
251 / copy suffix |
252 5: xorl %eax,%eax |
252 xorl %eax,%eax |
253 6: movb (%esi,%eax,1),%dl |
253 6: movb (%esi,%eax,1),%dl |
254 movb %dl,(%edi,%eax,1) |
254 movb %dl,(%edi,%eax,1) |
255 addl $1,%eax |
255 addl $1,%eax |
256 subl $1,%ecx |
256 subl $1,%ecx |
257 jnz 6b |
257 jnz 6b |
280 subl $4,%esi |
280 subl $4,%esi |
281 subl $1,%ecx |
281 subl $1,%ecx |
282 jnz 3b |
282 jnz 3b |
283 addl %esi,%edi |
283 addl %esi,%edi |
284 4: movl %eax,%ecx |
284 4: movl %eax,%ecx |
285 andl $3,%ecx |
285 5: andl $3,%ecx |
286 jz 7f |
286 jz 7f |
287 5: subl %esi,%edi |
287 subl %esi,%edi |
288 addl $3,%esi |
288 addl $3,%esi |
289 6: movb (%esi),%dl |
289 6: movb (%esi),%dl |
290 movb %dl,(%edi,%esi,1) |
290 movb %dl,(%edi,%esi,1) |
291 subl $1,%esi |
291 subl $1,%esi |
292 subl $1,%ecx |
292 subl $1,%ecx |
316 / align source address at dword address boundary |
316 / align source address at dword address boundary |
317 movl %esi,%eax / original from |
317 movl %esi,%eax / original from |
318 andl $3,%eax / either 0 or 2 |
318 andl $3,%eax / either 0 or 2 |
319 jz 1f / no prefix |
319 jz 1f / no prefix |
320 / copy prefix |
320 / copy prefix |
|
321 subl $1,%ecx |
|
322 jl 5f / zero count |
321 movw (%esi),%dx |
323 movw (%esi),%dx |
322 movw %dx,(%edi) |
324 movw %dx,(%edi) |
323 addl %eax,%esi / %eax == 2 |
325 addl %eax,%esi / %eax == 2 |
324 addl %eax,%edi |
326 addl %eax,%edi |
325 subl $1,%ecx |
|
326 1: movl %ecx,%eax / word count less prefix |
327 1: movl %ecx,%eax / word count less prefix |
327 sarl %ecx / dword count |
328 sarl %ecx / dword count |
328 jz 4f / no dwords to move |
329 jz 4f / no dwords to move |
329 cmpl $32,%ecx |
330 cmpl $32,%ecx |
330 jbe 2f / <= 32 dwords |
331 jbe 2f / <= 32 dwords |
480 popl %edi |
481 popl %edi |
481 popl %esi |
482 popl %esi |
482 ret |
483 ret |
483 .=.+10 |
484 .=.+10 |
484 2: subl %esi,%edi |
485 2: subl %esi,%edi |
|
486 jmp 4f |
485 .align 16 |
487 .align 16 |
486 3: movl (%esi),%edx |
488 3: movl (%esi),%edx |
487 movl %edx,(%edi,%esi,1) |
489 movl %edx,(%edi,%esi,1) |
488 addl $4,%esi |
490 addl $4,%esi |
489 subl $1,%ecx |
491 4: subl $1,%ecx |
490 jnz 3b |
492 jge 3b |
491 popl %edi |
493 popl %edi |
492 popl %esi |
494 popl %esi |
493 ret |
495 ret |
494 ci_CopyLeft: |
496 ci_CopyLeft: |
495 std |
497 std |
496 leal -4(%edi,%ecx,4),%edi / to + count*4 - 4 |
498 leal -4(%edi,%ecx,4),%edi / to + count*4 - 4 |
497 cmpl $32,%ecx |
499 cmpl $32,%ecx |
498 ja 3f / > 32 dwords |
500 ja 4f / > 32 dwords |
499 subl %eax,%edi / eax == from + count*4 - 4 |
501 subl %eax,%edi / eax == from + count*4 - 4 |
|
502 jmp 3f |
500 .align 16 |
503 .align 16 |
501 2: movl (%eax),%edx |
504 2: movl (%eax),%edx |
502 movl %edx,(%edi,%eax,1) |
505 movl %edx,(%edi,%eax,1) |
503 subl $4,%eax |
506 subl $4,%eax |
504 subl $1,%ecx |
507 3: subl $1,%ecx |
505 jnz 2b |
508 jge 2b |
506 cld |
509 cld |
507 popl %edi |
510 popl %edi |
508 popl %esi |
511 popl %esi |
509 ret |
512 ret |
510 3: movl %eax,%esi / from + count*4 - 4 |
513 4: movl %eax,%esi / from + count*4 - 4 |
511 rep; smovl |
514 rep; smovl |
512 cld |
515 cld |
513 popl %edi |
516 popl %edi |
514 popl %esi |
517 popl %esi |
515 ret |
518 ret |