Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
9a422fc3
Commit
9a422fc3
authored
Aug 08, 2005
by
monty@mishka.local
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into mishka.local:/home/my/mysql-4.1
parents
245b4beb
70170382
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
104 additions
and
42 deletions
+104
-42
mysql-test/r/bigint.result
mysql-test/r/bigint.result
+9
-0
mysql-test/t/bigint.test
mysql-test/t/bigint.test
+3
-0
strings/Makefile.am
strings/Makefile.am
+2
-2
strings/longlong2str-x86.s
strings/longlong2str-x86.s
+18
-17
strings/longlong2str_asm.c
strings/longlong2str_asm.c
+33
-0
strings/my_strtoll10-x86.s
strings/my_strtoll10-x86.s
+39
-23
No files found.
mysql-test/r/bigint.result
View file @
9a422fc3
...
...
@@ -17,6 +17,15 @@ select 9223372036854775808+1;
select -(0-3),round(-(0-3)), round(9999999999999999999);
-(0-3) round(-(0-3)) round(9999999999999999999)
3 3 10000000000000000000
select 1,11,101,1001,10001,100001,1000001,10000001,100000001,1000000001,10000000001,100000000001,1000000000001,10000000000001,100000000000001,1000000000000001,10000000000000001,100000000000000001,1000000000000000001,10000000000000000001;
1 11 101 1001 10001 100001 1000001 10000001 100000001 1000000001 10000000001 100000000001 1000000000001 10000000000001 100000000000001 1000000000000001 10000000000000001 100000000000000001 1000000000000000001 10000000000000000001
1 11 101 1001 10001 100001 1000001 10000001 100000001 1000000001 10000000001 100000000001 1000000000001 10000000000001 100000000000001 1000000000000001 10000000000000001 100000000000000001 1000000000000000001 10000000000000000001
select -1,-11,-101,-1001,-10001,-100001,-1000001,-10000001,-100000001,-1000000001,-10000000001,-100000000001,-1000000000001,-10000000000001,-100000000000001,-1000000000000001,-10000000000000001,-100000000000000001,-1000000000000000001,-10000000000000000001;
-1 -11 -101 -1001 -10001 -100001 -1000001 -10000001 -100000001 -1000000001 -10000000001 -100000000001 -1000000000001 -10000000000001 -100000000000001 -1000000000000001 -10000000000000001 -100000000000000001 -1000000000000000001 -10000000000000000001
-1 -11 -101 -1001 -10001 -100001 -1000001 -10000001 -100000001 -1000000001 -10000000001 -100000000001 -1000000000001 -10000000000001 -100000000000001 -1000000000000001 -10000000000000001 -100000000000000001 -1000000000000000001 -10000000000000000000
select conv(1,10,16),conv((1<<2)-1,10,16),conv((1<<10)-2,10,16),conv((1<<16)-3,10,16),conv((1<<25)-4,10,16),conv((1<<31)-5,10,16),conv((1<<36)-6,10,16),conv((1<<47)-7,10,16),conv((1<<48)-8,10,16),conv((1<<55)-9,10,16),conv((1<<56)-10,10,16),conv((1<<63)-11,10,16);
conv(1,10,16) conv((1<<2)-1,10,16) conv((1<<10)-2,10,16) conv((1<<16)-3,10,16) conv((1<<25)-4,10,16) conv((1<<31)-5,10,16) conv((1<<36)-6,10,16) conv((1<<47)-7,10,16) conv((1<<48)-8,10,16) conv((1<<55)-9,10,16) conv((1<<56)-10,10,16) conv((1<<63)-11,10,16)
1 3 3FE FFFD 1FFFFFC 7FFFFFFB FFFFFFFFA 7FFFFFFFFFF9 FFFFFFFFFFF8 7FFFFFFFFFFFF7 FFFFFFFFFFFFF6 7FFFFFFFFFFFFFF5
create table t1 (a bigint unsigned not null, primary key(a));
insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE), (18446744073709551613), (18446744073709551612);
select * from t1;
...
...
mysql-test/t/bigint.test
View file @
9a422fc3
...
...
@@ -14,6 +14,9 @@ select +9999999999999999999,-9999999999999999999;
select
cast
(
9223372036854775808
as
unsigned
)
+
1
;
select
9223372036854775808
+
1
;
select
-
(
0
-
3
),
round
(
-
(
0
-
3
)),
round
(
9999999999999999999
);
select
1
,
11
,
101
,
1001
,
10001
,
100001
,
1000001
,
10000001
,
100000001
,
1000000001
,
10000000001
,
100000000001
,
1000000000001
,
10000000000001
,
100000000000001
,
1000000000000001
,
10000000000000001
,
100000000000000001
,
1000000000000000001
,
10000000000000000001
;
select
-
1
,
-
11
,
-
101
,
-
1001
,
-
10001
,
-
100001
,
-
1000001
,
-
10000001
,
-
100000001
,
-
1000000001
,
-
10000000001
,
-
100000000001
,
-
1000000000001
,
-
10000000000001
,
-
100000000000001
,
-
1000000000000001
,
-
10000000000000001
,
-
100000000000000001
,
-
1000000000000000001
,
-
10000000000000000001
;
select
conv
(
1
,
10
,
16
),
conv
((
1
<<
2
)
-
1
,
10
,
16
),
conv
((
1
<<
10
)
-
2
,
10
,
16
),
conv
((
1
<<
16
)
-
3
,
10
,
16
),
conv
((
1
<<
25
)
-
4
,
10
,
16
),
conv
((
1
<<
31
)
-
5
,
10
,
16
),
conv
((
1
<<
36
)
-
6
,
10
,
16
),
conv
((
1
<<
47
)
-
7
,
10
,
16
),
conv
((
1
<<
48
)
-
8
,
10
,
16
),
conv
((
1
<<
55
)
-
9
,
10
,
16
),
conv
((
1
<<
56
)
-
10
,
10
,
16
),
conv
((
1
<<
63
)
-
11
,
10
,
16
);
#
# In 3.23 we have to disable the test of column to bigint as
...
...
strings/Makefile.am
View file @
9a422fc3
...
...
@@ -23,7 +23,7 @@ pkglib_LIBRARIES = libmystrings.a
# Exact one of ASSEMBLER_X
if
ASSEMBLER_x86
ASRCS
=
strings-x86.s longlong2str-x86.s my_strtoll10-x86.s
CSRCS
=
bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c ctype-extra.c
CSRCS
=
bfill.c bmove.c bmove512.c bchange.c strxnmov.c int2str.c str2int.c r_strinstr.c strtod.c bcmp.c strtol.c strtoul.c strtoll.c strtoull.c llstr.c strnlen.c ctype.c ctype-simple.c ctype-mb.c ctype-big5.c ctype-cp932.c ctype-czech.c ctype-euc_kr.c ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-tis620.c ctype-ujis.c ctype-utf8.c ctype-ucs2.c ctype-uca.c ctype-win1250ch.c ctype-bin.c ctype-latin1.c my_vsnprintf.c xml.c ctype-extra.c
longlong2str_asm.c
else
if
ASSEMBLER_sparc32
# These file MUST all be on the same line!! Otherwise automake
...
...
@@ -46,7 +46,7 @@ EXTRA_DIST = ctype-big5.c ctype-cp932.c ctype-czech.c ctype-euc_kr.c ctype-win1
ctype-gb2312.c ctype-gbk.c ctype-sjis.c ctype-utf8.c
\
ctype-ucs2.c ctype-uca.c ctype-tis620.c ctype-ujis.c
\
xml.c strto.c strings-x86.s
\
longlong2str.c longlong2str-x86.s
\
longlong2str.c longlong2str-x86.s
longlong2str_asm.c
\
my_strtoll10.c my_strtoll10-x86.s
\
strxmov.c bmove_upp.c strappend.c strcont.c strend.c
\
strfill.c strcend.c is_prefix.c strstr.c strinstr.c
\
...
...
strings/longlong2str-x86.s
View file @
9a422fc3
...
...
@@ -16,26 +16,26 @@
#
Optimized
longlong2str
function
for
Intel
80
x86
(
gcc
/
gas
syntax
)
#
Some
set
sequences
are
optimized
for
pentuimpro
II
.
file
"longlong2str.s"
.
version
"1.0
1
"
.
file
"longlong2str
-x86
.s"
.
version
"1.0
2
"
.
text
.
align
4
.
globl
longlong2str
.
type
longlong2str
,
@
function
.
globl
longlong2str
_with_dig_vector
.
type
longlong2str
_with_dig_vector
,
@
function
longlong2str
:
longlong2str
_with_dig_vector
:
subl
$
80
,%
esp
pushl
%
ebp
pushl
%
esi
pushl
%
edi
pushl
%
ebx
movl
100
(%
esp
),%
esi
#
Lower
part
of
val
movl
104
(%
esp
),%
ebp
#
Higher
part
of
val
movl
108
(%
esp
),%
edi
#
get
dst
movl
112
(%
esp
),%
ebx
#
Radix
movl
104
(%
esp
),%
ebp
#
Higher
part
of
val
movl
%
ebx
,%
eax
movl
108
(%
esp
),%
edi
#
get
dst
testl
%
eax
,%
eax
jge
.
L144
...
...
@@ -69,6 +69,8 @@ longlong2str:
.
L150
:
leal
92
(%
esp
),%
ecx
#
End
of
buffer
movl
%
edi
,
108
(%
esp
)
#
Store
possible
modified
dest
movl
116
(%
esp
),
%
edi
#
dig_vec_upper
jmp
.
L155
.
align
4
...
...
@@ -83,7 +85,7 @@ longlong2str:
divl
%
ebx
decl
%
ecx
movl
%
eax
,%
esi
#
quotent
in
ebp
:
esi
movb
_dig_vec_upper
(%
edx
),%
al
#
al
is
faster
than
dl
movb
(%
edx
,%
edi
),%
al
#
al
is
faster
than
dl
movb
%
al
,(%
ecx
)
#
store
value
in
buff
.
align
4
.
L155
:
...
...
@@ -91,20 +93,22 @@ longlong2str:
ja
.
L153
testl
%
esi
,%
esi
#
rest
value
jl
.
L153
je
.
L1
0_mov
#
Ready
je
.
L1
60
#
Ready
movl
%
esi
,%
eax
movl
$
_dig_vec_upper
,%
ebp
.
align
4
.
L154
:
#
Do
rest
with
integer
precision
cltd
divl
%
ebx
decl
%
ecx
movb
(%
edx
,%
e
bp
),%
dl
#
bh
is
always
zero
as
ebx
=
radix
<
36
movb
(%
edx
,%
e
di
),%
dl
#
bh
is
always
zero
as
ebx
=
radix
<
36
testl
%
eax
,%
eax
movb
%
dl
,(%
ecx
)
jne
.
L154
.
L160
:
movl
108
(%
esp
),%
edi
#
get
dst
.
L10_mov
:
movl
%
ecx
,%
esi
leal
92
(%
esp
),%
ecx
#
End
of
buffer
...
...
@@ -129,7 +133,7 @@ longlong2str:
jmp
.
L165
.
Lfe3
:
.
size
longlong2str
,
.
Lfe3
-
longlong2st
r
.
size
longlong2str
_with_dig_vector
,
.
Lfe3
-
longlong2str_with_dig_vecto
r
#
#
This
is
almost
equal
to
the
above
,
except
that
we
can
do
the
final
...
...
@@ -137,9 +141,6 @@ longlong2str:
#
.
align
4
.
Ltmp
:
.
long
0xcccccccd
.
align
4
.
globl
longlong10_to_str
.
type
longlong10_to_str
,
@
function
...
...
@@ -202,7 +203,7 @@ longlong10_to_str:
#
The
following
code
uses
some
tricks
to
change
division
by
10
to
#
multiplication
and
shifts
movl
.
Ltmp
,%
esi
#
set
%
esi
to
0xcccccccd
movl
$
0xcccccccd
,%
esi
.
L10_40
:
movl
%
ebx
,%
eax
...
...
strings/longlong2str_asm.c
0 → 100644
View file @
9a422fc3
/* Copyright (C) 2000 MySQL AB
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
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/*
Wrapper for longlong2str.s
We need this because the assembler code can't access the local variable
_dig_vector in a portable manner.
*/
#include <my_global.h>
#include "m_string.h"
extern
char
*
longlong2str_with_dig_vector
(
longlong
val
,
char
*
dst
,
int
radix
,
const
char
*
dig_vector
);
char
*
longlong2str
(
longlong
val
,
char
*
dst
,
int
radix
)
{
return
longlong2str_with_dig_vector
(
val
,
dst
,
radix
,
_dig_vec_upper
);
}
strings/my_strtoll10-x86.s
View file @
9a422fc3
...
...
@@ -17,21 +17,8 @@
#
For
documentation
,
check
my_strtoll
.
c
.
file
"my_strtoll10-x86.s"
.
version
"01.01"
.
data
.
align
32
.
type
lfactor
,
@
object
.
size
lfactor
,
36
lfactor
:
.
long
1
.
long
10
.
long
100
.
long
1000
.
long
10000
.
long
100000
.
long
1000000
.
long
10000000
.
long
100000000
.
version
"01.02"
.
text
.
align
4
...
...
@@ -209,14 +196,16 @@ my_strtoll10:
jne
.
L500
cmpl
-
36
(%
ebp
),%
esi
#
Test
if
string
is
less
than
18
digits
jne
.
Lend_i_and_j
jmp
.
Lend3
#
18
digit
string
.
L499
:
movl
$
1000000000
,%
eax
jmp
.
Lgot_factor
#
18
digit
string
#
Handle
the
possible
next
to
last
digit
and
store
in
ecx
.
L500
:
movb
(%
esi
),%
al
addb
$
-
48
,%
al
cmpb
$
9
,%
al
ja
.
L
end3
ja
.
L
499
#
18
digit
string
incl
%
esi
movzbl
%
al
,%
ecx
...
...
@@ -315,14 +304,41 @@ my_strtoll10:
.
Lend_i_and_j
:
movl
%
esi
,%
ecx
subl
-
12
(%
ebp
),%
ecx
#
ecx
=
number
of
digits
in
second
part
movl
lfactor
(,%
ecx
,
4
),%
eax
jmp
.
L523
#
Return
-
8
(%
ebp
)
*
$
1000000000
+
edi
#
Calculate
%
eax
=
10
**
%
cl
,
where
%
cl
<=
8
#
With
an
array
one
could
do
this
with
:
#
movl
10
_factor_table
(,%
ecx
,
4
),%
eax
#
We
calculate
the
table
here
to
avoid
problems
in
#
position
independent
code
(
gcc
-
pic
)
cmpb
$
3
,%
cl
ja
.
L4_to_8
movl
$
1000
,
%
eax
je
.
Lgot_factor
#
%
cl
=
3
,
eax
=
1000
movl
$
10
,
%
eax
cmpb
$
1
,%
cl
#
%
cl
is
here
0
-
2
je
.
Lgot_factor
#
%
cl
=
1
,
eax
=
10
movl
$
100
,
%
eax
ja
.
Lgot_factor
#
%
cl
=
2
,
eax
=
100
movl
$
1
,
%
eax
jmp
.
Lgot_factor
#
%
cl
=
0
,
eax
=
1
.
L4_to_8
:
#
%
cl
is
here
4
-
8
cmpb
$
5
,%
cl
movl
$
100000
,
%
eax
je
.
Lgot_factor
#
%
cl
=
5
,
eax
=
100000
movl
$
10000
,
%
eax
jbe
.
Lgot_factor
#
%
cl
=
4
,
eax
=
10000
movl
$
10000000
,
%
eax
cmpb
$
7
,%
cl
je
.
Lgot_factor
#
%
cl
=
7
,
eax
=
10000000
movl
$
100000000
,
%
eax
ja
.
Lgot_factor
#
%
cl
=
8
,
eax
=
100000000
movl
$
1000000
,
%
eax
#
%
cl
=
6
,
eax
=
1000000
#
Return
-
8
(%
ebp
)
*
%
eax
+
edi
.
p2align
4
,,
7
.
Lend3
:
movl
$
1000000000
,%
eax
.
L523
:
.
Lgot_factor
:
mull
-
8
(%
ebp
)
addl
%
edi
,%
eax
adcl
$
0
,%
edx
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment