Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
memscan.S
Package: linux-2.4.20.tar.gz [view]
Upload User: jlfgdled
Upload Date: 2013-04-10
Package Size: 33168k
Code Size: 2k
Category:
Linux-Unix program
Development Platform:
Unix_Linux
- /* $Id: memscan.S,v 1.4 1996/09/08 02:01:20 davem Exp $
- * memscan.S: Optimized memscan for the Sparc.
- *
- * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
- */
- #include <asm/cprefix.h>
- /* In essence, this is just a fancy strlen. */
- #define LO_MAGIC 0x01010101
- #define HI_MAGIC 0x80808080
- .text
- .align 4
- .globl C_LABEL(__memscan_zero), C_LABEL(__memscan_generic)
- .globl C_LABEL(memscan)
- C_LABEL(__memscan_zero):
- /* %o0 = addr, %o1 = size */
- cmp %o1, 0
- bne,a 1f
- andcc %o0, 3, %g0
- retl
- nop
- 1:
- be mzero_scan_word
- sethi %hi(HI_MAGIC), %g2
- ldsb [%o0], %g3
- mzero_still_not_word_aligned:
- cmp %g3, 0
- bne 1f
- add %o0, 1, %o0
- retl
- sub %o0, 1, %o0
- 1:
- subcc %o1, 1, %o1
- bne,a 1f
- andcc %o0, 3, %g0
- retl
- nop
- 1:
- bne,a mzero_still_not_word_aligned
- ldsb [%o0], %g3
- sethi %hi(HI_MAGIC), %g2
- mzero_scan_word:
- or %g2, %lo(HI_MAGIC), %o3
- sethi %hi(LO_MAGIC), %g3
- or %g3, %lo(LO_MAGIC), %o2
- mzero_next_word:
- ld [%o0], %g2
- mzero_next_word_preloaded:
- sub %g2, %o2, %g2
- mzero_next_word_preloaded_next:
- andcc %g2, %o3, %g0
- bne mzero_byte_zero
- add %o0, 4, %o0
- mzero_check_out_of_fuel:
- subcc %o1, 4, %o1
- bg,a 1f
- ld [%o0], %g2
- retl
- nop
- 1:
- b mzero_next_word_preloaded_next
- sub %g2, %o2, %g2
- /* Check every byte. */
- mzero_byte_zero:
- ldsb [%o0 - 4], %g2
- cmp %g2, 0
- bne mzero_byte_one
- sub %o0, 4, %g3
- retl
- mov %g3, %o0
- mzero_byte_one:
- ldsb [%o0 - 3], %g2
- cmp %g2, 0
- bne,a mzero_byte_two_and_three
- ldsb [%o0 - 2], %g2
- retl
- sub %o0, 3, %o0
- mzero_byte_two_and_three:
- cmp %g2, 0
- bne,a 1f
- ldsb [%o0 - 1], %g2
- retl
- sub %o0, 2, %o0
- 1:
- cmp %g2, 0
- bne,a mzero_next_word_preloaded
- ld [%o0], %g2
- retl
- sub %o0, 1, %o0
- mzero_found_it:
- retl
- sub %o0, 2, %o0
- C_LABEL(memscan):
- C_LABEL(__memscan_generic):
- /* %o0 = addr, %o1 = c, %o2 = size */
- cmp %o2, 0
- bne,a 0f
- ldub [%o0], %g2
- b,a 2f
- 1:
- ldub [%o0], %g2
- 0:
- cmp %g2, %o1
- be 2f
- addcc %o2, -1, %o2
- bne 1b
- add %o0, 1, %o0
- 2:
- retl
- nop