mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Use portable comments in assembler files
Docs/manual.texi: Updated autoconf information
This commit is contained in:
@@ -566,7 +566,8 @@ a commercial memory leakage detector.
|
|||||||
@item
|
@item
|
||||||
Works on many different platforms. @xref{Which OS}.
|
Works on many different platforms. @xref{Which OS}.
|
||||||
@item
|
@item
|
||||||
Uses GNU Automake, Autoconf (Ver 2.52 or newer), and Libtool for portability.
|
Uses GNU Automake (1.4), Autoconf (Ver 2.52 or newer), and Libtool for
|
||||||
|
portability.
|
||||||
@item
|
@item
|
||||||
APIs for C, C++, Eiffel, Java, Perl, PHP, Python and Tcl. @xref{Clients}.
|
APIs for C, C++, Eiffel, Java, Perl, PHP, Python and Tcl. @xref{Clients}.
|
||||||
@item
|
@item
|
||||||
@@ -7015,11 +7016,10 @@ The initial download of the source tree may take a while, depending on the
|
|||||||
speed of your connection; be patient.
|
speed of your connection; be patient.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
You will need GNU @code{autoconf 2.13}, @code{automake 1.4},
|
You will need GNU @code{autoconf 2.52}, @code{automake 1.4},
|
||||||
@code{libtool}, and @code{m4} to run the next set of commands.
|
@code{libtool}, and @code{m4} to run the next set of commands.
|
||||||
|
|
||||||
If you are using the 3.23 tree the new versions of @code{autoconf}
|
@code{automake} (1.5) doesn't yet work.
|
||||||
(2.52) and @code{automake} (1.5) will not work.
|
|
||||||
|
|
||||||
If you get some strange error during this stage, check that you really
|
If you get some strange error during this stage, check that you really
|
||||||
have @code{libtool} installed!
|
have @code{libtool} installed!
|
||||||
@@ -13707,6 +13707,13 @@ tell @code{mysql} to read its input from the file:
|
|||||||
shell> mysql < batch-file
|
shell> mysql < batch-file
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
If you are running @code{mysql} under windows and have some special
|
||||||
|
characters in the file that causes problems, you can do:
|
||||||
|
|
||||||
|
@example
|
||||||
|
dos> mysql -e "source batch-file"
|
||||||
|
@end example
|
||||||
|
|
||||||
If you need to specify connection parameters on the command line, the
|
If you need to specify connection parameters on the command line, the
|
||||||
command might look like this:
|
command might look like this:
|
||||||
|
|
||||||
@@ -13718,6 +13725,9 @@ Enter password: ********
|
|||||||
When you use @code{mysql} this way, you are creating a script file, then
|
When you use @code{mysql} this way, you are creating a script file, then
|
||||||
executing the script.
|
executing the script.
|
||||||
|
|
||||||
|
If you want the script to continue even if you have errors, you should
|
||||||
|
use the @code{--force} command line option.
|
||||||
|
|
||||||
Why use a script? Here are a few reasons:
|
Why use a script? Here are a few reasons:
|
||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@@ -13791,6 +13801,12 @@ If you want to get the interactive output format in batch mode, use
|
|||||||
@code{mysql -t}. To echo to the output the commands that are executed, use
|
@code{mysql -t}. To echo to the output the commands that are executed, use
|
||||||
@code{mysql -vvv}.
|
@code{mysql -vvv}.
|
||||||
|
|
||||||
|
You can also use scripts in the @code{mysql} command line prompt by
|
||||||
|
using the @code{source} command:
|
||||||
|
|
||||||
|
@example
|
||||||
|
mysql> source filename
|
||||||
|
@end example
|
||||||
|
|
||||||
@node Twin, Apache, Batch mode, Tutorial
|
@node Twin, Apache, Batch mode, Tutorial
|
||||||
@section Queries from Twin Project
|
@section Queries from Twin Project
|
||||||
|
@@ -1,18 +1,17 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
# Copyright (C) 2000 MySQL AB
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
This program is free software; you can redistribute it and/or modify
|
# it under the terms of the GNU General Public License as published by
|
||||||
it under the terms of the GNU General Public License as published by
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
# (at your option) any later version.
|
||||||
(at your option) any later version.
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
This program is distributed in the hope that it will be useful,
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# GNU General Public License for more details.
|
||||||
GNU General Public License for more details.
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
You should have received a copy of the GNU General Public License
|
# along with this program; if not, write to the Free Software
|
||||||
along with this program; if not, write to the Free Software
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
||||||
|
|
||||||
# Optimized longlong2str function for Intel 80x86 (gcc/gas syntax)
|
# Optimized longlong2str function for Intel 80x86 (gcc/gas syntax)
|
||||||
# Some set sequences are optimized for pentuimpro II
|
# Some set sequences are optimized for pentuimpro II
|
||||||
|
@@ -1,38 +1,37 @@
|
|||||||
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
# Copyright (C) 2000 MySQL AB
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
This program is free software; you can redistribute it and/or modify
|
# it under the terms of the GNU General Public License as published by
|
||||||
it under the terms of the GNU General Public License as published by
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
# (at your option) any later version.
|
||||||
(at your option) any later version.
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
This program is distributed in the hope that it will be useful,
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# GNU General Public License for more details.
|
||||||
GNU General Public License for more details.
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
You should have received a copy of the GNU General Public License
|
# along with this program; if not, write to the Free Software
|
||||||
along with this program; if not, write to the Free Software
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
||||||
|
|
||||||
/* Optimized string functions Intel 80x86 (gcc/gas syntax) */
|
# Optimized string functions Intel 80x86 (gcc/gas syntax)
|
||||||
|
|
||||||
.file "strings.s"
|
.file "strings.s"
|
||||||
.version "1.00"
|
.version "1.00"
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
/* Move a alligned, not overlapped, by (long) divided memory area */
|
# Move a alligned, not overlapped, by (long) divided memory area
|
||||||
/* Args: to,from,length */
|
# Args: to,from,length
|
||||||
|
|
||||||
.globl bmove_allign
|
.globl bmove_allign
|
||||||
.type bmove_allign,@function
|
.type bmove_allign,@function
|
||||||
bmove_allign:
|
bmove_allign:
|
||||||
movl %edi,%edx
|
movl %edi,%edx
|
||||||
movl %esi,%eax
|
movl %esi,%eax
|
||||||
movl 4(%esp),%edi /* to */
|
movl 4(%esp),%edi # to
|
||||||
movl 8(%esp),%esi /* from */
|
movl 8(%esp),%esi # from
|
||||||
movl 12(%esp),%ecx /* length */
|
movl 12(%esp),%ecx # length
|
||||||
addw $3,%cx /* fix if not divisible with long */
|
addw $3,%cx # fix if not divisible with long
|
||||||
shrw $2,%cx
|
shrw $2,%cx
|
||||||
rep
|
rep
|
||||||
movsl
|
movsl
|
||||||
@@ -42,198 +41,198 @@ bmove_allign:
|
|||||||
.end:
|
.end:
|
||||||
.size bmove_allign,.end-bmove_allign
|
.size bmove_allign,.end-bmove_allign
|
||||||
|
|
||||||
/* Move a string from higher to lower */
|
# Move a string from higher to lower
|
||||||
/* Arg from+1,to+1,length */
|
# Arg from+1,to+1,length
|
||||||
|
|
||||||
.globl bmove_upp
|
.globl bmove_upp
|
||||||
.type bmove_upp,@function
|
.type bmove_upp,@function
|
||||||
bmove_upp:
|
bmove_upp:
|
||||||
std /* Work downward */
|
std # Work downward
|
||||||
movl %edi,%edx
|
movl %edi,%edx
|
||||||
movl %esi,%eax
|
movl %esi,%eax
|
||||||
movl 4(%esp),%edi /* p1 */
|
movl 4(%esp),%edi # p1
|
||||||
movl 8(%esp),%esi /* p2 */
|
movl 8(%esp),%esi # p2
|
||||||
movl 12(%esp),%ecx /* length */
|
movl 12(%esp),%ecx # length
|
||||||
decl %edi /* Don't move last arg */
|
decl %edi # Don't move last arg
|
||||||
decl %esi
|
decl %esi
|
||||||
rep
|
rep
|
||||||
movsb /* One byte a time because overlap */
|
movsb # One byte a time because overlap
|
||||||
cld /* C library wants cld */
|
cld # C library wants cld
|
||||||
movl %eax,%esi
|
movl %eax,%esi
|
||||||
movl %edx,%edi
|
movl %edx,%edi
|
||||||
ret
|
ret
|
||||||
.bmove_upp_end:
|
.bmove_upp_end:
|
||||||
.size bmove_upp,.bmove_upp_end-bmove_upp
|
.size bmove_upp,.bmove_upp_end-bmove_upp
|
||||||
|
|
||||||
/* Append fillchars to string */
|
# Append fillchars to string
|
||||||
/* Args: dest,len,fill */
|
# Args: dest,len,fill
|
||||||
|
|
||||||
.globl strappend
|
.globl strappend
|
||||||
.type strappend,@function
|
.type strappend,@function
|
||||||
strappend:
|
strappend:
|
||||||
pushl %edi
|
pushl %edi
|
||||||
movl 8(%esp),%edi /* Memory pointer */
|
movl 8(%esp),%edi # Memory pointer
|
||||||
movl 12(%esp),%ecx /* Length */
|
movl 12(%esp),%ecx # Length
|
||||||
clrl %eax /* Find end of string */
|
clrl %eax # Find end of string
|
||||||
repne
|
repne
|
||||||
scasb
|
scasb
|
||||||
jnz sa_99 /* String to long, shorten it */
|
jnz sa_99 # String to long, shorten it
|
||||||
movzb 16(%esp),%eax /* Fillchar */
|
movzb 16(%esp),%eax # Fillchar
|
||||||
decl %edi /* Point at end null */
|
decl %edi # Point at end null
|
||||||
incl %ecx /* rep made one dec for null-char */
|
incl %ecx # rep made one dec for null-char
|
||||||
|
|
||||||
movb %al,%ah /* (2) Set up a 32 bit pattern. */
|
movb %al,%ah # (2) Set up a 32 bit pattern.
|
||||||
movw %ax,%dx /* (2) */
|
movw %ax,%dx # (2)
|
||||||
shll $16,%eax /* (3) */
|
shll $16,%eax # (3)
|
||||||
movw %dx,%ax /* (2) %eax has the 32 bit pattern. */
|
movw %dx,%ax # (2) %eax has the 32 bit pattern.
|
||||||
|
|
||||||
movl %ecx,%edx /* (2) Save the count of bytes. */
|
movl %ecx,%edx # (2) Save the count of bytes.
|
||||||
shrl $2,%ecx /* (2) Number of dwords. */
|
shrl $2,%ecx # (2) Number of dwords.
|
||||||
rep
|
rep
|
||||||
stosl /* (5 + 5n) */
|
stosl # (5 + 5n)
|
||||||
movb $3,%cl /* (2) */
|
movb $3,%cl # (2)
|
||||||
and %edx,%ecx /* (2) Fill in the odd bytes*/
|
and %edx,%ecx # (2) Fill in the odd bytes
|
||||||
rep
|
rep
|
||||||
stosb /* Move last bytes if any */
|
stosb # Move last bytes if any
|
||||||
|
|
||||||
sa_99: movb $0,(%edi) /* End of string */
|
sa_99: movb $0,(%edi) # End of string
|
||||||
popl %edi
|
popl %edi
|
||||||
ret
|
ret
|
||||||
.strappend_end:
|
.strappend_end:
|
||||||
.size strappend,.strappend_end-strappend
|
.size strappend,.strappend_end-strappend
|
||||||
|
|
||||||
/* Find if string contains any char in another string */
|
# Find if string contains any char in another string
|
||||||
/* Arg: str,set */
|
# Arg: str,set
|
||||||
/* Ret: Pointer to first found char in str */
|
# Ret: Pointer to first found char in str
|
||||||
|
|
||||||
.globl strcont
|
.globl strcont
|
||||||
.type strcont,@function
|
.type strcont,@function
|
||||||
strcont:
|
strcont:
|
||||||
movl %edi,%edx
|
movl %edi,%edx
|
||||||
pushl %esi
|
pushl %esi
|
||||||
movl 8(%esp),%esi /* str */
|
movl 8(%esp),%esi # str
|
||||||
movl 12(%esp),%ecx /* set */
|
movl 12(%esp),%ecx # set
|
||||||
clrb %ah /* For endtest */
|
clrb %ah # For endtest
|
||||||
jmp sc_60
|
jmp sc_60
|
||||||
|
|
||||||
sc_10: scasb
|
sc_10: scasb
|
||||||
jz sc_fo /* Found char */
|
jz sc_fo # Found char
|
||||||
sc_20: cmp (%edi),%ah /* Test if null */
|
sc_20: cmp (%edi),%ah # Test if null
|
||||||
jnz sc_10 /* Not end of set yet */
|
jnz sc_10 # Not end of set yet
|
||||||
incl %esi /* Next char in str */
|
incl %esi # Next char in str
|
||||||
sc_60: movl %ecx,%edi /* %edi = Set */
|
sc_60: movl %ecx,%edi # %edi = Set
|
||||||
movb (%esi),%al /* Test if this char exist */
|
movb (%esi),%al # Test if this char exist
|
||||||
andb %al,%al
|
andb %al,%al
|
||||||
jnz sc_20 /* Not end of string */
|
jnz sc_20 # Not end of string
|
||||||
clrl %esi /* Return Null */
|
clrl %esi # Return Null
|
||||||
sc_fo: movl %esi,%eax /* Char found here */
|
sc_fo: movl %esi,%eax # Char found here
|
||||||
movl %edx,%edi /* Restore */
|
movl %edx,%edi # Restore
|
||||||
popl %esi
|
popl %esi
|
||||||
ret
|
ret
|
||||||
.strcont_end:
|
.strcont_end:
|
||||||
.size strcont,.strcont_end-strcont
|
.size strcont,.strcont_end-strcont
|
||||||
|
|
||||||
/* Find end of string */
|
# Find end of string
|
||||||
/* Arg: str */
|
# Arg: str
|
||||||
/* ret: Pointer to end null */
|
# ret: Pointer to end null
|
||||||
|
|
||||||
.globl strend
|
.globl strend
|
||||||
.type strend,@function
|
.type strend,@function
|
||||||
strend:
|
strend:
|
||||||
movl %edi,%edx /* Save */
|
movl %edi,%edx # Save
|
||||||
movl 4(%esp),%edi /* str */
|
movl 4(%esp),%edi # str
|
||||||
clrl %eax /* Find end of string */
|
clrl %eax # Find end of string
|
||||||
movl %eax,%ecx
|
movl %eax,%ecx
|
||||||
decl %ecx /* ECX = -1 */
|
decl %ecx # ECX = -1
|
||||||
repne
|
repne
|
||||||
scasb
|
scasb
|
||||||
movl %edi,%eax
|
movl %edi,%eax
|
||||||
decl %eax /* End of string */
|
decl %eax # End of string
|
||||||
movl %edx,%edi /* Restore */
|
movl %edx,%edi # Restore
|
||||||
ret
|
ret
|
||||||
.strend_end:
|
.strend_end:
|
||||||
.size strend,.strend_end-strend
|
.size strend,.strend_end-strend
|
||||||
|
|
||||||
/* Make a string with len fill-chars and endnull */
|
# Make a string with len fill-chars and endnull
|
||||||
/* Args: dest,len,fill */
|
# Args: dest,len,fill
|
||||||
/* Ret: dest+len */
|
# Ret: dest+len
|
||||||
|
|
||||||
.globl strfill
|
.globl strfill
|
||||||
.type strfill,@function
|
.type strfill,@function
|
||||||
strfill:
|
strfill:
|
||||||
pushl %edi
|
pushl %edi
|
||||||
movl 8(%esp),%edi /* Memory pointer */
|
movl 8(%esp),%edi # Memory pointer
|
||||||
movl 12(%esp),%ecx /* Length */
|
movl 12(%esp),%ecx # Length
|
||||||
movzb 16(%esp),%eax /* Fill */
|
movzb 16(%esp),%eax # Fill
|
||||||
|
|
||||||
movb %al,%ah /* (2) Set up a 32 bit pattern */
|
movb %al,%ah # (2) Set up a 32 bit pattern
|
||||||
movw %ax,%dx /* (2) */
|
movw %ax,%dx # (2)
|
||||||
shll $16,%eax /* (3) */
|
shll $16,%eax # (3)
|
||||||
movw %dx,%ax /* (2) %eax has the 32 bit pattern. */
|
movw %dx,%ax # (2) %eax has the 32 bit pattern.
|
||||||
|
|
||||||
movl %ecx,%edx /* (2) Save the count of bytes. */
|
movl %ecx,%edx # (2) Save the count of bytes.
|
||||||
shrl $2,%ecx /* (2) Number of dwords. */
|
shrl $2,%ecx # (2) Number of dwords.
|
||||||
rep
|
rep
|
||||||
stosl /* (5 + 5n) */
|
stosl # (5 + 5n)
|
||||||
movb $3,%cl /* (2) */
|
movb $3,%cl # (2)
|
||||||
and %edx,%ecx /* (2) Fill in the odd bytes */
|
and %edx,%ecx # (2) Fill in the odd bytes
|
||||||
rep
|
rep
|
||||||
stosb /* Move last bytes if any */
|
stosb # Move last bytes if any
|
||||||
|
|
||||||
movb %cl,(%edi) /* End NULL */
|
movb %cl,(%edi) # End NULL
|
||||||
movl %edi,%eax /* End i %eax */
|
movl %edi,%eax # End i %eax
|
||||||
popl %edi
|
popl %edi
|
||||||
ret
|
ret
|
||||||
.strfill_end:
|
.strfill_end:
|
||||||
.size strfill,.strfill_end-strfill
|
.size strfill,.strfill_end-strfill
|
||||||
|
|
||||||
|
|
||||||
/* Find a char in or end of a string */
|
# Find a char in or end of a string
|
||||||
/* Arg: str,char */
|
# Arg: str,char
|
||||||
/* Ret: pointer to found char or NullS */
|
# Ret: pointer to found char or NullS
|
||||||
|
|
||||||
.globl strcend
|
.globl strcend
|
||||||
.type strcend,@function
|
.type strcend,@function
|
||||||
strcend:
|
strcend:
|
||||||
movl %edi,%edx
|
movl %edi,%edx
|
||||||
movl 4(%esp),%edi /* str */
|
movl 4(%esp),%edi # str
|
||||||
movb 8(%esp),%ah /* search */
|
movb 8(%esp),%ah # search
|
||||||
clrb %al /* for scasb to find end */
|
clrb %al # for scasb to find end
|
||||||
|
|
||||||
se_10: cmpb (%edi),%ah
|
se_10: cmpb (%edi),%ah
|
||||||
jz se_20 /* Found char */
|
jz se_20 # Found char
|
||||||
scasb
|
scasb
|
||||||
jnz se_10 /* Not end */
|
jnz se_10 # Not end
|
||||||
dec %edi /* Not found, point at end of string */
|
dec %edi # Not found, point at end of string
|
||||||
se_20: movl %edi,%eax
|
se_20: movl %edi,%eax
|
||||||
movl %edx,%edi /* Restore */
|
movl %edx,%edi # Restore
|
||||||
ret
|
ret
|
||||||
.strcend_end:
|
.strcend_end:
|
||||||
.size strcend,.strcend_end-strcend
|
.size strcend,.strcend_end-strcend
|
||||||
|
|
||||||
/* Test if string has a given suffix */
|
# Test if string has a given suffix
|
||||||
|
|
||||||
.globl is_prefix
|
.globl is_prefix
|
||||||
.type is_prefix,@function
|
.type is_prefix,@function
|
||||||
is_prefix:
|
is_prefix:
|
||||||
movl %edi,%edx /* Save %edi */
|
movl %edi,%edx # Save %edi
|
||||||
pushl %esi /* and %esi */
|
pushl %esi # and %esi
|
||||||
movl 12(%esp),%esi /* get suffix */
|
movl 12(%esp),%esi # get suffix
|
||||||
movl 8(%esp),%edi /* s1 */
|
movl 8(%esp),%edi # s1
|
||||||
movl $1,%eax /* Ok and zero-test */
|
movl $1,%eax # Ok and zero-test
|
||||||
ip_10: cmpb (%esi),%ah
|
ip_10: cmpb (%esi),%ah
|
||||||
jz suf_ok /* End of string/ found suffix */
|
jz suf_ok # End of string/ found suffix
|
||||||
cmpsb /* Compare strings */
|
cmpsb # Compare strings
|
||||||
jz ip_10 /* Same, possible prefix */
|
jz ip_10 # Same, possible prefix
|
||||||
xor %eax,%eax /* Not suffix */
|
xor %eax,%eax # Not suffix
|
||||||
suf_ok: popl %esi
|
suf_ok: popl %esi
|
||||||
movl %edx,%edi
|
movl %edx,%edi
|
||||||
ret
|
ret
|
||||||
.is_prefix_end:
|
.is_prefix_end:
|
||||||
.size is_prefix,.is_prefix_end-is_prefix
|
.size is_prefix,.is_prefix_end-is_prefix
|
||||||
|
|
||||||
/* Find a substring in string */
|
# Find a substring in string
|
||||||
/* Arg: str,search */
|
# Arg: str,search
|
||||||
|
|
||||||
.globl strstr
|
.globl strstr
|
||||||
.type strstr,@function
|
.type strstr,@function
|
||||||
@@ -241,31 +240,31 @@ suf_ok: popl %esi
|
|||||||
strstr:
|
strstr:
|
||||||
pushl %edi
|
pushl %edi
|
||||||
pushl %esi
|
pushl %esi
|
||||||
movl 12(%esp),%esi /* str */
|
movl 12(%esp),%esi # str
|
||||||
movl 16(%esp),%edi /* search */
|
movl 16(%esp),%edi # search
|
||||||
movl %edi,%ecx
|
movl %edi,%ecx
|
||||||
incl %ecx /* %ecx = search+1 */
|
incl %ecx # %ecx = search+1
|
||||||
movb (%edi),%ah /* %ah = First char in search */
|
movb (%edi),%ah # %ah = First char in search
|
||||||
jmp sf_10
|
jmp sf_10
|
||||||
|
|
||||||
sf_00: movl %edx,%esi /* si = Current str-pos */
|
sf_00: movl %edx,%esi # si = Current str-pos
|
||||||
sf_10: movb (%esi),%al /* Test if this char exist */
|
sf_10: movb (%esi),%al # Test if this char exist
|
||||||
andb %al,%al
|
andb %al,%al
|
||||||
jz sf_90 /* End of string, didn't find search */
|
jz sf_90 # End of string, didn't find search
|
||||||
incl %esi
|
incl %esi
|
||||||
cmpb %al,%ah
|
cmpb %al,%ah
|
||||||
jnz sf_10 /* Didn't find first char, continue */
|
jnz sf_10 # Didn't find first char, continue
|
||||||
movl %esi,%edx /* Save str-pos in %edx */
|
movl %esi,%edx # Save str-pos in %edx
|
||||||
movl %ecx,%edi
|
movl %ecx,%edi
|
||||||
sf_20: cmpb $0,(%edi)
|
sf_20: cmpb $0,(%edi)
|
||||||
jz sf_fo /* Found substring */
|
jz sf_fo # Found substring
|
||||||
cmpsb
|
cmpsb
|
||||||
jz sf_20 /* Char ok */
|
jz sf_20 # Char ok
|
||||||
jmp sf_00 /* Next str-pos */
|
jmp sf_00 # Next str-pos
|
||||||
|
|
||||||
sf_90: movl $1,%edx /* Return Null */
|
sf_90: movl $1,%edx # Return Null
|
||||||
sf_fo: movl %edx,%eax /* Char found here */
|
sf_fo: movl %edx,%eax # Char found here
|
||||||
decl %eax /* Pointed one after */
|
decl %eax # Pointed one after
|
||||||
popl %esi
|
popl %esi
|
||||||
popl %edi
|
popl %edi
|
||||||
ret
|
ret
|
||||||
@@ -273,8 +272,8 @@ sf_fo: movl %edx,%eax /* Char found here */
|
|||||||
.size strstr,.strstr_end-strstr
|
.size strstr,.strstr_end-strstr
|
||||||
|
|
||||||
|
|
||||||
/* Find a substring in string, return index */
|
# Find a substring in string, return index
|
||||||
/* Arg: str,search */
|
# Arg: str,search
|
||||||
|
|
||||||
.globl strinstr
|
.globl strinstr
|
||||||
.type strinstr,@function
|
.type strinstr,@function
|
||||||
@@ -282,22 +281,22 @@ sf_fo: movl %edx,%eax /* Char found here */
|
|||||||
strinstr:
|
strinstr:
|
||||||
pushl %ebp
|
pushl %ebp
|
||||||
movl %esp,%ebp
|
movl %esp,%ebp
|
||||||
pushl 12(%ebp) /* search */
|
pushl 12(%ebp) # search
|
||||||
pushl 8(%ebp) /* str */
|
pushl 8(%ebp) # str
|
||||||
call strstr
|
call strstr
|
||||||
add $8,%esp
|
add $8,%esp
|
||||||
or %eax,%eax
|
or %eax,%eax
|
||||||
jz si_99 /* Not found, return NULL */
|
jz si_99 # Not found, return NULL
|
||||||
sub 8(%ebp),%eax /* Pos from start */
|
sub 8(%ebp),%eax # Pos from start
|
||||||
inc %eax /* And first pos = 1 */
|
inc %eax # And first pos = 1
|
||||||
si_99: popl %ebp
|
si_99: popl %ebp
|
||||||
ret
|
ret
|
||||||
.strinstr_end:
|
.strinstr_end:
|
||||||
.size strinstr,.strinstr_end-strinstr
|
.size strinstr,.strinstr_end-strinstr
|
||||||
|
|
||||||
/* Make a string of len length from another string */
|
# Make a string of len length from another string
|
||||||
/* Arg: dst,src,length */
|
# Arg: dst,src,length
|
||||||
/* ret: end of dst */
|
# ret: end of dst
|
||||||
|
|
||||||
.globl strmake
|
.globl strmake
|
||||||
.type strmake,@function
|
.type strmake,@function
|
||||||
@@ -305,48 +304,48 @@ si_99: popl %ebp
|
|||||||
strmake:
|
strmake:
|
||||||
pushl %edi
|
pushl %edi
|
||||||
pushl %esi
|
pushl %esi
|
||||||
movl 12(%esp),%edi /* dst */
|
movl 12(%esp),%edi # dst
|
||||||
movl 16(%esp),%esi /* src */
|
movl 16(%esp),%esi # src
|
||||||
movl 20(%esp),%ecx /* Length of memory-area */
|
movl 20(%esp),%ecx # Length of memory-area
|
||||||
clrb %al /* For test of end-null */
|
clrb %al # For test of end-null
|
||||||
jecxz sm_90 /* Nothing to move, put zero at end. */
|
jecxz sm_90 # Nothing to move, put zero at end.
|
||||||
|
|
||||||
sm_10: cmpb (%esi),%al /* Next char to move */
|
sm_10: cmpb (%esi),%al # Next char to move
|
||||||
movsb /* move arg */
|
movsb # move arg
|
||||||
jz sm_99 /* last char, we are ready */
|
jz sm_99 # last char, we are ready
|
||||||
loop sm_10 /* Continue moving */
|
loop sm_10 # Continue moving
|
||||||
sm_90: movb %al,(%edi) /* Set end pos */
|
sm_90: movb %al,(%edi) # Set end pos
|
||||||
incl %edi /* Fix that di points at end null */
|
incl %edi # Fix that di points at end null
|
||||||
sm_99: decl %edi /* di points now at end null */
|
sm_99: decl %edi # di points now at end null
|
||||||
movl %edi,%eax /* Ret value.p $ */
|
movl %edi,%eax # Ret value.p $
|
||||||
popl %esi
|
popl %esi
|
||||||
popl %edi
|
popl %edi
|
||||||
ret
|
ret
|
||||||
.strmake_end:
|
.strmake_end:
|
||||||
.size strmake,.strmake_end-strmake
|
.size strmake,.strmake_end-strmake
|
||||||
|
|
||||||
/* Move a string with max len chars */
|
# Move a string with max len chars
|
||||||
/* arg: dst,src,len */
|
# arg: dst,src,len
|
||||||
/* ret: pos to first null or dst+len */
|
# ret: pos to first null or dst+len
|
||||||
|
|
||||||
.globl strnmov
|
.globl strnmov
|
||||||
.type strnmov,@function
|
.type strnmov,@function
|
||||||
strnmov:
|
strnmov:
|
||||||
pushl %edi
|
pushl %edi
|
||||||
pushl %esi
|
pushl %esi
|
||||||
movl 12(%esp),%edi /* dst */
|
movl 12(%esp),%edi # dst
|
||||||
movl 16(%esp),%esi /* src */
|
movl 16(%esp),%esi # src
|
||||||
movl 20(%esp),%ecx /* Length of memory-area */
|
movl 20(%esp),%ecx # Length of memory-area
|
||||||
jecxz snm_99 /* Nothing to do */
|
jecxz snm_99 # Nothing to do
|
||||||
clrb %al /* For test of end-null */
|
clrb %al # For test of end-null
|
||||||
|
|
||||||
snm_10: cmpb (%esi),%al /* Next char to move */
|
snm_10: cmpb (%esi),%al # Next char to move
|
||||||
movsb /* move arg */
|
movsb # move arg
|
||||||
jz snm_20 /* last char, fill with null */
|
jz snm_20 # last char, fill with null
|
||||||
loop snm_10 /* Continue moving */
|
loop snm_10 # Continue moving
|
||||||
incl %edi /* Point two after last */
|
incl %edi # Point two after last
|
||||||
snm_20: decl %edi /* Point at first null (or last+1) */
|
snm_20: decl %edi # Point at first null (or last+1)
|
||||||
snm_99: movl %edi,%eax /* Pointer at last char */
|
snm_99: movl %edi,%eax # Pointer at last char
|
||||||
popl %esi
|
popl %esi
|
||||||
popl %edi
|
popl %edi
|
||||||
ret
|
ret
|
||||||
@@ -357,17 +356,17 @@ snm_99: movl %edi,%eax /* Pointer at last char */
|
|||||||
.globl strmov
|
.globl strmov
|
||||||
.type strmov,@function
|
.type strmov,@function
|
||||||
strmov:
|
strmov:
|
||||||
movl %esi,%ecx /* Save old %esi and %edi */
|
movl %esi,%ecx # Save old %esi and %edi
|
||||||
movl %edi,%edx
|
movl %edi,%edx
|
||||||
movl 8(%esp),%esi /* get source pointer (s2) */
|
movl 8(%esp),%esi # get source pointer (s2)
|
||||||
movl 4(%esp),%edi /* %edi -> s1 */
|
movl 4(%esp),%edi # %edi -> s1
|
||||||
smo_10: movb (%esi),%al
|
smo_10: movb (%esi),%al
|
||||||
movsb /* move arg */
|
movsb # move arg
|
||||||
andb %al,%al
|
andb %al,%al
|
||||||
jnz smo_10 /* Not last */
|
jnz smo_10 # Not last
|
||||||
movl %edi,%eax
|
movl %edi,%eax
|
||||||
dec %eax
|
dec %eax
|
||||||
movl %ecx,%esi /* Restore */
|
movl %ecx,%esi # Restore
|
||||||
movl %edx,%edi
|
movl %edx,%edi
|
||||||
ret
|
ret
|
||||||
.strmov_end:
|
.strmov_end:
|
||||||
@@ -376,29 +375,29 @@ smo_10: movb (%esi),%al
|
|||||||
.globl strxmov
|
.globl strxmov
|
||||||
.type strxmov,@function
|
.type strxmov,@function
|
||||||
strxmov:
|
strxmov:
|
||||||
movl %ebx,%edx /* Save %ebx, %esi and %edi */
|
movl %ebx,%edx # Save %ebx, %esi and %edi
|
||||||
mov %esi,%ecx
|
mov %esi,%ecx
|
||||||
push %edi
|
push %edi
|
||||||
leal 8(%esp),%ebx /* Get destination */
|
leal 8(%esp),%ebx # Get destination
|
||||||
movl (%ebx),%edi
|
movl (%ebx),%edi
|
||||||
xorb %al,%al
|
xorb %al,%al
|
||||||
jmp next_str /* Handle source ebx+4 */
|
jmp next_str # Handle source ebx+4
|
||||||
|
|
||||||
start_str:
|
start_str:
|
||||||
movsb
|
movsb
|
||||||
cmpb -1(%edi),%al
|
cmpb -1(%edi),%al
|
||||||
jne start_str
|
jne start_str
|
||||||
decl %edi /* Don't copy last null */
|
decl %edi # Don't copy last null
|
||||||
|
|
||||||
next_str:
|
next_str:
|
||||||
addl $4,%ebx
|
addl $4,%ebx
|
||||||
movl (%ebx),%esi
|
movl (%ebx),%esi
|
||||||
orl %esi,%esi
|
orl %esi,%esi
|
||||||
jne start_str
|
jne start_str
|
||||||
movb %al,0(%edi) /* Force last to ASCII 0 */
|
movb %al,0(%edi) # Force last to ASCII 0
|
||||||
|
|
||||||
movl %edi,%eax /* Return ptr to ASCII 0 */
|
movl %edi,%eax # Return ptr to ASCII 0
|
||||||
pop %edi /* Restore registers */
|
pop %edi # Restore registers
|
||||||
movl %ecx,%esi
|
movl %ecx,%esi
|
||||||
movl %edx,%ebx
|
movl %edx,%ebx
|
||||||
ret
|
ret
|
||||||
|
Reference in New Issue
Block a user