David Howells
690d137f44
Reduce the number of expensive division instructions done by _parse_integer()
...
_parse_integer() does one or two division instructions (which are slow)
per digit parsed to perform the overflow check.
Furthermore, these are particularly expensive examples of division
instruction as the number of clock cycles required to complete them may
go up with the position of the most significant set bit in the dividend:
if (*res > div_u64(ULLONG_MAX - val, base))
which is as maximal as possible.
Worse, on 32-bit arches, more than one of these division instructions
may be required per digit.
So, assuming we don't support a base of more than 16, skip the check if the
top nibble of the result is not set at this point.
Signed-off-by: David Howells <dhowells@redhat.com>
[ Changed it to not dereference the pointer all the time - even if the
compiler can and does optimize it away, the code just looks cleaner.
And edited the top nybble test slightly to make the code generated on
x86-64 better in the loop - test against a hoisted constant instead of
shifting and testing the result ]
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-02-09 10:09:30 -08:00
..
lzo
mpi
lib: Fix 32-bit sparc udiv_qrnnd() definition in mpilib's longlong.h
2012-02-02 10:34:25 +11:00
raid6
md: Add in export.h for files using EXPORT_SYMBOL
2011-10-31 19:31:19 -04:00
reed_solomon
xz
XZ: Fix incorrect XZ_BUF_ERROR
2011-09-21 13:39:59 -07:00
zlib_deflate
zlib: slim down zlib_deflate() workspace when possible
2011-03-22 17:44:17 -07:00
zlib_inflate
.gitignore
argv_split.c
atomic64.c
lib: atomic64: Change the type of local lock to raw_spinlock_t
2011-09-14 13:14:11 +02:00
atomic64_test.c
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
audit.c
audit: support the "standard" <asm-generic/unistd.h>
2011-05-04 14:41:28 -04:00
average.c
lib: Improve EWMA efficiency by using bitshifts
2010-12-06 15:58:43 -05:00
bcd.c
bch.c
lib: add shared BCH ECC library
2011-03-11 14:25:50 +00:00
bitmap.c
lib/bitmap.c: quiet sparse noise about address space
2011-10-31 17:30:56 -07:00
bitrev.c
bsearch.c
lib: Add generic binary search function to the kernel.
2011-05-19 16:55:27 +09:30
btree.c
btree: export btree_get_prev() so modules can use btree_for_each
2012-01-10 16:30:49 -08:00
bug.c
bugs, x86: Fix printk levels for panic, softlockups and stack dumps
2012-01-26 21:28:45 +01:00
bust_spinlocks.c
check_signature.c
checksum.c
lib/checksum.c: optimize do_csum a bit
2011-07-07 04:52:24 -07:00
clz_tab.c
lib: Fix multiple definitions of clz_tab
2012-02-02 10:34:23 +11:00
cmdline.c
cordic.c
Docs: wording: functions -> algorithm
2011-10-29 21:20:22 +02:00
cpu-notifier-error-inject.c
cpu_rmap.c
lib: cpu_rmap: CPU affinity reverse-mapping
2011-01-24 14:51:56 -08:00
cpumask.c
cpumask: alloc_cpumask_var() use NUMA_NO_NODE
2011-07-26 16:49:44 -07:00
crc-ccitt.c
crc-itu-t.c
crc-t10dif.c
crc7.c
crc8.c
lib: crc8: add new library module providing crc8 algorithm
2011-06-03 15:01:06 -04:00
crc16.c
crc32.c
crc32: optimize inner loop
2012-01-10 16:30:51 -08:00
crc32defs.h
ctype.c
debug_locks.c
Revert "debug_locks: set oops_in_progress if we will log messages."
2010-11-29 15:18:28 -08:00
debugobjects.c
debugobjects: Extend to assert that an object is initialized
2011-11-23 18:49:22 +01:00
dec_and_lock.c
atomic: use <linux/atomic.h>
2011-07-26 16:49:47 -07:00
decompress.c
decompressors: add boot-time XZ support
2011-01-13 08:03:25 -08:00
decompress_bunzip2.c
decompress_bunzip2: remove invalid vi modeline
2011-12-06 10:00:05 +01:00
decompress_inflate.c
decompressors: check input size in decompress_inflate.c
2011-01-13 08:03:25 -08:00
decompress_unlzma.c
treewide: Fix comment and string typo 'bufer'
2011-12-06 09:53:40 +01:00
decompress_unlzo.c
unlzo: fix input buffer free
2012-01-12 20:13:13 -08:00
decompress_unxz.c
Fix common misspellings
2011-03-31 11:26:23 -03:00
devres.c
Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci
2012-01-11 18:50:26 -08:00
digsig.c
lib/digsig: checks for NULL return value
2012-02-02 00:24:04 +11:00
div64.c
div64_u64(): improve precision on 32bit platforms
2010-10-26 16:52:19 -07:00
dma-debug.c
Fix comparison using wrong pointer variable in dma debug code
2011-11-21 11:35:37 +01:00
dump_stack.c
dynamic_debug.c
Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
2011-10-25 12:13:59 +02:00
dynamic_queue_limits.c
dql: Dynamic queue limits
2011-11-29 12:46:19 -05:00
extable.c
fault-inject.c
switch debugfs to umode_t
2012-01-03 22:54:56 -05:00
find_last_bit.c
bitops: add #ifndef for each of find bitops
2011-05-26 17:12:38 -07:00
find_next_bit.c
arch: remove CONFIG_GENERIC_FIND_{NEXT_BIT,BIT_LE,LAST_BIT}
2011-05-26 17:12:38 -07:00
flex_array.c
flex_array: avoid divisions when accessing elements
2011-05-26 17:12:33 -07:00
gcd.c
gen_crc32table.c
genalloc.c
lib, Make gen_pool memory allocator lockless
2011-08-03 11:15:57 -04:00
halfmd4.c
hexdump.c
lib: add error checking to hex2bin
2011-09-20 23:24:44 -04:00
hweight.c
idr.c
ida: make ida_simple_get/put() IRQ safe
2011-11-02 16:07:00 -07:00
inflate.c
int_sqrt.c
iomap.c
lib: add GENERIC_PCI_IOMAP
2011-11-28 21:12:42 +02:00
iomap_copy.c
iommu-helper.c
ioremap.c
ACPI, APEI, Generic Hardware Error Source POLL/IRQ/NMI notification type support
2011-01-12 03:06:19 -05:00
irq_regs.c
is_single_threaded.c
kasprintf.c
Kconfig
arch: fix ioport mapping on mips,sh
2012-02-07 14:32:24 -08:00
Kconfig.debug
kmemleak: Add support for memory hotplug
2011-12-02 16:12:42 +00:00
Kconfig.kgdb
Kconfig.kmemcheck
klist.c
kobject.c
kobject: remove kset_find_obj_hinted()
2011-12-21 15:13:54 -08:00
kobject_uevent.c
driver-core: skip uevent generation when nobody is listening
2011-12-09 16:23:50 -08:00
kstrtox.c
Reduce the number of expensive division instructions done by _parse_integer()
2012-02-09 10:09:30 -08:00
kstrtox.h
lib/kstrtox: common code between kstrto*() and simple_strto*() functions
2011-10-31 17:30:56 -07:00
lcm.c
lib/lcm.c: quiet sparse noise
2011-07-25 20:57:15 -07:00
libcrc32c.c
list_debug.c
Expand CONFIG_DEBUG_LIST to several other list operations
2011-02-18 11:32:28 -08:00
list_sort.c
lib/list_sort: test: check element addresses
2010-10-26 16:52:19 -07:00
llist.c
llist: Remove cpu_relax() usage in cmpxchg loops
2011-10-04 12:44:03 +02:00
locking-selftest-hardirq.h
locking-selftest-mutex.h
locking-selftest-rlock-hardirq.h
locking-selftest-rlock-softirq.h
locking-selftest-rlock.h
locking-selftest-rsem.h
locking-selftest-softirq.h
locking-selftest-spin-hardirq.h
locking-selftest-spin-softirq.h
locking-selftest-spin.h
locking-selftest-wlock-hardirq.h
locking-selftest-wlock-softirq.h
locking-selftest-wlock.h
locking-selftest-wsem.h
locking-selftest.c
rcu: Fix unpaired rcu_irq_enter() from locking selftests
2011-05-26 09:42:19 -07:00
lru_cache.c
lru_cache: use correct type in sizeof for allocation
2011-05-25 08:39:52 -07:00
Makefile
lib: Fix multiple definitions of clz_tab
2012-02-02 10:34:23 +11:00
md5.c
crypto: Move md5_transform to lib/md5.c
2011-08-06 18:32:45 -07:00
nlattr.c
netlink: validate NLA_MSECS length
2011-11-04 17:47:34 -04:00
parser.c
Fix common misspellings
2011-03-31 11:26:23 -03:00
pci_iomap.c
lib: add NO_GENERIC_PCI_IOPORT_MAP
2012-01-31 23:19:47 +02:00
percpu_counter.c
lib/percpu_counter.c: enclose hotplug only variables in hotplug ifdef
2011-10-31 17:30:56 -07:00
plist.c
plist: Remove the need to supply locks to plist heads
2011-07-08 14:02:53 +02:00
prio_heap.c
prio_tree.c
proportions.c
locking, lib/proportions: Annotate prop_local_percpu::lock as raw
2011-09-13 11:11:50 +02:00
radix-tree.c
radix_tree: take radix_tree_path off stack
2012-01-12 20:13:12 -08:00
random32.c
ratelimit.c
locking, printk: Annotate logbuf_lock as raw
2011-09-13 11:11:54 +02:00
rational.c
rbtree.c
Export the augmented rbtree helper functions
2011-01-28 12:16:59 +10:00
reciprocal_div.c
sch_red: Adaptative RED AQM
2011-12-08 19:52:43 -05:00
rwsem-spinlock.c
locking, rwsem: Annotate inner lock as raw
2011-09-13 11:11:59 +02:00
rwsem.c
locking, rwsem: Annotate inner lock as raw
2011-09-13 11:11:59 +02:00
scatterlist.c
sha1.c
lib/sha1.c: quiet sparse noise about symbol not declared
2011-09-13 16:09:41 -07:00
show_mem.c
arch, mm: filter disallowed nodes from arch specific show_mem functions
2011-05-25 08:39:03 -07:00
smp_processor_id.c
sched: Wrap scheduler p->cpus_allowed access
2011-10-06 12:46:56 +02:00
sort.c
spinlock_debug.c
lib/spinlock_debug.c: print owner on spinlock lockup
2011-10-31 17:30:56 -07:00
string.c
lib/string.c: fix strim() semantics for strings that have only blanks
2011-10-31 17:30:56 -07:00
string_helpers.c
swiotlb.c
swiotlb: Expose swiotlb_nr_tlb function to modules
2011-12-06 10:38:03 +00:00
syscall.c
test-kstrtox.c
kstrtox: fix compile warnings in test
2011-04-14 16:06:54 -07:00
textsearch.c
textsearch: doc - fix spelling in lib/textsearch.c.
2011-01-24 23:33:30 -08:00
timerqueue.c
Fix common misspellings
2011-03-31 11:26:23 -03:00
ts_bm.c
ts_fsm.c
ts_kmp.c
uuid.c
vsprintf.c
net: introduce and use netdev_features_t for device features sets
2011-11-16 17:43:10 -05:00