Lines Matching +full:byte +full:- +full:len

1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
12 * and length from 0 to 2^32-1
17 * For blocks less than 16 bytes a byte by byte copy is performed. For
18 * 8byte alignments, and length multiples, a dword copy is performed up to
23 * DJH 6/ 1/09 Version 1.1 modified ABI to inlcude R16-R19
30 * 1 32byte chunk from kernel loop and extended 8byte
37 * byte, added detection for this and fixed. A
52 * void * memcpy(char * ptr_out, char * ptr_in, int len) {
63 * ptr8_in = (s64 *) &ptr_in[-offset]; //read in the aligned pointers
70 * prolog = 32 - ((int) ptr_out);
71 * mask = 0x7fffffff >> HEXAGON_R_cl0_R(len);
73 * kernel = len - prolog;
97 * if(kernel) { kernel -= 1; epilog += 32; }
130 * return(ptr_out - length);
139 #define len R2 /* length of copy in bytes */ macro
141 #define data70 R13:12 /* lo 8 bytes of non-aligned transfer */
142 #define dataF8 R11:10 /* hi 8 bytes of non-aligned transfer */
151 #define noprolog p0 /* no prolog, xfer starts at 32byte */
152 #define nokernel p1 /* no 32byte multiple block in the transfer */
153 #define noepilog p0 /* no epilog, xfer ends on 32byte boundary */
154 #define align p2 /* alignment of input rel to 8byte boundary */
158 #define star3 R16 /* number bytes in prolog - dwords */
159 #define rest R8 /* length - prolog bytes */
162 #define inc R15:14 /* inc kernel by -1 and defetch ptr by 32 */
163 #define kernel R4 /* number of 32byte chunks in kernel */
185 p2 = cmp.eq(len, #0); /* =0 */
187 p0 = cmp.gtu(len, #23); /* %1, <24 */
192 p3 = cmp.gtu(len, #95); /* %8 < 97 */
193 align888 = or(align888, len); /* %8 < 97 */
194 len8 = lsr(len, #3); /* %8 < 97 */
203 if (p2.new) len = add(len, #-8); /* %8 < 97 */
217 back = cl0(len);
232 over = add(len, ptr_in);
233 back = add(len, offset);
243 kernel = sub(len, prolog);
246 ptr_in = and(ptr_in, #-8);
321 rest = sub(len, star3); /* whats left after the loop */
334 rest = add(rest, #-8);
341 if(p3.new) kernel = add(kernel, #-1);
348 inc = combine(#32, #-1);
370 /* kernel -= 1 */
401 rest = add(kernel, #-1);
442 if(noepilog) ptr_out = sub(ptr_out, len);
450 if(!p3) epilog = add(epilog, #-16);
470 epilog = add(epilog, #-8);
484 if(ifbyte.new) len = add(len, #-1);
488 ptr_out = sub(ptr_out, len); /* return dest pointer */
491 /* do byte copy for small n */
494 p3 = sp1loop0(.Lbyte_copy, len);
495 len = add(len, #-1); define
504 ptr_out = sub(ptr_out, len);
519 ptr_out = sub(ptr_out, len);