Introduce MBEDTLS_ASSUME
Signed-off-by: Dave Rodgman <dave.rodgman@arm.com>
diff --git a/library/common.h b/library/common.h
index 87fae17..4f4c222 100644
--- a/library/common.h
+++ b/library/common.h
@@ -318,6 +318,21 @@
#define MBEDTLS_UNLIKELY(x) x
#endif
+#if defined(__has_builtin)
+#if __has_builtin(__builtin_assume)
+/* MBEDTLS_ASSUME may be used to provide additional information to the compiler
+ * which can result in smaller code-size. */
+#define MBEDTLS_ASSUME(x) __builtin_assume(x)
+// clang provides __builtin_assume
+#elif __has_builtin(__builtin_unreachable)
+#define MBEDTLS_ASSUME(x) do { if (!(x)) __builtin_unreachable(); } while (0)
+// For gcc, use __builtin_unreachable
+#endif
+#endif
+#if !defined(MBEDTLS_ASSUME)
+#define MBEDTLS_ASSUME(x)
+#endif
+
#if defined(__GNUC__) && !defined(__ARMCC_VERSION) && !defined(__clang__) \
&& !defined(__llvm__) && !defined(__INTEL_COMPILER)
/* Defined if the compiler really is gcc and not clang, etc */