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
247 lines
10 KiB
Plaintext
247 lines
10 KiB
Plaintext
# This file tells config what files go into building a kernel,
|
|
# files marked standard are always included.
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
|
|
# common files stuff between i386 and amd64
|
|
include "conf/files.x86"
|
|
|
|
# The long compile-with and dependency lines are required because of
|
|
# limitations in config: backslash-newline doesn't work in strings, and
|
|
# dependency lines other than the first are silently ignored.
|
|
#
|
|
cloudabi32_vdso.o optional compat_cloudabi32 \
|
|
dependency "$S/contrib/cloudabi/cloudabi_vdso_i686.S" \
|
|
compile-with "${CC} -x assembler-with-cpp -shared -nostdinc -nostdlib -Wl,-T$S/compat/cloudabi/cloudabi_vdso.lds $S/contrib/cloudabi/cloudabi_vdso_i686.S -o ${.TARGET}" \
|
|
no-obj no-implicit-rule \
|
|
clean "cloudabi32_vdso.o"
|
|
#
|
|
cloudabi32_vdso_blob.o optional compat_cloudabi32 \
|
|
dependency "cloudabi32_vdso.o" \
|
|
compile-with "${OBJCOPY} --input-target binary --output-target elf32-i386-freebsd --binary-architecture i386 cloudabi32_vdso.o ${.TARGET}" \
|
|
no-implicit-rule \
|
|
clean "cloudabi32_vdso_blob.o"
|
|
#
|
|
linux_genassym.o optional compat_linux \
|
|
dependency "$S/i386/linux/linux_genassym.c offset.inc" \
|
|
compile-with "${CC} ${CFLAGS:N-flto:N-fno-common} -fcommon -c ${.IMPSRC}" \
|
|
no-obj no-implicit-rule \
|
|
clean "linux_genassym.o"
|
|
#
|
|
linux_assym.h optional compat_linux \
|
|
dependency "$S/kern/genassym.sh linux_genassym.o" \
|
|
compile-with "sh $S/kern/genassym.sh linux_genassym.o > ${.TARGET}" \
|
|
no-obj no-implicit-rule before-depend \
|
|
clean "linux_assym.h"
|
|
#
|
|
linux_locore.o optional compat_linux \
|
|
dependency "linux_assym.h $S/i386/linux/linux_locore.asm" \
|
|
compile-with "${CC} -x assembler-with-cpp -DLOCORE -shared -s -pipe -I. -I$S ${WERROR} -Wall -fPIC -fno-common -nostdinc -nostdlib -Wl,-T$S/i386/linux/linux_vdso.lds.s -Wl,-soname=linux_vdso.so,--eh-frame-hdr,-warn-common ${.IMPSRC} -o ${.TARGET}" \
|
|
no-obj no-implicit-rule \
|
|
clean "linux_locore.o"
|
|
#
|
|
linux_vdso.so optional compat_linux \
|
|
dependency "linux_locore.o" \
|
|
compile-with "${OBJCOPY} --input-target binary --output-target elf32-i386-freebsd --binary-architecture i386 linux_locore.o ${.TARGET}" \
|
|
no-implicit-rule \
|
|
clean "linux_vdso.so"
|
|
#
|
|
cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S optional zfs | dtrace compile-with "${ZFS_S}"
|
|
cddl/dev/dtrace/i386/dtrace_asm.S optional dtrace compile-with "${DTRACE_S}"
|
|
cddl/dev/dtrace/i386/dtrace_subr.c optional dtrace compile-with "${DTRACE_C}"
|
|
compat/linprocfs/linprocfs.c optional linprocfs
|
|
compat/linsysfs/linsysfs.c optional linsysfs
|
|
compat/linux/linux_dummy.c optional compat_linux
|
|
compat/linux/linux_event.c optional compat_linux
|
|
compat/linux/linux_emul.c optional compat_linux
|
|
compat/linux/linux_errno.c optional compat_linux
|
|
compat/linux/linux_file.c optional compat_linux
|
|
compat/linux/linux_fork.c optional compat_linux
|
|
compat/linux/linux_futex.c optional compat_linux
|
|
compat/linux/linux_getcwd.c optional compat_linux
|
|
compat/linux/linux_ioctl.c optional compat_linux
|
|
compat/linux/linux_ipc.c optional compat_linux
|
|
compat/linux/linux_mib.c optional compat_linux
|
|
compat/linux/linux_misc.c optional compat_linux
|
|
compat/linux/linux_mmap.c optional compat_linux
|
|
compat/linux/linux_signal.c optional compat_linux
|
|
compat/linux/linux_socket.c optional compat_linux
|
|
compat/linux/linux_stats.c optional compat_linux
|
|
compat/linux/linux_sysctl.c optional compat_linux
|
|
compat/linux/linux_time.c optional compat_linux
|
|
compat/linux/linux_timer.c optional compat_linux
|
|
compat/linux/linux_uid16.c optional compat_linux
|
|
compat/linux/linux_util.c optional compat_linux
|
|
compat/linux/linux_vdso.c optional compat_linux
|
|
compat/linux/linux.c optional compat_linux
|
|
crypto/aesni/aeskeys_i386.S optional aesni
|
|
crypto/des/arch/i386/des_enc.S optional netsmb
|
|
crypto/openssl/i386/sha1-586.S optional ossl
|
|
crypto/openssl/i386/sha256-586.S optional ossl
|
|
crypto/openssl/i386/sha512-586.S optional ossl
|
|
dev/agp/agp_ali.c optional agp
|
|
dev/agp/agp_amd.c optional agp
|
|
dev/agp/agp_amd64.c optional agp
|
|
dev/agp/agp_ati.c optional agp
|
|
dev/agp/agp_i810.c optional agp
|
|
dev/agp/agp_intel.c optional agp
|
|
dev/agp/agp_nvidia.c optional agp
|
|
dev/agp/agp_sis.c optional agp
|
|
dev/agp/agp_via.c optional agp
|
|
dev/ce/ceddk.c optional ce
|
|
dev/ce/if_ce.c optional ce
|
|
dev/ce/tau32-ddk.c optional ce \
|
|
compile-with "${NORMAL_C} ${NO_WCONSTANT_CONVERSION} ${NO_WMISLEADING_INDENTATION}"
|
|
dev/cp/cpddk.c optional cp \
|
|
compile-with "${NORMAL_C} ${NO_WMISLEADING_INDENTATION}"
|
|
dev/cp/if_cp.c optional cp
|
|
dev/glxiic/glxiic.c optional glxiic
|
|
dev/glxsb/glxsb.c optional glxsb
|
|
dev/glxsb/glxsb_hash.c optional glxsb
|
|
dev/hyperv/vmbus/i386/hyperv_machdep.c optional hyperv
|
|
dev/hyperv/vmbus/i386/vmbus_vector.S optional hyperv
|
|
dev/le/if_le_isa.c optional le isa
|
|
dev/nctgpio/nctgpio.c optional nctgpio
|
|
dev/nfe/if_nfe.c optional nfe pci
|
|
dev/ntb/if_ntb/if_ntb.c optional if_ntb
|
|
dev/ntb/ntb_transport.c optional ntb_transport | if_ntb
|
|
dev/ntb/ntb.c optional ntb | ntb_transport | if_ntb | ntb_hw_amd | ntb_hw_intel | ntb_hw_plx | ntb_hw
|
|
dev/ntb/ntb_if.m optional ntb | ntb_transport | if_ntb | ntb_hw_amd | ntb_hw_intel | ntb_hw_plx | ntb_hw
|
|
dev/ntb/ntb_hw/ntb_hw_amd.c optional ntb_hw_amd | ntb_hw
|
|
dev/ntb/ntb_hw/ntb_hw_intel.c optional ntb_hw_intel | ntb_hw
|
|
dev/ntb/ntb_hw/ntb_hw_plx.c optional ntb_hw_plx | ntb_hw
|
|
dev/ntb/test/ntb_tool.c optional ntb_tool
|
|
dev/nvram/nvram.c optional nvram isa
|
|
dev/ofw/ofwpci.c optional fdt pci
|
|
dev/pcf/pcf_isa.c optional pcf
|
|
dev/random/ivy.c optional rdrand_rng !random_loadable
|
|
dev/random/nehemiah.c optional padlock_rng !random_loadable
|
|
dev/sbni/if_sbni.c optional sbni
|
|
dev/sbni/if_sbni_isa.c optional sbni isa
|
|
dev/sbni/if_sbni_pci.c optional sbni pci
|
|
dev/speaker/spkr.c optional speaker
|
|
dev/superio/superio.c optional superio isa
|
|
dev/syscons/scvesactl.c optional sc vga vesa
|
|
dev/syscons/scvgarndr.c optional sc vga
|
|
dev/tpm/tpm.c optional tpm
|
|
dev/tpm/tpm_acpi.c optional tpm acpi
|
|
dev/tpm/tpm_isa.c optional tpm isa
|
|
dev/uart/uart_cpu_x86.c optional uart
|
|
dev/viawd/viawd.c optional viawd
|
|
dev/acpi_support/acpi_wmi_if.m standard
|
|
dev/wbwd/wbwd.c optional wbwd
|
|
i386/acpica/acpi_machdep.c optional acpi
|
|
acpi_wakecode.o optional acpi \
|
|
dependency "$S/i386/acpica/acpi_wakecode.S assym.inc" \
|
|
compile-with "${NORMAL_S}" \
|
|
no-obj no-implicit-rule before-depend \
|
|
clean "acpi_wakecode.o"
|
|
acpi_wakecode.bin optional acpi \
|
|
dependency "acpi_wakecode.o" \
|
|
compile-with "${OBJCOPY} -S -O binary acpi_wakecode.o ${.TARGET}" \
|
|
no-obj no-implicit-rule before-depend \
|
|
clean "acpi_wakecode.bin"
|
|
acpi_wakecode.h optional acpi \
|
|
dependency "acpi_wakecode.bin" \
|
|
compile-with "file2c -sx 'static char wakecode[] = {' '};' < acpi_wakecode.bin > ${.TARGET}" \
|
|
no-obj no-implicit-rule before-depend \
|
|
clean "acpi_wakecode.h"
|
|
acpi_wakedata.h optional acpi \
|
|
dependency "acpi_wakecode.o" \
|
|
compile-with '${NM} -n --defined-only acpi_wakecode.o | while read offset dummy what; do echo "#define $${what} 0x$${offset}"; done > ${.TARGET}' \
|
|
no-obj no-implicit-rule before-depend \
|
|
clean "acpi_wakedata.h"
|
|
#
|
|
i386/bios/smapi.c optional smapi
|
|
i386/bios/smapi_bios.S optional smapi
|
|
i386/cloudabi32/cloudabi32_sysvec.c optional compat_cloudabi32
|
|
#i386/i386/apic_vector.s optional apic
|
|
i386/i386/bios.c standard
|
|
i386/i386/bioscall.s standard
|
|
i386/i386/bpf_jit_machdep.c optional bpf_jitter
|
|
i386/i386/copyout.c standard
|
|
i386/i386/db_disasm.c optional ddb
|
|
i386/i386/db_interface.c optional ddb
|
|
i386/i386/db_trace.c optional ddb
|
|
i386/i386/elan-mmcr.c optional cpu_elan | cpu_soekris
|
|
i386/i386/elf_machdep.c standard
|
|
i386/i386/exception.s standard
|
|
i386/i386/gdb_machdep.c optional gdb
|
|
i386/i386/geode.c optional cpu_geode
|
|
i386/i386/in_cksum.c optional inet | inet6
|
|
i386/i386/initcpu.c standard
|
|
i386/i386/io.c optional io
|
|
i386/i386/k6_mem.c optional mem
|
|
i386/i386/locore.s standard no-obj
|
|
i386/i386/longrun.c optional cpu_enable_longrun
|
|
i386/i386/machdep.c standard
|
|
i386/i386/mem.c optional mem
|
|
i386/i386/minidump_machdep.c standard
|
|
i386/i386/minidump_machdep_pae.c standard
|
|
i386/i386/minidump_machdep_nopae.c standard
|
|
i386/i386/mp_clock.c optional smp
|
|
i386/i386/mp_machdep.c optional smp
|
|
i386/i386/mpboot.s optional smp
|
|
i386/i386/npx.c standard
|
|
i386/i386/perfmon.c optional perfmon
|
|
i386/i386/pmap_base.c standard
|
|
i386/i386/pmap_nopae.c standard
|
|
i386/i386/pmap_pae.c standard
|
|
i386/i386/prof_machdep.c optional profiling-routine
|
|
i386/i386/ptrace_machdep.c standard
|
|
i386/i386/sigtramp.s standard
|
|
i386/i386/support.s standard
|
|
i386/i386/swtch.s standard
|
|
i386/i386/sys_machdep.c standard
|
|
i386/i386/trap.c standard
|
|
i386/i386/uio_machdep.c standard
|
|
i386/i386/vm86.c standard
|
|
i386/i386/vm_machdep.c standard
|
|
i386/linux/imgact_linux.c optional compat_linux
|
|
i386/linux/linux_copyout.c optional compat_linux
|
|
i386/linux/linux_dummy_machdep.c optional compat_linux
|
|
i386/linux/linux_machdep.c optional compat_linux
|
|
i386/linux/linux_ptrace.c optional compat_linux
|
|
i386/linux/linux_sysent.c optional compat_linux
|
|
i386/linux/linux_sysvec.c optional compat_linux
|
|
i386/pci/pci_cfgreg.c optional pci
|
|
i386/pci/pci_pir.c optional pci
|
|
isa/syscons_isa.c optional sc
|
|
isa/vga_isa.c optional vga
|
|
kern/imgact_aout.c optional compat_aout
|
|
kern/subr_sfbuf.c standard
|
|
libkern/divdi3.c standard
|
|
libkern/ffsll.c standard
|
|
libkern/flsll.c standard
|
|
libkern/memcmp.c standard
|
|
libkern/memset.c standard
|
|
libkern/moddi3.c standard
|
|
libkern/qdivrem.c standard
|
|
libkern/strlen.c standard
|
|
libkern/ucmpdi2.c standard
|
|
libkern/udivdi3.c standard
|
|
libkern/umoddi3.c standard
|
|
#
|
|
# x86 real mode BIOS support, required by dpms/pci/vesa
|
|
#
|
|
compat/x86bios/x86bios.c optional x86bios | dpms | pci | vesa
|
|
# Common files where we currently configure the system differently, but perhaps shouldn't
|
|
# config(8) doesn't have a way to force standard options, so we've been inconsistent
|
|
# about marking non-optional things 'standard'.
|
|
x86/acpica/madt.c optional acpi apic
|
|
x86/cpufreq/smist.c optional cpufreq
|
|
x86/isa/atpic.c optional atpic
|
|
x86/isa/elcr.c optional atpic | apic
|
|
x86/isa/isa.c optional isa
|
|
x86/isa/isa_dma.c optional isa
|
|
x86/linux/linux_dummy_x86.c optional compat_linux
|
|
x86/x86/io_apic.c optional apic
|
|
x86/x86/local_apic.c optional apic
|
|
x86/x86/mptable.c optional apic
|
|
x86/x86/mptable_pci.c optional apic pci
|
|
x86/x86/msi.c optional apic pci
|
|
|
|
compat/linuxkpi/common/src/linux_fpu.c optional compat_linuxkpi \
|
|
compile-with "${LINUXKPI_C}"
|