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
f3c11eab
Commit
f3c11eab
authored
Nov 20, 2009
by
Mikael Ronstrom
Browse files
Options
Browse Files
Download
Plain Diff
WL#5105, Optimize ptr_cmp on Solaris by using memcmp instead of native ptr_cmp
parents
5aeeaaf5
a5128072
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
24 additions
and
0 deletions
+24
-0
mysys/ptr_cmp.c
mysys/ptr_cmp.c
+24
-0
No files found.
mysys/ptr_cmp.c
View file @
f3c11eab
...
@@ -22,16 +22,39 @@
...
@@ -22,16 +22,39 @@
#include "mysys_priv.h"
#include "mysys_priv.h"
#include <myisampack.h>
#include <myisampack.h>
#ifdef UNIV_SOLARIS
/*
* On Solaris, memcmp() is normally faster than the unrolled ptr_compare_N
* functions, as memcmp() is usually a platform-specific implementation
* written in assembler, provided in /usr/lib/libc/libc_hwcap*.so.1.
* This implementation is also usually faster than the built-in memcmp
* supplied by GCC, so it is recommended to build with "-fno-builtin-memcmp"
* in CFLAGS if building with GCC on Solaris.
*/
#include <string.h>
static
int
native_compare
(
size_t
*
length
,
unsigned
char
**
a
,
unsigned
char
**
b
)
{
return
memcmp
(
*
a
,
*
b
,
*
length
);
}
#else
/* UNIV_SOLARIS */
static
int
ptr_compare
(
size_t
*
compare_length
,
uchar
**
a
,
uchar
**
b
);
static
int
ptr_compare
(
size_t
*
compare_length
,
uchar
**
a
,
uchar
**
b
);
static
int
ptr_compare_0
(
size_t
*
compare_length
,
uchar
**
a
,
uchar
**
b
);
static
int
ptr_compare_0
(
size_t
*
compare_length
,
uchar
**
a
,
uchar
**
b
);
static
int
ptr_compare_1
(
size_t
*
compare_length
,
uchar
**
a
,
uchar
**
b
);
static
int
ptr_compare_1
(
size_t
*
compare_length
,
uchar
**
a
,
uchar
**
b
);
static
int
ptr_compare_2
(
size_t
*
compare_length
,
uchar
**
a
,
uchar
**
b
);
static
int
ptr_compare_2
(
size_t
*
compare_length
,
uchar
**
a
,
uchar
**
b
);
static
int
ptr_compare_3
(
size_t
*
compare_length
,
uchar
**
a
,
uchar
**
b
);
static
int
ptr_compare_3
(
size_t
*
compare_length
,
uchar
**
a
,
uchar
**
b
);
#endif
/* UNIV_SOLARIS */
/* Get a pointer to a optimal byte-compare function for a given size */
/* Get a pointer to a optimal byte-compare function for a given size */
qsort2_cmp
get_ptr_compare
(
size_t
size
)
qsort2_cmp
get_ptr_compare
(
size_t
size
)
{
{
#ifdef UNIV_SOLARIS
return
(
qsort2_cmp
)
native_compare
;
#else
if
(
size
<
4
)
if
(
size
<
4
)
return
(
qsort2_cmp
)
ptr_compare
;
return
(
qsort2_cmp
)
ptr_compare
;
switch
(
size
&
3
)
{
switch
(
size
&
3
)
{
...
@@ -41,6 +64,7 @@ qsort2_cmp get_ptr_compare (size_t size)
...
@@ -41,6 +64,7 @@ qsort2_cmp get_ptr_compare (size_t size)
case
3
:
return
(
qsort2_cmp
)
ptr_compare_3
;
case
3
:
return
(
qsort2_cmp
)
ptr_compare_3
;
}
}
return
0
;
/* Impossible */
return
0
;
/* Impossible */
#endif
/* UNIV_SOLARIS */
}
}
...
...
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