Files
android_kernel_xiaomi_sm8450/arch/parisc/include/asm
George Spelvin 773e1c5fa4 parisc: Add <asm/hash.h>
PA-RISC is interesting; integer multiplies are implemented in the
FPU, so are painful in the kernel.  But it tries to be friendly to
shift-and-add sequences for constant multiplies.

__hash_32 is implemented using the same shift-and-add sequence as
Microblaze, just scheduled for the PA7100.  (It's 2-way superscalar
but in-order, like the Pentium.)

hash_64 was tricky, but a suggestion from Jason Thong allowed a
good solution by breaking up the multiplier.  After a lot of manual
optimization, I found a 19-instruction sequence for the multiply that
can be executed in 10 cycles using only 4 temporaries.

(The PA8xxx can issue 4 instructions per cycle, but 2 must be ALU ops
and 2 must be loads/stores.  And the final add can't be paired.)

An alternative considered, but ultimately not used, was Thomas Wang's
64-to-32-bit integer hash.  At 12 instructions, it's smaller, but they're
all sequentially dependent, so it has longer latency.

https://web.archive.org/web/2011/http://www.concentric.net/~Ttwang/tech/inthash.htm
http://burtleburtle.net/bob/hash/integer.html

Signed-off-by: George Spelvin <linux@sciencehorizons.net>
Cc: Helge Deller <deller@gmx.de>
Cc: linux-parisc@vger.kernel.org
Signed-off-by: Helge Deller <deller@gmx.de>
2016-08-02 16:44:29 +02:00
..
2014-04-18 14:20:41 +02:00
2012-06-05 14:10:17 +09:00
2013-11-07 22:28:26 +01:00
2012-03-28 18:30:02 +01:00
2013-11-07 22:28:54 +01:00
2016-08-02 16:44:29 +02:00
2015-09-08 15:30:37 +02:00
2010-10-07 14:08:55 +01:00
2016-05-22 21:56:37 +02:00
2011-07-26 16:49:47 -07:00
2012-03-28 18:30:02 +01:00
2013-11-07 22:27:20 +01:00
2012-03-28 18:30:02 +01:00