diff options
| author | Paul Eggert <eggert@cs.ucla.edu> | 2013-02-09 14:42:33 -0800 |
|---|---|---|
| committer | Paul Eggert <eggert@cs.ucla.edu> | 2013-02-09 14:42:33 -0800 |
| commit | eff1c1900f47ec5dfb6d435325b366362d09d2db (patch) | |
| tree | 9db491fe10a82b95f493b8ae6cdfc3d56103b2fa /src/lisp.h | |
| parent | 4dde2087c47f0ef2a97c3b39d89b94b8a47baf37 (diff) | |
| download | emacs-eff1c1900f47ec5dfb6d435325b366362d09d2db.tar.gz | |
Minor hashing refactoring.
* fns.c (SXHASH_REDUCE): Move to lisp.h.
(sxhash_float): Return EMACS_UINT, for consistency with the other
hash functions.
* lisp.h (INTMASK): Now a macro, since SXHASH_REDUCE is now a
non-static inline function and therefore can't use static vars.
(SXHASH_REDUCE): Move here from fns.c, and make it inline.
* profiler.c (hashfn_profiler): Use SXHASH_REDUCE, to be consistent
with the other hash functions.
Diffstat (limited to 'src/lisp.h')
| -rw-r--r-- | src/lisp.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/lisp.h b/src/lisp.h index c15e83bd51c..14db66c6793 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -227,7 +227,7 @@ enum enum_USE_LSB_TAG { USE_LSB_TAG = 0 }; /* Lisp integers use 2 tags, to give them one extra bit, thus extending their range from, e.g., -2^28..2^28-1 to -2^29..2^29-1. */ -static EMACS_INT const INTMASK = EMACS_INT_MAX >> (INTTYPEBITS - 1); +#define INTMASK (EMACS_INT_MAX >> (INTTYPEBITS - 1)) #define case_Lisp_Int case Lisp_Int0: case Lisp_Int1 #define LISP_INT_TAG_P(x) (((x) & ~Lisp_Int1) == 0) @@ -1304,6 +1304,14 @@ sxhash_combine (EMACS_UINT x, EMACS_UINT y) return (x << 4) + (x >> (BITS_PER_EMACS_INT - 4)) + y; } +/* Hash X, returning a value that fits into a fixnum. */ + +LISP_INLINE EMACS_UINT +SXHASH_REDUCE (EMACS_UINT x) +{ + return (x ^ x >> (BITS_PER_EMACS_INT - FIXNUM_BITS)) & INTMASK; +} + /* These structures are used for various misc types. */ struct Lisp_Misc_Any /* Supertype of all Misc types. */ |
