linux/lib
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
zlib_deflate
zlib_inflate
.gitignore
argv_split.c
atomic64_test.c
atomic64.c
audit.c
average.c
bcd.c
bch.c
bitmap.c lib/bitmap.c: quiet sparse noise about address space 2011-10-31 17:30:56 -07:00
bitrev.c
bsearch.c
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
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_rmap.c
cpu-notifier-error-inject.c
cpumask.c
crc7.c
crc8.c
crc16.c
crc32.c crc32: optimize inner loop 2012-01-10 16:30:51 -08:00
crc32defs.h
crc-ccitt.c
crc-itu-t.c
crc-t10dif.c
ctype.c
debug_locks.c
debugobjects.c debugobjects: Extend to assert that an object is initialized 2011-11-23 18:49:22 +01:00
dec_and_lock.c
decompress_bunzip2.c decompress_bunzip2: remove invalid vi modeline 2011-12-06 10:00:05 +01:00
decompress_inflate.c
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
decompress.c
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
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
find_next_bit.c
flex_array.c
gcd.c
gen_crc32table.c
genalloc.c
halfmd4.c
hexdump.c
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_copy.c
iomap.c lib: add GENERIC_PCI_IOMAP 2011-11-28 21:12:42 +02:00
iommu-helper.c
ioremap.c
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_uevent.c driver-core: skip uevent generation when nobody is listening 2011-12-09 16:23:50 -08:00
kobject.c kobject: remove kset_find_obj_hinted() 2011-12-21 15:13:54 -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
libcrc32c.c
list_debug.c
list_sort.c
llist.c
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
lru_cache.c
Makefile lib: Fix multiple definitions of clz_tab 2012-02-02 10:34:23 +11:00
md5.c
nlattr.c netlink: validate NLA_MSECS length 2011-11-04 17:47:34 -04:00
parser.c
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
prio_heap.c
prio_tree.c
proportions.c
radix-tree.c radix_tree: take radix_tree_path off stack 2012-01-12 20:13:12 -08:00
random32.c
ratelimit.c
rational.c
rbtree.c
reciprocal_div.c sch_red: Adaptative RED AQM 2011-12-08 19:52:43 -05:00
rwsem-spinlock.c
rwsem.c
scatterlist.c
sha1.c
show_mem.c
smp_processor_id.c
sort.c
spinlock_debug.c lib/spinlock_debug.c: print owner on spinlock lockup 2011-10-31 17:30:56 -07:00
string_helpers.c
string.c lib/string.c: fix strim() semantics for strings that have only blanks 2011-10-31 17:30:56 -07:00
swiotlb.c swiotlb: Expose swiotlb_nr_tlb function to modules 2011-12-06 10:38:03 +00:00
syscall.c
test-kstrtox.c
textsearch.c
timerqueue.c
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