diff options
author | Mike Pall <mike> | 2011-05-31 21:38:16 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-05-31 21:38:16 +0200 |
commit | 496d3753f559b5bea5a1d48d48c9193608251a74 (patch) | |
tree | 1b242d4ead13088709444e2887fdc88cef3dd90b /src | |
parent | 514ccfceb889567c0ea5936c6363d675a957887d (diff) | |
download | luajit-496d3753f559b5bea5a1d48d48c9193608251a74.tar.gz luajit-496d3753f559b5bea5a1d48d48c9193608251a74.tar.bz2 luajit-496d3753f559b5bea5a1d48d48c9193608251a74.zip |
ARM: Optimize hash algorithm for 3-operand CPUs.
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_tab.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/lj_tab.h b/src/lj_tab.h index 0ccfb9b4..76e96f13 100644 --- a/src/lj_tab.h +++ b/src/lj_tab.h | |||
@@ -17,9 +17,17 @@ | |||
17 | /* Scramble the bits of numbers and pointers. */ | 17 | /* Scramble the bits of numbers and pointers. */ |
18 | static LJ_AINLINE uint32_t hashrot(uint32_t lo, uint32_t hi) | 18 | static LJ_AINLINE uint32_t hashrot(uint32_t lo, uint32_t hi) |
19 | { | 19 | { |
20 | #if LJ_TARGET_X86ORX64 | ||
21 | /* Prefer variant that compiles well for a 2-operand CPU. */ | ||
20 | lo ^= hi; hi = lj_rol(hi, HASH_ROT1); | 22 | lo ^= hi; hi = lj_rol(hi, HASH_ROT1); |
21 | lo -= hi; hi = lj_rol(hi, HASH_ROT2); | 23 | lo -= hi; hi = lj_rol(hi, HASH_ROT2); |
22 | hi ^= lo; hi -= lj_rol(lo, HASH_ROT3); | 24 | hi ^= lo; hi -= lj_rol(lo, HASH_ROT3); |
25 | #else | ||
26 | lo ^= hi; | ||
27 | lo = lo - lj_rol(hi, HASH_ROT1); | ||
28 | hi = lo ^ lj_rol(hi, HASH_ROT1 + HASH_ROT2); | ||
29 | hi = hi - lj_rol(lo, HASH_ROT3); | ||
30 | #endif | ||
23 | return hi; | 31 | return hi; |
24 | } | 32 | } |
25 | 33 | ||