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
157 lines
5.8 KiB
Plaintext
157 lines
5.8 KiB
Plaintext
# $FreeBSD$
|
|
|
|
arm/arm/autoconf.c standard
|
|
arm/arm/bcopy_page.S standard
|
|
arm/arm/bcopyinout.S standard
|
|
arm/arm/blockio.S standard
|
|
arm/arm/bus_space_asm_generic.S standard
|
|
arm/arm/bus_space_base.c optional fdt
|
|
arm/arm/bus_space_generic.c standard
|
|
arm/arm/busdma_machdep.c standard
|
|
arm/arm/copystr.S standard
|
|
arm/arm/cpufunc.c standard
|
|
arm/arm/cpufunc_asm.S standard
|
|
arm/arm/cpufunc_asm_arm11x6.S optional cpu_arm1176
|
|
arm/arm/cpufunc_asm_armv7.S optional cpu_cortexa | cpu_krait | cpu_mv_pj4b
|
|
arm/arm/cpufunc_asm_pj4b.S optional cpu_mv_pj4b
|
|
arm/arm/cpuinfo.c standard
|
|
arm/arm/cpu_asm-v6.S standard
|
|
arm/arm/db_disasm.c optional ddb
|
|
arm/arm/db_interface.c optional ddb
|
|
arm/arm/db_trace.c optional ddb
|
|
arm/arm/debug_monitor.c optional ddb armv6
|
|
arm/arm/debug_monitor.c optional ddb armv7
|
|
arm/arm/disassem.c optional ddb
|
|
arm/arm/dump_machdep.c standard
|
|
arm/arm/elf_machdep.c standard
|
|
arm/arm/elf_note.S standard
|
|
arm/arm/exception.S standard
|
|
arm/arm/fiq.c standard
|
|
arm/arm/fiq_subr.S standard
|
|
arm/arm/fusu.S standard
|
|
arm/arm/gdb_machdep.c optional gdb
|
|
arm/arm/generic_timer.c optional generic_timer
|
|
arm/arm/gic.c optional gic
|
|
arm/arm/gic_fdt.c optional gic fdt
|
|
arm/arm/identcpu-v6.c standard
|
|
arm/arm/in_cksum.c optional inet | inet6
|
|
arm/arm/in_cksum_arm.S optional inet | inet6
|
|
kern/subr_intr.c standard
|
|
arm/arm/locore.S standard no-obj
|
|
arm/arm/hypervisor-stub.S standard
|
|
arm/arm/machdep.c standard
|
|
arm/arm/machdep_boot.c standard
|
|
arm/arm/machdep_kdb.c standard
|
|
arm/arm/machdep_intr.c standard
|
|
arm/arm/machdep_ptrace.c standard
|
|
arm/arm/mem.c optional mem
|
|
arm/arm/minidump_machdep.c standard
|
|
arm/arm/mp_machdep.c optional smp
|
|
arm/arm/mpcore_timer.c optional mpcore_timer
|
|
arm/arm/nexus.c standard
|
|
arm/arm/ofw_machdep.c optional fdt
|
|
arm/arm/pl190.c optional pl190
|
|
arm/arm/pl310.c optional pl310
|
|
arm/arm/platform.c optional platform
|
|
arm/arm/platform_if.m optional platform
|
|
arm/arm/platform_pl310_if.m optional platform pl310
|
|
arm/arm/pmap-v6.c standard
|
|
arm/arm/pmu.c optional pmu | hwpmc
|
|
arm/arm/pmu_fdt.c optional fdt pmu | fdt hwpmc
|
|
arm/arm/ptrace_machdep.c standard
|
|
arm/arm/sc_machdep.c optional sc
|
|
arm/arm/setcpsr.S standard
|
|
arm/arm/setstack.s standard
|
|
arm/arm/stack_machdep.c optional ddb | stack
|
|
arm/arm/stdatomic.c standard \
|
|
compile-with "${NORMAL_C:N-Wmissing-prototypes}"
|
|
arm/arm/support.S standard
|
|
arm/arm/swtch.S standard
|
|
arm/arm/swtch-v6.S standard
|
|
arm/arm/sys_machdep.c standard
|
|
arm/arm/syscall.c standard
|
|
arm/arm/trap-v6.c standard
|
|
arm/arm/uio_machdep.c standard
|
|
arm/arm/undefined.c standard
|
|
arm/arm/unwind.c optional ddb | kdtrace_hooks | stack
|
|
arm/arm/vm_machdep.c standard
|
|
arm/arm/vfp.c standard
|
|
arm/cloudabi32/cloudabi32_sysvec.c optional compat_cloudabi32
|
|
cddl/compat/opensolaris/kern/opensolaris_atomic.c optional !armv7 !armv6 zfs | !armv7 !armv6 dtrace compile-with "${CDDL_C}"
|
|
cddl/dev/dtrace/arm/dtrace_asm.S optional dtrace compile-with "${DTRACE_S}"
|
|
cddl/dev/dtrace/arm/dtrace_subr.c optional dtrace compile-with "${DTRACE_C}"
|
|
cddl/dev/fbt/arm/fbt_isa.c optional dtrace_fbt | dtraceall compile-with "${FBT_C}"
|
|
crypto/des/des_enc.c optional netsmb
|
|
dev/cpufreq/cpufreq_dt.c optional cpufreq fdt
|
|
dev/dwc/if_dwc.c optional dwc
|
|
dev/dwc/if_dwc_if.m optional dwc
|
|
dev/fb/fb.c optional sc
|
|
dev/fdt/fdt_arm_platform.c optional platform fdt
|
|
dev/hdmi/hdmi_if.m optional hdmi
|
|
dev/hwpmc/hwpmc_arm.c optional hwpmc
|
|
dev/hwpmc/hwpmc_armv7.c optional hwpmc armv6
|
|
dev/hwpmc/hwpmc_armv7.c optional hwpmc armv7
|
|
dev/iicbus/twsi/twsi.c optional twsi
|
|
dev/ofw/ofwpci.c optional fdt pci
|
|
dev/pci/pci_host_generic.c optional pci_host_generic pci
|
|
dev/pci/pci_host_generic_fdt.c optional pci_host_generic pci fdt
|
|
dev/psci/psci.c optional psci
|
|
dev/psci/smccc_arm.S optional psci
|
|
dev/syscons/scgfbrndr.c optional sc
|
|
dev/uart/uart_cpu_fdt.c optional uart fdt
|
|
|
|
kern/msi_if.m optional intrng
|
|
kern/pic_if.m optional intrng
|
|
kern/subr_busdma_bufalloc.c standard
|
|
kern/subr_devmap.c standard
|
|
kern/subr_physmem.c standard
|
|
kern/subr_sfbuf.c standard
|
|
libkern/arm/aeabi_unwind.c standard
|
|
libkern/arm/divsi3.S standard
|
|
libkern/arm/ffs.S optional !armv7 !armv6
|
|
libkern/arm/ldivmod.S standard
|
|
libkern/arm/ldivmod_helper.c standard
|
|
libkern/arm/memclr.S standard
|
|
libkern/arm/memcpy.S standard
|
|
libkern/arm/memset.S standard
|
|
libkern/arm/muldi3.c standard
|
|
libkern/ashldi3.c standard
|
|
libkern/ashrdi3.c standard
|
|
libkern/divdi3.c standard
|
|
libkern/ffsl.c optional !armv7 !armv6
|
|
libkern/ffsll.c optional !armv7 !armv6
|
|
libkern/fls.c optional !armv7 !armv6
|
|
libkern/flsl.c optional !armv7 !armv6
|
|
libkern/flsll.c optional !armv7 !armv6
|
|
libkern/lshrdi3.c standard
|
|
libkern/memcmp.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
|
|
|
|
# CloudABI support
|
|
cloudabi32_vdso.o optional compat_cloudabi32 \
|
|
dependency "$S/contrib/cloudabi/cloudabi_vdso_armv6.S" \
|
|
compile-with "${CC} -x assembler-with-cpp -shared -nostdinc -nostdlib -Wl,-T$S/compat/cloudabi/cloudabi_vdso.lds $S/contrib/cloudabi/cloudabi_vdso_armv6.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-littlearm --binary-architecture arm cloudabi32_vdso.o ${.TARGET}" \
|
|
no-implicit-rule \
|
|
clean "cloudabi32_vdso_blob.o"
|
|
#
|
|
|
|
# Annapurna support
|
|
arm/annapurna/alpine/alpine_ccu.c optional al_ccu fdt
|
|
arm/annapurna/alpine/alpine_nb_service.c optional al_nb_service fdt
|
|
arm/annapurna/alpine/alpine_pci.c optional al_pci fdt
|
|
arm/annapurna/alpine/alpine_pci_msix.c optional al_pci fdt
|
|
arm/annapurna/alpine/alpine_serdes.c optional al_serdes fdt \
|
|
no-depend \
|
|
compile-with "${CC} -c -o ${.TARGET} ${CFLAGS} -I$S/contrib/alpine-hal -I$S/contrib/alpine-hal/eth ${PROF} ${.IMPSRC}"
|