diff options
| author | Mattias EngdegÄrd | 2023-11-02 17:05:26 +0100 |
|---|---|---|
| committer | Mattias EngdegÄrd | 2024-01-13 20:50:38 +0100 |
| commit | 7d93a0147a14e14d6964bf93ba11cf494b9d49fd (patch) | |
| tree | 2cce6ad4b4476616e0be3dc1fcf5f68d2ae7692d /src/bytecode.c | |
| parent | 0a998938ca1b7e5e6f09d14b4a62ec7089be2af6 (diff) | |
| download | emacs-7d93a0147a14e14d6964bf93ba11cf494b9d49fd.tar.gz emacs-7d93a0147a14e14d6964bf93ba11cf494b9d49fd.zip | |
Share hash table test structs
This saves several words in the hash table object at the cost of an
indirection at runtime. This seems to be a gain in overall
performance.
FIXME: We cache hash test objects in a rather clumsy way. A better
solution is sought.
* src/lisp.h (struct Lisp_Hash_Table): Use a pointer to the test
struct. All references adapted.
* src/alloc.c (garbage_collect):
* src/fns.c (struct hash_table_user_test, hash_table_user_tests)
(mark_fns, get_hash_table_user_test): New state for caching test
structs, and functions managing it.
Diffstat (limited to 'src/bytecode.c')
| -rw-r--r-- | src/bytecode.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index a0f02d518b7..ed6e2b34e77 100644 --- a/src/bytecode.c +++ b/src/bytecode.c | |||
| @@ -1743,7 +1743,7 @@ exec_byte_code (Lisp_Object fun, ptrdiff_t args_template, | |||
| 1743 | 1743 | ||
| 1744 | /* h->count is a faster approximation for HASH_TABLE_SIZE (h) | 1744 | /* h->count is a faster approximation for HASH_TABLE_SIZE (h) |
| 1745 | here. */ | 1745 | here. */ |
| 1746 | if (h->count <= 5 && !h->test.cmpfn) | 1746 | if (h->count <= 5 && !h->test->cmpfn) |
| 1747 | { /* Do a linear search if there are not many cases | 1747 | { /* Do a linear search if there are not many cases |
| 1748 | FIXME: 5 is arbitrarily chosen. */ | 1748 | FIXME: 5 is arbitrarily chosen. */ |
| 1749 | for (i = h->count; 0 <= --i; ) | 1749 | for (i = h->count; 0 <= --i; ) |