diff -uNr polarssl-1.2.7/include/polarssl/bn_mul.h polarssl-1.2.7.new/include/polarssl/bn_mul.h --- polarssl-1.2.7/include/polarssl/bn_mul.h 2013-04-13 03:56:17.000000000 -0600 +++ polarssl-1.2.7.new/include/polarssl/bn_mul.h 2013-06-13 16:30:35.000000000 -0600 @@ -548,7 +548,7 @@ #if defined(__arm__) -#if defined(__thumb__) +#if defined(__thumb__) && !defined(__thumb2__) #define MULADDC_INIT \ asm( \ diff -uNr polarssl-1.2.7/library/bignum.c polarssl-1.2.7.new/library/bignum.c --- polarssl-1.2.7/library/bignum.c 2013-04-13 03:56:17.000000000 -0600 +++ polarssl-1.2.7.new/library/bignum.c 2013-06-13 16:30:35.000000000 -0600 @@ -935,7 +935,15 @@ /* * Helper for mpi multiplication */ -static void mpi_mul_hlp( size_t i, t_uint *s, t_uint *d, t_uint b ) +static +#if defined(__APPLE__) && defined(__arm__) +/* + * Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn) + * appears to need this to prevent bad ARM code generation at -O3. + */ +__attribute__ ((noinline)) +#endif +void mpi_mul_hlp( size_t i, t_uint *s, t_uint *d, t_uint b ) { t_uint c = 0, t = 0;