From fc4f46fa9a04cab01aab75c4c44bf79fe6a5fc26 Mon Sep 17 00:00:00 2001 From: Paul Bakker Date: Mon, 24 Jun 2013 19:23:56 +0200 Subject: [PATCH] Fixed bignum.c and bn_mul.h to support Thumb2 and LLVM compiler (cherry picked from commit 52b845be34a6b5cfa48f34bfbcddd83069d8c0c3) --- include/polarssl/bn_mul.h | 2 +- library/bignum.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/include/polarssl/bn_mul.h b/include/polarssl/bn_mul.h index cffcd6bd4b38..1c2da136ab1d 100644 --- a/include/polarssl/bn_mul.h +++ b/include/polarssl/bn_mul.h @@ -548,7 +548,7 @@ #if defined(__arm__) -#if defined(__thumb__) +#if defined(__thumb__) && !defined(__thumb2__) #define MULADDC_INIT \ asm( \ diff --git a/library/bignum.c b/library/bignum.c index d9845da5d1b2..1422d5026226 100644 --- a/library/bignum.c +++ b/library/bignum.c @@ -934,8 +934,16 @@ int mpi_sub_int( mpi *X, const mpi *A, t_sint b ) /* * 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;