Avoid build errors with -O0 due to assembly
diff --git a/include/mbedtls/bn_mul.h b/include/mbedtls/bn_mul.h
index 5408d41..c59cbc7 100644
--- a/include/mbedtls/bn_mul.h
+++ b/include/mbedtls/bn_mul.h
@@ -563,7 +563,23 @@
 
 #endif /* TriCore */
 
-#if defined(__arm__)
+/*
+ * gcc -O0 by default uses r7 for the frame pointer, so it complains about our
+ * use of r7 below, unless -fomit-frame-pointer is passed. Unfortunately,
+ * passing that option is not easy when building with yotta.
+ *
+ * On the other hand, -fomit-frame-pointer is implied by any -Ox options with
+ * x !=0, which we can detect using __OPTIMIZE__ (which is also defined by
+ * clang and armcc5 under the same conditions).
+ *
+ * So, only use the optimized assembly below for optimized build, which avoids
+ * the build error and is pretty reasonable anyway.
+ */
+#if defined(__GNUC__) && !defined(__OPTIMIZE__)
+#define CANNOT_USE_R7
+#endif
+
+#if defined(__arm__) && !defined(CANNOT_USE_R7)
 
 #if defined(__thumb__) && !defined(__thumb2__)