mirror of
https://github.com/jarun/nnn.git
synced 2024-11-28 05:41:31 +00:00
Check alignment and enable -O3
This commit is contained in:
parent
9b010b1c03
commit
3a88e31a0e
4
Makefile
4
Makefile
|
@ -3,7 +3,7 @@ VERSION = 1.6
|
||||||
PREFIX ?= /usr/local
|
PREFIX ?= /usr/local
|
||||||
MANPREFIX = $(PREFIX)/share/man
|
MANPREFIX = $(PREFIX)/share/man
|
||||||
|
|
||||||
CFLAGS += -Wall -Wextra -Wno-unused-parameter
|
CFLAGS += -O3 -Wall -Wextra -Wno-unused-parameter
|
||||||
LDLIBS = -lreadline
|
LDLIBS = -lreadline
|
||||||
|
|
||||||
ifeq ($(shell pkg-config ncursesw && echo 1),1)
|
ifeq ($(shell pkg-config ncursesw && echo 1),1)
|
||||||
|
@ -23,7 +23,7 @@ all: $(BIN) $(PLAYER)
|
||||||
$(SRC): nnn.h
|
$(SRC): nnn.h
|
||||||
|
|
||||||
$(BIN): $(SRC)
|
$(BIN): $(SRC)
|
||||||
$(CC) -O2 $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)
|
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)
|
||||||
strip $@
|
strip $@
|
||||||
|
|
||||||
debug: $(SRC)
|
debug: $(SRC)
|
||||||
|
|
19
nnn.c
19
nnn.c
|
@ -357,11 +357,12 @@ xstrlen(const char *s)
|
||||||
static size_t
|
static size_t
|
||||||
xstrlcpy(char *dest, const char *src, size_t n)
|
xstrlcpy(char *dest, const char *src, size_t n)
|
||||||
{
|
{
|
||||||
|
static ulong *s, *d;
|
||||||
static size_t len, blocks;
|
static size_t len, blocks;
|
||||||
static const uint lsize = sizeof(ulong);
|
static const uint lsize = sizeof(ulong);
|
||||||
static const uint _WSHIFT = (sizeof(ulong) == 8) ? 3 : 2;
|
static const uint _WSHIFT = (sizeof(ulong) == 8) ? 3 : 2;
|
||||||
|
|
||||||
if (!src || !dest)
|
if (!src || !dest || !n)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
len = xstrlen(src) + 1;
|
len = xstrlen(src) + 1;
|
||||||
|
@ -371,17 +372,15 @@ xstrlcpy(char *dest, const char *src, size_t n)
|
||||||
/* Save total number of bytes to copy in len */
|
/* Save total number of bytes to copy in len */
|
||||||
len = n;
|
len = n;
|
||||||
|
|
||||||
if (n >= lsize) {
|
/*
|
||||||
blocks = n >> _WSHIFT;
|
* To enable -O3 ensure src and dest are 16-byte aligned
|
||||||
n -= (blocks << _WSHIFT);
|
* More info: http://www.felixcloutier.com/x86/MOVDQA.html
|
||||||
} else
|
*/
|
||||||
blocks = 0;
|
if ((n >= lsize) && !((ulong)src & (ulong)dest & 0xF)) {
|
||||||
|
|
||||||
if (blocks) {
|
|
||||||
static ulong *s, *d;
|
|
||||||
|
|
||||||
s = (ulong *)src;
|
s = (ulong *)src;
|
||||||
d = (ulong *)dest;
|
d = (ulong *)dest;
|
||||||
|
blocks = n >> _WSHIFT;
|
||||||
|
n -= (blocks << _WSHIFT);
|
||||||
|
|
||||||
while (blocks) {
|
while (blocks) {
|
||||||
*d = *s;
|
*d = *s;
|
||||||
|
|
Loading…
Reference in a new issue