1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 .ident "%Z%%M% %I% %E% SMI" 28 29 .file "%M%" 30 31/ 32/ Wide character wcschr() implementation 33/ 34/ Algorithm based on Solaris 2.6 gen/strchr.s implementation 35/ 36/ .ident "@(#)strchr.s 1.1 92/04/17 SMI" 37/ 38 39#include <sys/asm_linkage.h> 40 41 ANSI_PRAGMA_WEAK(wcschr,function) 42 ANSI_PRAGMA_WEAK(wschr,function) 43 44#include "SYS.h" 45 46 .align 8 / accounts for .loop alignment and prolog 47 48 ENTRY(_wcschr) 49 movl 4(%esp),%eax / %eax = string address 50 movl 8(%esp),%ecx / %ecx = wchar sought 51.loop: 52 movl (%eax),%edx / %edx = wchar of string 53 cmpl %ecx,%edx / find it? 54 je .found / yes 55 testl %edx,%edx / is it null? 56 je .notfound 57 58 movl 4(%eax),%edx / %edx = wchar of string 59 cmpl %ecx,%edx / find it? 60 je .found1 / yes 61 testl %edx,%edx / is it null? 62 je .notfound 63 64 movl 8(%eax),%edx / %edx = wchar of string 65 cmpl %ecx,%edx / find it? 66 je .found2 / yes 67 testl %edx,%edx / is it null? 68 je .notfound 69 70 movl 12(%eax),%edx / %edx = wchar of string 71 cmpl %ecx,%edx / find it? 72 je .found3 / yes 73 addl $16,%eax 74 testl %edx,%edx / is it null? 75 jne .loop 76 77.notfound: 78 xorl %eax,%eax / %eax = NULL 79 ret 80 81.found3: 82 addl $12,%eax 83 ret 84.found2: 85 addl $8,%eax 86 ret 87.found1: 88 addl $4,%eax 89.found: 90 ret 91 SET_SIZE(_wcschr) 92 93 ENTRY(_wschr) 94 _prologue_ 95 movl _esp_(8),%eax 96 movl _esp_(4),%edx 97 pushl %eax 98 pushl %edx 99 call _fref_(_wcschr) 100 addl $8,%esp 101 _epilogue_ 102 ret 103 SET_SIZE(_wschr) 104