Lines Matching +full:y +full:- +full:rp

1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Itanium 2-optimized version of memcpy and copy_user function
21 #define EK(y...) EX(y) argument
39 /* r19-r30 are temp for each code section */
110 // both dest and src are aligned on 8-byte boundary
113 alloc saved_pfs=ar.pfs,3,Nrot-3,0,Nrot
124 add cnt=-1,cnt
141 shr.u r29=in2,5 // number of 32-byte iteration
144 add cnt=-1,r29 // ctop iteration adjustment
175 and r21=-8,tmp
185 mov pr=saved_pr,-1
204 mov ar.lc = 2*PREFETCH_DIST - 1
211 add cnt = -(2*PREFETCH_DIST) - 1, cnt
212 // same as .line_copy loop, but with all predicated-off instructions removed:
265 add dst0=-8,dst0
266 add src0=-8,src0
276 // dest is on 8-byte boundary, src is not. We need to do
277 // ld8-ld8, shrp, then st8. Max 8 byte copy per cycle.
298 shr.u r22=in2,4 // number of 16-byte iteration
303 add cnt=-1,r21
308 and src0=-8,src0 // 1st src pointer
322 add cnt=-1,r22 // ctop iteration adjustment
340 add r29=.jump_table - 1b - (.jmp1-.jump_table), r29
351 // for 8-15 byte case
382 * xxxxxx xx <----- r21 has xxxxxxxx already
383 * -------- -------- --------
390 * -------- -------- --------
396 (p6) add curlen=-8,curlen // update length
400 mov pr=saved_pr,-1
418 (p9) br.ret.dpnt rp // 0 byte copy
423 (p11) br.ret.dpnt rp // 1 byte copy
427 (p13) br.ret.dpnt rp // 2 byte copy
436 (p15) br.ret.dpnt rp // 3 byte copy
441 (p7) br.ret.dpnt rp // 4 byte copy
446 (p9) br.ret.dptk rp // 5 byte copy
449 (p11) br.ret.dptk rp // 6 byte copy
453 br.ret.dptk rp // done all cases
456 /* Align dest to nearest 8-byte boundary. We know we have at
457 * least 7 bytes to copy, enough to crawl to 8-byte boundary.
461 * src0 - source even index
462 * src1 - source odd index
463 * dst0 - dest even index
464 * dst1 - dest odd index
465 * r30 - distance to 8-byte boundary
514 (p7) add src1=-8,src1; /* back out for <8 byte case */ \
549 * p6-p7: direction
550 * p10-p11: src faulting addr calculation
551 * p12-p13: dst faulting addr calculation
590 mov pr=saved_pr,-1 // first restore pr, lc, and pfs
613 (p14) br.ret.sptk.many rp
618 * A = (faulting_addr - orig_src) -> len to faulting ld address
620 * (faulting_addr - orig_dst) -> len to faulting st address
621 * B = (cur_dst - orig_dst) -> len copied so far
622 * C = A - B -> len need to be copied
623 * D = orig_len - A -> len need to be left along
649 add saved_retval=saved_retval,r8 // above might return non-zero value
655 br.ret.sptk.many rp