unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Pip Cet <pipcet@protonmail.com>
To: "Gerd Möllmann" <gerd.moellmann@gmail.com>
Cc: Helmut Eller <eller.helmut@gmail.com>,
	Eli Zaretskii <eliz@gnu.org>, Emacs Devel <emacs-devel@gnu.org>
Subject: Re: MPS: weak hash tables
Date: Wed, 03 Jul 2024 09:31:19 +0000	[thread overview]
Message-ID: <-plQctKgNkvp-LJ9ov2QAiXQKxd9V-hI0yz_opRGxQtbknubCjH4rH2-ymgbw_Qr1ZhB1rtlmiEW8XtuIVNr7nR_Yj20AH6WkH6kUGp68g0=@protonmail.com> (raw)
In-Reply-To: <m24j96c249.fsf@pro2.fritz.box>

[-- Attachment #1: Type: text/plain, Size: 438 bytes --]

On Wednesday, July 3rd, 2024 at 08:26, Gerd Möllmann <gerd.moellmann@gmail.com> wrote:
> The PVEC_FREE lead to an abort, which I think I fixed. Please pull.

Thanks, sorry for missing that!

So I've implemented Helmut's idea, but it's turned out uglier than I thought it would...

And of course the same needs to be done for the marker vector, right?

Just thinking about a different idea, but it's not quite there yet...

Pip

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Use-two-words-for-each-entry-in-a-weak-hash-table.patch --]
[-- Type: text/x-patch; name=0001-Use-two-words-for-each-entry-in-a-weak-hash-table.patch, Size: 15861 bytes --]

From 0e2b417953fc578c819f31ee9e5b911cf827ffbf Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@protonmail.com>
Date: Wed, 3 Jul 2024 09:22:03 +0000
Subject: [PATCH] Use two words for each entry in a weak hash table

---
 src/fns.c   |  36 ++++++++++--------
 src/igc.c   | 106 ++++++++++++++++++++++++++++++++++++++++++++++++----
 src/lisp.h  |  41 ++++++++++----------
 src/print.c |   2 +
 4 files changed, 142 insertions(+), 43 deletions(-)

diff --git a/src/fns.c b/src/fns.c
index 250cf6c3a7e..ad111dd6708 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -5415,19 +5415,19 @@ sweep_weak_table (struct Lisp_Hash_Table *h, bool remove_entries_p)
 set_weak_hash_next_slot (struct Lisp_Weak_Hash_Table *h, ptrdiff_t idx, ptrdiff_t val)
 {
   eassert (idx >= 0 && idx < XFIXNUM (h->strong->table_size));
-  h->strong->next[idx].lisp_object = make_fixnum (val);
+  h->strong->next[idx] = make_weak_hash_table_entry (make_fixnum (val));
 }
 static void
 set_weak_hash_hash_slot (struct Lisp_Weak_Hash_Table *h, ptrdiff_t idx, hash_hash_t val)
 {
   eassert (idx >= 0 && idx < XFIXNUM (h->strong->table_size));
-  h->strong->hash[idx].lisp_object = make_fixnum (val);
+  h->strong->hash[idx] = make_weak_hash_table_entry (make_fixnum (val));
 }
 static void
 set_weak_hash_index_slot (struct Lisp_Weak_Hash_Table *h, ptrdiff_t idx, ptrdiff_t val)
 {
   eassert (idx >= 0 && idx < weak_hash_table_index_size (h));
-  h->strong->index[idx].lisp_object = make_fixnum (val);
+  h->strong->index[idx] = make_weak_hash_table_entry (make_fixnum (val));
 }
 
 static struct Lisp_Weak_Hash_Table *
@@ -5442,14 +5442,14 @@ check_maybe_weak_hash_table (Lisp_Object obj)
 WEAK_HASH_NEXT (struct Lisp_Weak_Hash_Table *h, ptrdiff_t idx)
 {
   eassert (idx >= 0 && idx < XFIXNUM (h->strong->table_size));
-  return XFIXNUM (h->strong->next[idx].lisp_object);
+  return XFIXNUM (weak_hash_table_entry (h->strong->next[idx]));
 }
 
 static ptrdiff_t
 WEAK_HASH_INDEX (struct Lisp_Weak_Hash_Table *h, ptrdiff_t idx)
 {
   eassert (idx >= 0 && idx < weak_hash_table_index_size (h));
-  return XFIXNUM (h->strong->index[idx].lisp_object);
+  return XFIXNUM (weak_hash_table_entry (h->strong->index[idx]));
 }
 
 static struct Lisp_Weak_Hash_Table *
