[Cryptech-Commits] [sw/libhal] branch master updated: Inline hal_core_base().

git at cryptech.is git at cryptech.is
Mon May 28 02:45:04 UTC 2018


This is an automated email from the git hooks/post-receive script.

sra at hactrn.net pushed a commit to branch master
in repository sw/libhal.

The following commit(s) were added to refs/heads/master by this push:
     new af18760  Inline hal_core_base().
af18760 is described below

commit af18760ea95c1f247cafe54262b79f73e8b904d6
Author: Rob Austein <sra at hactrn.net>
AuthorDate: Sun May 27 22:44:42 2018 -0400

    Inline hal_core_base().
---
 core.c | 13 +++----------
 hal.h  | 18 ++++++++++++++++--
 2 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/core.c b/core.c
index 10f624d..e170210 100644
--- a/core.c
+++ b/core.c
@@ -103,6 +103,9 @@ static inline hal_core_t *probe_cores(void)
     { "modexpa7", 7 * CORE_SIZE }, /* ModexpA7 uses eight slots */
   };
 
+  if (offsetof(hal_core_t, info) != 0)
+    return NULL;                /* Paranoia, see hal.h */
+
   if (head != NULL)
     return head;
 
@@ -302,16 +305,6 @@ void hal_core_free(hal_core_t *core)
   }
 }
 
-hal_addr_t hal_core_base(const hal_core_t *core)
-{
-  return core == NULL ? 0 : core->info.base;
-}
-
-const hal_core_info_t *hal_core_info(const hal_core_t *core)
-{
-  return core == NULL ? NULL : &core->info;
-}
-
 /*
  * Local variables:
  * indent-tabs-mode: nil
diff --git a/hal.h b/hal.h
index 601f282..5ae2381 100644
--- a/hal.h
+++ b/hal.h
@@ -214,6 +214,12 @@ extern hal_error_t hal_io_wait2(const hal_core_t *core1, const hal_core_t *core2
  * insistence on discarding array bounds information makes
  * non-delimited character arrays problematic unless we wrap them in a
  * structure.
+ *
+ * For performance reasons, we promise that the hal_core_info_t will
+ * be the first element of hal_core_t, so that we can convert between
+ * them using inline functions without completely exposing hal_core_t.
+ * This is icky, but hal_core_base() gets called a lot during I/O, so
+ * it's worth a bit of ick to eliminate some function call overhead.
  */
 
 typedef struct {
@@ -224,9 +230,17 @@ typedef struct {
 
 typedef uint32_t hal_core_lru_t;
 
+static inline const hal_core_info_t *hal_core_info(const hal_core_t *core)
+{
+  return (const hal_core_info_t *) core;
+}
+
+static inline hal_addr_t hal_core_base(const hal_core_t *core)
+{
+  return core == NULL ? 0 : hal_core_info(core)->base;
+}
+
 extern hal_core_t *hal_core_find(const char *name, hal_core_t *core);
-extern const hal_core_info_t *hal_core_info(const hal_core_t *core);
-extern hal_addr_t hal_core_base(const hal_core_t *core);
 extern hal_core_t *hal_core_iterate(hal_core_t *core);
 extern void hal_core_reset_table(void);
 extern hal_error_t hal_core_alloc(const char *name, hal_core_t **core, hal_core_lru_t *pomace);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Commits mailing list