aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2011-05-31 21:38:16 +0200
committerMike Pall <mike>2011-05-31 21:38:16 +0200
commit496d3753f559b5bea5a1d48d48c9193608251a74 (patch)
tree1b242d4ead13088709444e2887fdc88cef3dd90b /src
parent514ccfceb889567c0ea5936c6363d675a957887d (diff)
downloadluajit-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.h8
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. */
18static LJ_AINLINE uint32_t hashrot(uint32_t lo, uint32_t hi) 18static 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