af366d353b
The C variant in libkern performs excessive branching to find the non-zero byte instead of using the bsfq instruction. The same code patched to use it is still slower than the routine implemented here as the compiler keeps neglecting to perform certain optimizations (like using leaq). On top of that the routine can is a starting point for copyinstr which operates on words instead of bytes. Tested with glibc test suite. Sample results (calls/s): Haswell: $(perl -e "print 'A' x 3"): stock: 211198039 patched:338626619 asm: 465609618 $(perl -e "print 'A' x 100"): stock: 83151997 patched: 98285919 asm: 120719888 AMD EPYC 7R32: $(perl -e "print 'A' x 3"): stock: 282523617 asm: 491498172 $(perl -e "print 'A' x 100"): stock: 114857172 asm: 112082057
116 lines
3.7 KiB
Plaintext
116 lines
3.7 KiB
Plaintext
# This file tells config what files go into building a kernel,
|
|
# files marked standard are always included.
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
|
|
# Arch dependent files
|
|
mips/mips/autoconf.c standard
|
|
mips/mips/bus_space_generic.c standard
|
|
mips/mips/busdma_machdep.c standard
|
|
mips/mips/cache.c standard
|
|
mips/mips/cache_mipsNN.c standard
|
|
mips/mips/cpu.c standard
|
|
mips/mips/db_disasm.c optional ddb
|
|
mips/mips/db_interface.c optional ddb
|
|
mips/mips/db_trace.c optional ddb
|
|
mips/mips/dump_machdep.c standard
|
|
mips/mips/elf_machdep.c standard
|
|
mips/mips/exception.S standard
|
|
mips/mips/fp.S standard
|
|
mips/mips/freebsd32_machdep.c optional compat_freebsd32
|
|
mips/mips/gdb_machdep.c standard
|
|
mips/mips/in_cksum.c optional inet
|
|
mips/mips/libkern_machdep.c standard
|
|
mips/mips/locore.S standard no-obj
|
|
mips/mips/machdep.c standard
|
|
mips/mips/mem.c optional mem
|
|
mips/mips/minidump_machdep.c standard
|
|
mips/mips/mp_machdep.c optional smp
|
|
mips/mips/mpboot.S optional smp
|
|
mips/mips/nexus.c standard
|
|
mips/mips/ofw_machdep.c optional fdt
|
|
mips/mips/pm_machdep.c standard
|
|
mips/mips/pmap.c standard
|
|
mips/mips/ptrace_machdep.c standard
|
|
mips/mips/sc_machdep.c standard
|
|
mips/mips/stack_machdep.c optional ddb | stack
|
|
mips/mips/stdatomic.c standard \
|
|
compile-with "${NORMAL_C:N-Wmissing-prototypes}"
|
|
mips/mips/support.S standard
|
|
mips/mips/bcopy.S standard
|
|
mips/mips/swtch.S standard
|
|
mips/mips/sys_machdep.c standard
|
|
mips/mips/tlb.c standard
|
|
mips/mips/trap.c standard
|
|
mips/mips/uio_machdep.c standard
|
|
mips/mips/uma_machdep.c standard
|
|
mips/mips/vm_machdep.c standard
|
|
|
|
# misc opt-in bits
|
|
kern/link_elf_obj.c standard
|
|
kern/subr_atomic64.c optional mips | mipsel | mipshf | mipselhf
|
|
kern/subr_busdma_bufalloc.c standard
|
|
kern/subr_dummy_vdso_tc.c standard
|
|
kern/subr_sfbuf.c optional mips | mipsel | mipsn32
|
|
kern/subr_sfbuf.c optional mipshf | mipselhf
|
|
|
|
# gcc/clang runtime
|
|
libkern/ffsl.c standard
|
|
libkern/ffsll.c standard
|
|
libkern/fls.c standard
|
|
libkern/flsl.c standard
|
|
libkern/flsll.c standard
|
|
libkern/cmpdi2.c optional mips | mipshf | mipsel | mipselhf
|
|
libkern/ucmpdi2.c optional mips | mipshf | mipsel | mipselhf
|
|
libkern/ashldi3.c standard
|
|
libkern/ashrdi3.c standard
|
|
libkern/memcmp.c standard
|
|
libkern/strlen.c standard
|
|
|
|
# cfe support
|
|
dev/cfe/cfe_api.c optional cfe
|
|
dev/cfe/cfe_console.c optional cfe_console
|
|
dev/cfe/cfe_env.c optional cfe_env
|
|
|
|
# syscons support
|
|
dev/fb/fb.c optional sc
|
|
dev/syscons/scgfbrndr.c optional sc
|
|
mips/mips/sc_machdep.c optional sc
|
|
|
|
# FDT support
|
|
dev/uart/uart_cpu_fdt.c optional uart fdt
|
|
|
|
# crypto support -- use generic
|
|
crypto/des/des_enc.c optional netsmb
|
|
|
|
# AP common nvram interface MIPS specific, but maybe should be more generic
|
|
dev/nvram2env/nvram2env_mips.c optional nvram2env
|
|
dev/nvram2env/nvram2env.c optional nvram2env
|
|
|
|
# hwpmc support
|
|
dev/hwpmc/hwpmc_beri.c optional hwpmc_beri
|
|
dev/hwpmc/hwpmc_mips.c optional hwpmc_mips24k | \
|
|
hwpmc_mips74k
|
|
dev/hwpmc/hwpmc_mips24k.c optional hwpmc_mips24k
|
|
dev/hwpmc/hwpmc_mips74k.c optional hwpmc_mips74k
|
|
|
|
# ofw support
|
|
dev/ofw/ofwpci.c optional fdt pci
|
|
|
|
# INTRNG support code
|
|
kern/msi_if.m optional intrng
|
|
kern/pic_if.m optional intrng
|
|
kern/subr_intr.c optional intrng
|
|
# INTRNG compatible MIPS32 interrupt controller
|
|
mips/mips/mips_pic.c optional intrng
|
|
|
|
# DTrace
|
|
cddl/compat/opensolaris/kern/opensolaris_atomic.c optional zfs | dtrace compile-with "${CDDL_C}"
|
|
cddl/dev/dtrace/mips/dtrace_asm.S optional dtrace compile-with "${DTRACE_S}"
|
|
cddl/dev/dtrace/mips/dtrace_subr.c optional dtrace compile-with "${DTRACE_C}"
|
|
cddl/dev/fbt/mips/fbt_isa.c optional dtrace_fbt | dtraceall compile-with "${FBT_C}"
|
|
|
|
# Zstd
|
|
contrib/zstd/lib/freebsd/zstd_kfreebsd.c optional zstdio compile-with ${ZSTD_C}
|