mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-01 16:58:30 +00:00
Avoid legacy instruction penalties on x86
This commit is contained in:
parent
1fba310e22
commit
8d8aecb6d9
16 changed files with 199 additions and 158 deletions
|
@ -154,6 +154,66 @@ o/$(MODE)/libc/calls/sigcrashsig.o: private \
|
|||
CFLAGS += \
|
||||
-Os
|
||||
|
||||
# avoid legacy sse decoding penalty on avx systems
|
||||
o//libc/calls/cfmakeraw.o \
|
||||
o//libc/calls/clock_gettime-xnu.o \
|
||||
o//libc/calls/CPU_AND.o \
|
||||
o//libc/calls/CPU_OR.o \
|
||||
o//libc/calls/CPU_XOR.o \
|
||||
o//libc/calls/dl_iterate_phdr.o \
|
||||
o//libc/calls/dup-nt.o \
|
||||
o//libc/calls/fcntl-nt.o \
|
||||
o//libc/calls/flock-nt.o \
|
||||
o//libc/calls/fstatfs-nt.o \
|
||||
o//libc/calls/fstat-nt.o \
|
||||
o//libc/calls/futimesat.o \
|
||||
o//libc/calls/futimes.o \
|
||||
o//libc/calls/getrlimit.o \
|
||||
o//libc/calls/gettimeofday.o \
|
||||
o//libc/calls/ioctl.o \
|
||||
o//libc/calls/lutimes.o \
|
||||
o//libc/calls/metaflock.o \
|
||||
o//libc/calls/ntaccesscheck.o \
|
||||
o//libc/calls/ntspawn.o \
|
||||
o//libc/calls/open-nt.o \
|
||||
o//libc/calls/pledge-linux.o \
|
||||
o//libc/calls/ppoll.o \
|
||||
o//libc/calls/preadv.o \
|
||||
o//libc/calls/pselect.o \
|
||||
o//libc/calls/pwritev.o \
|
||||
o//libc/calls/read-nt.o \
|
||||
o//libc/calls/readv.o \
|
||||
o//libc/calls/readwrite-nt.o \
|
||||
o//libc/calls/releasefd.o \
|
||||
o//libc/calls/select.o \
|
||||
o//libc/calls/sigaction.o \
|
||||
o//libc/calls/sigenter-freebsd.o \
|
||||
o//libc/calls/sigenter-netbsd.o \
|
||||
o//libc/calls/sigenter-openbsd.o \
|
||||
o//libc/calls/sigenter-xnu.o \
|
||||
o//libc/calls/sigignore.o \
|
||||
o//libc/calls/siginfo2cosmo.o \
|
||||
o//libc/calls/signal.o \
|
||||
o//libc/calls/sig.o \
|
||||
o//libc/calls/sigtimedwait.o \
|
||||
o//libc/calls/stat2cosmo.o \
|
||||
o//libc/calls/statfs2cosmo.o \
|
||||
o//libc/calls/statfs2statvfs.o \
|
||||
o//libc/calls/tcgetattr-nt.o \
|
||||
o//libc/calls/tcgetattr.o \
|
||||
o//libc/calls/tcgetwinsize-nt.o \
|
||||
o//libc/calls/tcsetattr-nt.o \
|
||||
o//libc/calls/tcsetwinsize-nt.o \
|
||||
o//libc/calls/termios2host.o \
|
||||
o//libc/calls/timespec_sleep.o \
|
||||
o//libc/calls/uname.o \
|
||||
o//libc/calls/utimensat-old.o \
|
||||
o//libc/calls/utimes.o \
|
||||
o//libc/calls/winexec.o \
|
||||
o//libc/calls/writev.o: private \
|
||||
COPTS += \
|
||||
-mgeneral-regs-only
|
||||
|
||||
# these assembly files are safe to build on aarch64
|
||||
o/$(MODE)/libc/calls/getcontext.o: libc/calls/getcontext.S
|
||||
@$(COMPILE) -AOBJECTIFY.S $(OBJECTIFY.S) $(OUTPUT_OPTION) -c $<
|
||||
|
|
|
@ -97,6 +97,14 @@ o/$(MODE)/libc/intrin/x86.o: private \
|
|||
-fpatchable-function-entry=0 \
|
||||
-Os
|
||||
|
||||
# avoid the legacy sse decoding penalty on avx systems
|
||||
o//libc/intrin/dll.o \
|
||||
o//libc/intrin/fds.o \
|
||||
o//libc/intrin/mmap.o \
|
||||
o//libc/intrin/demangle.o: private \
|
||||
CFLAGS += \
|
||||
-mgeneral-regs-only
|
||||
|
||||
# these assembly files are safe to build on aarch64
|
||||
o/$(MODE)/libc/intrin/aarch64/%.o: libc/intrin/aarch64/%.S
|
||||
@$(COMPILE) -AOBJECTIFY.S $(OBJECTIFY.S) $(OUTPUT_OPTION) -c $<
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│ vi: set et ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi │
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2022 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/str/locale.h"
|
||||
#include "libc/sysv/errfuns.h"
|
||||
|
||||
locale_t uselocale(locale_t l) {
|
||||
// TODO: implement me!
|
||||
return 0;
|
||||
}
|
|
@ -22,6 +22,7 @@ LIBC_TESTLIB_A_ASSETS = \
|
|||
LIBC_TESTLIB_A_HDRS = \
|
||||
libc/testlib/aspect.internal.h \
|
||||
libc/testlib/bench.h \
|
||||
libc/testlib/benchmark.h \
|
||||
libc/testlib/blocktronics.h \
|
||||
libc/testlib/ezbench.h \
|
||||
libc/testlib/fastrandomstring.h \
|
||||
|
|
26
libc/testlib/benchmark.h
Normal file
26
libc/testlib/benchmark.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
#ifndef COSMOPOLITAN_LIBC_TESTLIB_BENCHMARK_H_
|
||||
#define COSMOPOLITAN_LIBC_TESTLIB_BENCHMARK_H_
|
||||
#include "libc/calls/struct/timespec.h"
|
||||
#include "libc/stdio/stdio.h"
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
#define BENCHMARK(ITERATIONS, WORK_PER_RUN, CODE) \
|
||||
do { \
|
||||
struct timespec start = timespec_real(); \
|
||||
for (int __i = 0; __i < ITERATIONS; ++__i) { \
|
||||
asm volatile("" ::: "memory"); \
|
||||
CODE; \
|
||||
} \
|
||||
long long work = ((WORK_PER_RUN) ? (WORK_PER_RUN) : 1) * (ITERATIONS); \
|
||||
double nanos = \
|
||||
(timespec_tonanos(timespec_sub(timespec_real(), start)) + work - 1) / \
|
||||
(double)work; \
|
||||
if (nanos < 1000) { \
|
||||
printf("%10g ns %2dx %s\n", nanos, (ITERATIONS), #CODE); \
|
||||
} else { \
|
||||
printf("%10lld ns %2dx %s\n", (long long)nanos, (ITERATIONS), #CODE); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* COSMOPOLITAN_LIBC_TESTLIB_BENCHMARK_H_ */
|
Loading…
Add table
Add a link
Reference in a new issue