]> granicus.if.org Git - graphviz/commitdiff
compute tclhandleEntryAlignment at compile time
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Thu, 22 Apr 2021 02:48:13 +0000 (19:48 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Wed, 28 Apr 2021 14:54:20 +0000 (07:54 -0700)
There is no need to defer this to runtime. Making this a compile-time constant
allows the compiler to constant-fold computations involving it, producing more
efficient code.

Note, this is not really even the correct notion of platform alignment. The
alignment of a type is not guaranteed to be the same as its size. Nevertheless,
we leave this alone for now.

tclpkg/tclhandle/tclhandle.c

index 8e98665929b692c388f8a6ec625dbd2eff85b2ba..f0e7c711530660eb171b7a12a87ef7ab9e9b5ce5 100644 (file)
 #include <string.h>
 
 /*
- * Variable set to contain the alignment factor (in bytes) for this machine.
- * It is set on the first table initialization.
+ * Alignment factor (in bytes) for this machine.
  */
-static uint64_t tclhandleEntryAlignment = 0;
+enum { tclhandleEntryAlignment =
+  sizeof(void*) > sizeof(uint64_t)
+    ? (sizeof(double) > sizeof(void*) ? sizeof(double) : sizeof(void*))
+    : (sizeof(double) > sizeof(uint64_t) ? sizeof(double) : sizeof(uint64_t)) };
 
 /*=============================================================================
  * tclhandleLinkInNewEntries --
@@ -159,18 +161,6 @@ tblHeader_pt tclhandleInit(char *prefix, uint64_t entrySize,
 {
     tblHeader_pt tblHdrPtr;
 
-    /*
-     * It its not been calculated yet, determine the entry alignment required
-     * for this machine.
-     */
-    if (tclhandleEntryAlignment == 0) {
-       tclhandleEntryAlignment = sizeof(void *);
-       if (sizeof(uint64_t) > tclhandleEntryAlignment)
-           tclhandleEntryAlignment = sizeof(uint64_t);
-       if (sizeof(double) > tclhandleEntryAlignment)
-           tclhandleEntryAlignment = sizeof(double);
-    }
-
     /*
      * Set up the table entry.
      */