@@ -5547,19 +5547,22 @@ make_weak_hash_table (const struct hash_table_test *test, EMACS_INT size,
     {
       for (ptrdiff_t i = 0; i < size; i++)
 	{
-	  h->strong->key[i].lisp_object = HASH_UNUSED_ENTRY_KEY;
-	  h->strong->value[i].ptr = 0;
+	  h->strong->key[i] =
+	    make_weak_hash_table_entry (HASH_UNUSED_ENTRY_KEY);
+	  h->strong->value[i] =
+	    make_weak_hash_table_entry (Qnil);
 	}
 
       for (ptrdiff_t i = 0; i < size - 1; i++)
-	h->strong->next[i].lisp_object = make_fixnum(i + 1);
-      h->strong->next[size - 1].lisp_object = make_fixnum(-1);
+	h->strong->next[i] = make_weak_hash_table_entry (make_fixnum(i + 1));
+      h->strong->next[size - 1] =
+	make_weak_hash_table_entry (make_fixnum(-1));
 
       int index_bits = compute_hash_index_bits (size);
       h->strong->index_bits = make_fixnum (index_bits);
       ptrdiff_t index_size = weak_hash_table_index_size (h);
       for (ptrdiff_t i = 0; i < index_size; i++)
-	h->strong->index[i].lisp_object = make_fixnum (-1);
+	h->strong->index[i] = make_weak_hash_table_entry (make_fixnum (-1));
 
       h->strong->next_free = make_fixnum (0);
     }
@@ -5626,18 +5629,19 @@ maybe_resize_weak_hash_table (struct Lisp_Weak_Hash_Table *h)
 	}
 
       for (ptrdiff_t i = 0; i < new_size - 1; i++)
-	strong->next[i].lisp_object = make_fixnum (i + 1);
-      strong->next[new_size - 1].lisp_object = make_fixnum (-1);
+	strong->next[i] = make_weak_hash_table_entry (make_fixnum (i + 1));
+      strong->next[new_size - 1] =
+	make_weak_hash_table_entry (make_fixnum (-1));
 
       for (ptrdiff_t i = 0; i < new_size; i++)
 	{
-	  strong->key[i].lisp_object = HASH_UNUSED_ENTRY_KEY;
-	  strong->value[i].lisp_object = Qnil;
+	  strong->key[i] = make_weak_hash_table_entry (HASH_UNUSED_ENTRY_KEY);
+	  strong->value[i] = make_weak_hash_table_entry (Qnil);
 	}
 
       ptrdiff_t index_size = (ptrdiff_t)1 << index_bits;
       for (ptrdiff_t i = 0; i < index_size; i++)
-	strong->index[i].lisp_object = make_fixnum (-1);
+	strong->index[i] = make_weak_hash_table_entry (make_fixnum (-1));
 
       strong->index_bits = make_fixnum (index_bits);
       strong->table_size = make_fixnum (new_size);
@@ -5801,7 +5805,7 @@ weak_hash_clear (struct Lisp_Weak_Hash_Table *h)
 
   ptrdiff_t index_size = weak_hash_table_index_size (h);
   for (ptrdiff_t i = 0; i < index_size; i++)
-    h->strong->index[i].lisp_object = make_fixnum (-1);
+    h->strong->index[i] = make_weak_hash_table_entry (make_fixnum (-1));
 
   h->strong->next_free = make_fixnum (0);
 }
diff --git a/src/igc.c b/src/igc.c
index 1b1e69ede5d..efb8106d139 100644
--- a/src/igc.c
+++ b/src/igc.c
@@ -281,6 +281,8 @@ is_builtin_subr (enum igc_obj_type type, void *client)
 static bool
 has_header (void *client, bool is_vector)
 {
+  if (client == NULL)
+    return false;
   if (is_vector && is_builtin_subr (IGC_OBJ_VECTOR, client))
     return false;
   if (c_symbol_p (client))
@@ -912,6 +914,28 @@ fix_raw (mps_ss_t ss, mps_addr_t *p)
   return MPS_RES_OK;
 }
 
+static mps_res_t
+fix_base (mps_ss_t ss, mps_addr_t *p)
+{
+  MPS_SCAN_BEGIN (ss)
+  {
+    mps_addr_t base = *p;
+    if (base == NULL)
+      return MPS_RES_OK;
+    if (is_aligned (base))
+      {
+	if (MPS_FIX1 (ss, base))
+	  {
+	    mps_res_t res = MPS_FIX2 (ss, p);
+	    if (res != MPS_RES_OK)
+	      return res;
+	  }
+      }
+  }
+  MPS_SCAN_END (ss);
+  return MPS_RES_OK;
+}
+
 #define IGC_FIX12_OBJ(ss, p)                           \
   do                                                   \
     {                                                  \
@@ -932,6 +956,16 @@ #define IGC_FIX12_RAW(ss, p)                                     \
     }                                                            \
   while (0)
 
