1/* memchr.S 2 * Copyright (C) 2003-2007 Analog Devices Inc., All Rights Reserved. 3 * 4 * This file is subject to the terms and conditions of the GNU Library General 5 * Public License. See the file "COPYING.LIB" in the main directory of this 6 * archive for more details. 7 * 8 * Non-LGPL License also available as part of VisualDSP++ 9 * http://www.analog.com/processors/resources/crosscore/visualDspDevSoftware.html 10 */ 11 12#include <sysdep.h> 13 14/* void *memchr(const void *s, int c, size_t n); 15 * R0 = address (s) 16 * R1 = sought byte (c) 17 * R2 = count (n) 18 * 19 * Returns pointer to located character. 20 */ 21 22.text 23 24.align 2 25 26.weak _memchr 27ENTRY(_memchr) 28 P0 = R0; /* P0 = address */ 29 P2 = R2; /* P2 = count */ 30 R1 = R1.B(Z); 31 CC = R2 == 0; 32 IF CC JUMP .Lfailed; 33 34.Lbytes: 35 LSETUP (.Lbyte_loop_s, .Lbyte_loop_e) LC0=P2; 36 37.Lbyte_loop_s: 38 R3 = B[P0++](Z); 39 CC = R3 == R1; 40 IF CC JUMP .Lfound; 41.Lbyte_loop_e: 42 NOP; 43 44.Lfailed: 45 R0=0; 46 RTS; 47 48.Lfound: 49 R0 = P0; 50 R0 += -1; 51 RTS; 52 53.size _memchr,.-_memchr 54 55libc_hidden_def (memchr) 56