+#define IGC_FIX12_BASE(ss, p)						\
+  do									\
+    {									\
+      mps_res_t res;							\
+      MPS_FIX_CALL (ss, res = fix_base (ss, (mps_addr_t *) (p)));	\
+      if (res != MPS_RES_OK)						\
+	return res;							\
+    }									\
+  while (0)
+
 #define IGC_FIX12_NOBJS(ss, a, n)                            \
   do                                                         \
     {                                                        \
@@ -1917,7 +1951,7 @@ fix_weak_hash_table_strong_part (mps_ss_t ss, struct Lisp_Weak_Hash_Table_Strong
 	  }
 	for (ssize_t i = 2 * XFIXNUM (t->table_size); i < limit; i++)
 	  {
-	    IGC_FIX12_OBJ (ss, &t->entries[i].lisp_object);
+	    IGC_FIX12_BASE (ss, &t->entries[i].intptr);
 	  }
       }
   }
@@ -1953,9 +1987,9 @@ fix_weak_hash_table_weak_part (mps_ss_t ss, struct Lisp_Weak_Hash_Table_Weak_Par
 
 	for (ssize_t i = 0; i < limit; i++)
 	  {
-	    bool was_nil = NILP (w->entries[i].lisp_object);
-	    IGC_FIX12_OBJ (ss, &w->entries[i].lisp_object);
-	    bool is_now_nil = NILP (w->entries[i].lisp_object);
+	    bool was_nil = w->entries[i].intptr == 0;
+	    IGC_FIX12_BASE (ss, &w->entries[i].intptr);
+	    bool is_now_nil = w->entries[i].intptr == 0;
 
 	    if (is_now_nil && !was_nil)
 	      {
@@ -3813,8 +3847,63 @@ igc_make_hash_table_vec (size_t n)
   return alloc (n * sizeof (Lisp_Object), IGC_OBJ_HASH_VEC);
 }
 
+Lisp_Object
+weak_hash_table_entry (struct Lisp_Weak_Hash_Table_Entry entry)
+{
+  intptr_t alignment = entry.intptr & 1;
+  mps_addr_t client;
+
+  if (alignment == 0)
+    {
+      client = base_to_client ((mps_addr_t)entry.intptr);
+    }
+  else
+    {
+      intptr_t real_ptr = entry.intptr ^ alignment;
+      client = (mps_addr_t)real_ptr;
+    }
+
+  switch (XFIXNUM (entry.fixnum))
+    {
+    case Lisp_Symbol:
+      return make_lisp_symbol (client);
+    case_Lisp_Int:
+      return make_fixnum (entry.intptr >> 1);
+    default:
+      return make_lisp_ptr (client, XFIXNUM (entry.fixnum));
+    }
+}
+
+struct Lisp_Weak_Hash_Table_Entry
+make_weak_hash_table_entry (Lisp_Object obj)
+{
+  struct Lisp_Weak_Hash_Table_Entry entry = { 0, };
+  mps_addr_t client;
+  entry.fixnum = make_fixnum (XTYPE (obj));
+
+  if (FIXNUMP (obj))
+    {
+      entry.intptr = (XFIXNUM (obj) << 1) + 1;
+      return entry;
+    }
+  else if (BARE_SYMBOL_P (obj))
+    client = XBARE_SYMBOL (obj);
+  else
+    client = XUNTAG (obj, XTYPE (obj), void);
+
+  if (has_header (client, VECTORLIKEP (obj)))
+    entry.intptr = (intptr_t)client_to_base (client);
+  else
+    {
+      entry.intptr = (intptr_t)client + 1;
+      eassert (entry.intptr & 1);
+    }
+  return entry;
+}
+
 struct Lisp_Weak_Hash_Table_Strong_Part *
-igc_alloc_weak_hash_table_strong_part (hash_table_weakness_t weak, size_t size, size_t index_bits)
+igc_alloc_weak_hash_table_strong_part (hash_table_weakness_t weak,
+				       size_t size, size_t index_bits)
 {
   size_t total_size;
   switch (weak)
@@ -3832,12 +3921,13 @@ igc_alloc_weak_hash_table_strong_part (hash_table_weakness_t weak, size_t size,
       emacs_abort ();
     }
   return alloc (sizeof (struct Lisp_Weak_Hash_Table_Strong_Part) +
-		total_size * sizeof (union Lisp_Weak_Hash_Table_Entry),
+		total_size * sizeof (struct Lisp_Weak_Hash_Table_Entry),
 		IGC_OBJ_WEAK_HASH_TABLE_STRONG_PART);
 }
 
 struct Lisp_Weak_Hash_Table_Weak_Part *
-igc_alloc_weak_hash_table_weak_part (hash_table_weakness_t weak, size_t size, size_t index_bits)
+igc_alloc_weak_hash_table_weak_part (hash_table_weakness_t weak,
+				     size_t size, size_t index_bits)
 {
   size_t total_size;
   switch (weak)
@@ -3855,7 +3945,7 @@ igc_alloc_weak_hash_table_weak_part (hash_table_weakness_t weak, size_t size, si
       emacs_abort ();
     }
   return alloc (sizeof (struct Lisp_Weak_Hash_Table_Weak_Part) +
-		total_size * sizeof (union Lisp_Weak_Hash_Table_Entry),
+		total_size * sizeof (struct Lisp_Weak_Hash_Table_Entry),
 		IGC_OBJ_WEAK_HASH_TABLE_WEAK_PART);
 }
 
diff --git a/src/lisp.h b/src/lisp.h
index 933441d3a7e..3fc55982d24 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2609,13 +2609,16 @@ #define DOOBARRAY(oa, it)					\
    (hash) indices.  It's signed and a subtype of ptrdiff_t.  */
 typedef int32_t hash_idx_t;
 
-/* The reason for this unusual union is an MPS peculiarity on 32-bit x86 systems. */
-union Lisp_Weak_Hash_Table_Entry
+/* The reason for this unusual structure is an MPS peculiarity on 32-bit x86 systems. */
+struct Lisp_Weak_Hash_Table_Entry
 {
-  void *ptr;
-  Lisp_Object lisp_object; /* must be a fixnum or HASH_UNUSED_ENTRY_KEY! */
+  intptr_t intptr; /* must be an MPS base pointer */
+  Lisp_Object fixnum; /* a fixnum indicating the tag, or just a fixnum */
 };
 
+extern Lisp_Object weak_hash_table_entry (struct Lisp_Weak_Hash_Table_Entry entry);
+extern struct Lisp_Weak_Hash_Table_Entry make_weak_hash_table_entry (Lisp_Object);
+
 struct Lisp_Weak_Hash_Table_Strong_Part
 {
   Lisp_Object index_bits;
@@ -2623,11 +2626,11 @@ #define DOOBARRAY(oa, it)					\
   Lisp_Object table_size;
   struct Lisp_Weak_Hash_Table_Weak_Part *weak;
   const struct hash_table_test *test;
-  union Lisp_Weak_Hash_Table_Entry *index; /* internal pointer */
-  union Lisp_Weak_Hash_Table_Entry *hash; /* either internal pointer or pointer to dependent object */
-  union Lisp_Weak_Hash_Table_Entry *key; /* either internal pointer or pointer to dependent object */
-  union Lisp_Weak_Hash_Table_Entry *value; /* either internal pointer or pointer to dependent object */
-  union Lisp_Weak_Hash_Table_Entry *next; /* internal pointer */
+  struct Lisp_Weak_Hash_Table_Entry *index; /* internal pointer to an all-fixnum array */
+  struct Lisp_Weak_Hash_Table_Entry *hash; /* internal pointer to an all-fixnum array */
+  struct Lisp_Weak_Hash_Table_Entry *next; /* internal pointer to an all-fixnum array */
+  struct Lisp_Weak_Hash_Table_Entry *key; /* either internal pointer or pointer to dependent object */
+  struct Lisp_Weak_Hash_Table_Entry *value; /* either internal pointer or pointer to dependent object */
   hash_table_weakness_t weakness : 3;
   hash_table_std_test_t frozen_test : 2;
 
@@ -2639,13 +2642,13 @@ #define DOOBARRAY(oa, it)					\
      pure tables are not, and while a table is being mutated it is
      immutable for recursive attempts to mutate it.  */
   bool_bf mutable : 1;
-  union Lisp_Weak_Hash_Table_Entry entries[FLEXIBLE_ARRAY_MEMBER];
+  struct Lisp_Weak_Hash_Table_Entry entries[FLEXIBLE_ARRAY_MEMBER];
 };
 
 struct Lisp_Weak_Hash_Table_Weak_Part
 {
   struct Lisp_Weak_Hash_Table_Strong_Part *strong;
-  union Lisp_Weak_Hash_Table_Entry entries[FLEXIBLE_ARRAY_MEMBER];
+  struct Lisp_Weak_Hash_Table_Entry entries[FLEXIBLE_ARRAY_MEMBER];
 };
 
 struct Lisp_Weak_Hash_Table
@@ -2860,13 +2863,13 @@ make_lisp_weak_hash_table (struct Lisp_Weak_Hash_Table *h)
 WEAK_HASH_KEY (const struct Lisp_Weak_Hash_Table *h, ptrdiff_t idx)
 {
   eassert (idx >= 0 && idx < XFIXNUM (h->strong->table_size));
-  return h->strong->key[idx].lisp_object;
+  return weak_hash_table_entry (h->strong->key[idx]);
 }
 
 INLINE Lisp_Object
 WEAK_HASH_VALUE (const struct Lisp_Weak_Hash_Table *h, ptrdiff_t idx)
 {
-  return h->strong->value[idx].lisp_object;
+  return weak_hash_table_entry (h->strong->value[idx]);
 }
 
 /* Value is the hash code computed for entry IDX in hash table H.  */
@@ -2874,7 +2877,7 @@ WEAK_HASH_VALUE (const struct Lisp_Weak_Hash_Table *h, ptrdiff_t idx)
 WEAK_HASH_HASH (const struct Lisp_Weak_Hash_Table *h, ptrdiff_t idx)
 {
   eassert (idx >= 0 && idx < XFIXNUM (h->strong->table_size));
-  return XFIXNUM (h->strong->hash[idx].lisp_object);
+  return XFIXNUM (weak_hash_table_entry (h->strong->hash[idx]));
 }
 
 /* Value is the size of hash table H.  */
@@ -2925,14 +2928,14 @@ weak_hash_from_key (struct Lisp_Weak_Hash_Table *h, Lisp_Object key)
    The body may remove the current entry or alter its value slot, but not
    mutate TABLE in any other way.  */
 # define DOHASH_WEAK(h, k, v)						\
-  for (union Lisp_Weak_Hash_Table_Entry *dohash_##k##_##v##_k = (h)->strong->key, \
+  for (struct Lisp_Weak_Hash_Table_Entry *dohash_##k##_##v##_k = (h)->strong->key, \
 	 *dohash_##k##_##v##_v = (h)->strong->value,			\
 	 *dohash_##k##_##v##_end = dohash_##k##_##v##_k			\
 	 + WEAK_HASH_TABLE_SIZE (h),					\
 	 *dohash_##k##_##v##_base = dohash_##k##_##v##_k;		\
        dohash_##k##_##v##_k < dohash_##k##_##v##_end			\
-	 && (k = dohash_##k##_##v##_k[0].lisp_object,			\
-	     v = dohash_##k##_##v##_v[0].lisp_object, /*maybe unused*/ (void)v,	\
+	 && (k = weak_hash_table_entry (dohash_##k##_##v##_k[0]),	\
+	     v = weak_hash_table_entry (dohash_##k##_##v##_v[0]),	\
            true);			                                \
        eassert (dohash_##k##_##v##_base == (h)->strong->key		\
 		&& dohash_##k##_##v##_end				\
@@ -4255,14 +4258,14 @@ set_hash_value_slot (struct Lisp_Hash_Table *h, ptrdiff_t idx, Lisp_Object val)
 set_weak_hash_key_slot (struct Lisp_Weak_Hash_Table *h, ptrdiff_t idx, Lisp_Object val)
 {
   eassert (idx >= 0 && idx < XFIXNUM (h->strong->table_size));
-  h->strong->key[idx].lisp_object = val;
+  h->strong->key[idx] = make_weak_hash_table_entry (val);
 }
 
 INLINE void
 set_weak_hash_value_slot (struct Lisp_Weak_Hash_Table *h, ptrdiff_t idx, Lisp_Object val)
 {
   eassert (idx >= 0 && idx < XFIXNUM (h->strong->table_size) );
-  h->strong->value[idx].lisp_object = val;
+  h->strong->value[idx] = make_weak_hash_table_entry (val);
 }
 #endif
 
diff --git a/src/print.c b/src/print.c
index fa71de8f2dd..8fd3473e5c2 100644
--- a/src/print.c
+++ b/src/print.c
@@ -2788,9 +2788,11 @@ print_object (Lisp_Object obj, Lisp_Object printcharfun, bool escapeflag)
 		--print_depth;   /* Done with this.  */
 	      }
 	    goto next_obj;
+#ifdef HAVE_MPS
 	  strong_hash_table:
 	    h = XHASH_TABLE (obj);
 	    goto hash_table_data;
+#endif
 	  }
 
 #ifdef HAVE_MPS
-- 
2.45.2


  reply	other threads:[~2024-07-03  9:31 UTC|newest]

Thread overview: 196+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-01 20:47 MPS: weak hash tables Gerd Möllmann
2024-07-01 21:16 ` Pip Cet
2024-07-01 23:10   ` Pip Cet
2024-07-02  4:19     ` Gerd Möllmann
2024-07-02  5:47     ` Gerd Möllmann
2024-07-02  6:23       ` Pip Cet
2024-07-02  6:55         ` Gerd Möllmann
2024-07-02  9:15           ` Pip Cet
2024-07-02  9:37             ` Gerd Möllmann
2024-07-02 10:11               ` Gerd Möllmann
2024-07-02 11:36               ` Gerd Möllmann
2024-07-02 13:15                 ` Eli Zaretskii
2024-07-02 13:16                   ` Gerd Möllmann
2024-07-02 13:42                     ` Eli Zaretskii
2024-07-02 15:03                       ` Pip Cet
2024-07-02 15:17                         ` Helmut Eller
2024-07-02 15:35                         ` Eli Zaretskii
2024-07-02 16:34                           ` Pip Cet
2024-07-02 18:20                             ` Eli Zaretskii
2024-07-02 20:16                               ` Pip Cet
2024-07-03  6:30                               ` Gerd Möllmann
2024-07-03 11:23                                 ` Eli Zaretskii
2024-07-03 11:28                                   ` Gerd Möllmann
2024-07-02 13:02             ` Eli Zaretskii
2024-07-02 12:45           ` Eli Zaretskii
2024-07-02 11:23         ` Helmut Eller
2024-07-03  6:11           ` Gerd Möllmann
2024-07-03  6:33             ` Pip Cet
2024-07-03  7:04               ` Gerd Möllmann
2024-07-03  7:24                 ` Helmut Eller
2024-07-03  7:25                 ` Pip Cet
2024-07-03  7:38                   ` Gerd Möllmann
2024-07-03  8:26                     ` Gerd Möllmann
2024-07-03  9:31                       ` Pip Cet [this message]
2024-07-03 10:22                         ` Gerd Möllmann
2024-07-03 10:41                           ` Pip Cet
2024-07-03 11:17                             ` Gerd Möllmann
2024-07-03 20:20                           ` Pip Cet
2024-07-04  7:17                             ` Gerd Möllmann
2024-07-04 15:24                               ` Pip Cet
2024-07-04 16:53                                 ` Gerd Möllmann
2024-07-04 20:05                                   ` Pip Cet
2024-07-05  3:50                                     ` Gerd Möllmann
2024-07-05 12:08                                       ` Pip Cet
2024-07-05 12:54                                         ` Gerd Möllmann
2024-07-05 13:27                                         ` Eli Zaretskii
2024-07-05 20:35                                           ` Pip Cet
2024-07-06  6:10                                             ` Eli Zaretskii
2024-07-06  6:31                                               ` Pip Cet
2024-07-06  7:00                                                 ` Eli Zaretskii
2024-07-06  7:40                                                   ` Gerd Möllmann
2024-07-06  9:13                                                   ` Pip Cet
2024-07-06 10:59                                                     ` Eli Zaretskii
2024-07-05 18:14                                         ` Helmut Eller
2024-07-05 19:25                                           ` Pip Cet
2024-07-06  3:39                                             ` Gerd Möllmann
2024-07-06  5:58                                               ` Pip Cet
2024-07-06  6:20                                                 ` Gerd Möllmann
2024-07-06  6:29                                                   ` Pip Cet
2024-07-06  6:51                                                     ` Gerd Möllmann
2024-07-06  6:46                                                 ` Eli Zaretskii
2024-07-06  9:23                                                   ` Pip Cet
2024-07-06 11:03                                                     ` Eli Zaretskii
2024-07-06  3:38                                           ` Gerd Möllmann
2024-07-06  9:47                                             ` Helmut Eller
2024-07-06 10:38                                               ` Gerd Möllmann
2024-07-06 11:13                                               ` Eli Zaretskii
2024-07-06 13:50                                                 ` Helmut Eller
2024-07-06 13:59                                                   ` Eli Zaretskii
2024-07-06 14:38                                                     ` Gerd Möllmann
2024-07-06 16:20                                                     ` Helmut Eller
2024-07-06 16:33                                                       ` Eli Zaretskii
2024-07-06 16:48                                                         ` Helmut Eller
2024-07-06 17:21                                                           ` Eli Zaretskii
2024-07-06 17:59                                                             ` Helmut Eller
2024-07-06 18:14                                                             ` Gerd Möllmann
2024-07-06 18:56                                                               ` Eli Zaretskii
2024-07-06 11:37                                               ` Pip Cet
2024-07-06 11:40                                               ` Gerd Möllmann
2024-07-06 11:57                                               ` Gerd Möllmann
2024-07-06 12:03                                                 ` Eli Zaretskii
2024-07-06 12:16                                                   ` Gerd Möllmann
2024-07-06 12:23                                                     ` Pip Cet
2024-07-06 12:39                                                       ` Gerd Möllmann
2024-07-06 12:30                                                     ` Eli Zaretskii
2024-07-06 12:43                                                       ` Gerd Möllmann
2024-07-06 13:53                                                         ` Eli Zaretskii
2024-07-06 12:36                                                     ` Gerd Möllmann
2024-07-06 14:00                                                       ` Helmut Eller
2024-07-06 14:08                                                         ` Gerd Möllmann
2024-07-06 14:24                                                           ` Gerd Möllmann
2024-07-06 14:44                                                           ` Helmut Eller
2024-07-06 14:52                                                             ` Gerd Möllmann
2024-07-06 15:49                                                               ` Pip Cet
2024-07-06 16:31                                                                 ` Gerd Möllmann
2024-07-06 16:56                                                                   ` Pip Cet
2024-07-06 17:28                                                                     ` Gerd Möllmann
2024-07-06 17:31                                                                       ` Gerd Möllmann
2024-07-06 18:30                                                                       ` Pip Cet
2024-07-06 20:00                                                                         ` Gerd Möllmann
2024-07-06 20:09                                                                           ` Ihor Radchenko
2024-07-07  3:55                                                                             ` Gerd Möllmann
2024-07-07  4:27                                                                             ` Gerd Möllmann
2024-07-07  4:30                                                                               ` Gerd Möllmann
2024-07-07  6:38                                                                               ` Pip Cet
2024-07-07  7:31                                                                                 ` Gerd Möllmann
2024-07-07  7:44                                                                                 ` Helmut Eller
2024-07-07  8:10                                                                                   ` Gerd Möllmann
2024-07-07  8:24                                                                                     ` Gerd Möllmann
2024-07-07  8:47                                                                                       ` Pip Cet
2024-07-07  9:24                                                                                         ` Gerd Möllmann
2024-07-07  9:26                                                                                           ` Gerd Möllmann
2024-07-07 10:47                                                                                           ` Eli Zaretskii
2024-07-07 11:19                                                                                             ` Gerd Möllmann
2024-07-07 14:09                                                                                               ` Eli Zaretskii
2024-07-07 14:15                                                                                                 ` Gerd Möllmann
2024-07-07 14:42                                                                                                   ` Eli Zaretskii
2024-07-07 14:52                                                                                                     ` Gerd Möllmann
2024-07-07 15:34                                                                                                       ` Eli Zaretskii
2024-07-07 15:36                                                                                                         ` Gerd Möllmann
2024-07-07 16:00                                                                                                           ` Eli Zaretskii
2024-07-07 17:08                                                                                                             ` Gerd Möllmann
2024-07-07 17:49                                                                                                               ` Eli Zaretskii
2024-07-07 18:15                                                                                                                 ` Gerd Möllmann
2024-07-07 18:22                                                                                                                   ` Eli Zaretskii
2024-07-07 18:29                                                                                                                     ` Gerd Möllmann
2024-07-07 14:16                                                                                                 ` Gerd Möllmann
2024-07-07 14:18                                                                                                   ` Gerd Möllmann
2024-07-07 10:57                                                                                           ` Pip Cet
2024-07-07 11:35                                                                                             ` Gerd Möllmann
2024-07-07 11:48                                                                                               ` Gerd Möllmann
2024-07-07 14:07                                                                                                 ` Gerd Möllmann
2024-07-07 14:21                                                                                                 ` Pip Cet
2024-07-07 14:27                                                                                                   ` Gerd Möllmann
2024-07-07 15:22                                                                                                   ` Helmut Eller
2024-07-07 15:40                                                                                                     ` Gerd Möllmann
2024-07-07 15:52                                                                                                       ` Helmut Eller
2024-07-07 15:56                                                                                                         ` Gerd Möllmann
2024-07-07 15:57                                                                                                         ` Pip Cet
2024-07-07 16:26                                                                                                           ` Helmut Eller
2024-07-07 17:03                                                                                                             ` Gerd Möllmann
2024-07-07 18:40                                                                                                               ` Gerd Möllmann
2024-07-07 18:53                                                                                                                 ` Helmut Eller
2024-07-07 19:00                                                                                                                   ` Gerd Möllmann
2024-07-07 19:31                                                                                                                     ` Pip Cet
2024-07-07 19:36                                                                                                                       ` Gerd Möllmann
2024-07-08  9:11                                                                                                                     ` MPS: commit limit Gerd Möllmann
2024-07-10  6:46                                                                                                                       ` Helmut Eller
2024-07-10  7:08                                                                                                                         ` Gerd Möllmann
2024-07-16 15:16                                                                                                                       ` Helmut Eller
2024-07-16 15:27                                                                                                                         ` Eli Zaretskii
2024-07-16 15:43                                                                                                                           ` Helmut Eller
2024-07-16 15:54                                                                                                                             ` Eli Zaretskii
2024-07-16 16:29                                                                                                                               ` Helmut Eller
2024-07-16 16:39                                                                                                                                 ` Gerd Möllmann
2024-07-16 16:43                                                                                                                                   ` Pip Cet
2024-07-16 16:56                                                                                                                                     ` Gerd Möllmann
2024-07-16 15:32                                                                                                                         ` Eli Zaretskii
2024-07-16 16:27                                                                                                                           ` Helmut Eller
2024-07-16 18:49                                                                                                                             ` Pip Cet
2024-07-17  6:15                                                                                                                               ` Helmut Eller
2024-07-16 16:32                                                                                                                         ` Pip Cet
2024-07-16 16:48                                                                                                                           ` Helmut Eller
2024-07-08  5:11                                                                                                             ` MPS: weak hash tables Pip Cet
2024-07-08  5:17                                                                                                               ` Gerd Möllmann
2024-07-08  5:37                                                                                                                 ` Pip Cet
2024-07-08  5:43                                                                                                                   ` Gerd Möllmann
2024-07-07  8:49                                                                                       ` Gerd Möllmann
2024-07-08  9:16                                                         ` Andrea Corallo
2024-07-08  9:24                                                           ` Gerd Möllmann
2024-07-08  9:54                                                             ` Andrea Corallo
2024-07-08 10:10                                                               ` Gerd Möllmann
2024-07-08 11:57                                                             ` MPS: out-of-memory Eli Zaretskii
2024-07-08 13:46                                                               ` Gerd Möllmann
2024-07-08 16:45                                                                 ` Pip Cet
2024-07-08 18:26                                                                   ` Gerd Möllmann
2024-07-08 19:44                                                                     ` Pip Cet
2024-07-09  3:58                                                                       ` Gerd Möllmann
2024-07-08 18:27                                                                   ` Helmut Eller
2024-07-08 18:31                                                                     ` Gerd Möllmann
2024-07-08 19:14                                                                       ` Eli Zaretskii
2024-07-08 19:35                                                                         ` Gerd Möllmann
2024-07-08 19:08                                                                     ` Eli Zaretskii
2024-07-08 19:31                                                                     ` Pip Cet
2024-07-04 15:22                         ` MPS: weak hash tables Helmut Eller
2024-07-04 15:33                           ` Pip Cet
2024-07-04 16:46                             ` Gerd Möllmann
2024-07-04 16:43                           ` Gerd Möllmann
2024-07-02 13:50         ` Mattias Engdegård
2024-07-02  6:57     ` Gerd Möllmann
2024-07-02  7:15       ` Gerd Möllmann
2024-07-02  8:46         ` Ihor Radchenko
2024-07-02  8:59           ` Gerd Möllmann
2024-07-02  9:33             ` Ihor Radchenko
2024-07-02  9:35               ` Pip Cet
2024-07-02 11:03                 ` Ihor Radchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='-plQctKgNkvp-LJ9ov2QAiXQKxd9V-hI0yz_opRGxQtbknubCjH4rH2-ymgbw_Qr1ZhB1rtlmiEW8XtuIVNr7nR_Yj20AH6WkH6kUGp68g0=@protonmail.com' \
    --to=pipcet@protonmail.com \
    --cc=eliz@gnu.org \
    --cc=eller.helmut@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=gerd.moellmann@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).