Skip to content

Commit

Permalink
Move ALIGN32 and ALIGN64 into common.h, and fix for clang-cl.exe
Browse files Browse the repository at this point in the history
clang-cl.exe defines __clang__ and _MSC_VER but not __GNUC__, so a clang-
specific guard is needed to get the correct ALIGNxx versions.

Fixes #21914

Change-Id: Icdc047b182ad1ba61c7b1b06a1e951eda1a0c33d

Reviewed-by: Hugo Landau <hlandau@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from #21921)
  • Loading branch information
tom-cosgrove-arm authored and paulidale committed Sep 3, 2023
1 parent 5318c01 commit 12d08fe
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 40 deletions.
11 changes: 2 additions & 9 deletions crypto/bn/rsaz_exp.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
*/

#include <openssl/opensslconf.h>
#include "internal/common.h"
#include "rsaz_exp.h"

#ifndef RSAZ_ENABLED
Expand All @@ -31,16 +32,8 @@ void rsaz_1024_scatter5_avx2(void *tbl, const void *val, int i);
void rsaz_1024_gather5_avx2(void *val, const void *tbl, int i);
void rsaz_1024_red2norm_avx2(void *norm, const void *red);

#if defined(__GNUC__)
# define ALIGN64 __attribute__((aligned(64)))
#elif defined(_MSC_VER)
# define ALIGN64 __declspec(align(64))
#elif defined(__SUNPRO_C)
# define ALIGN64
#if defined(__SUNPRO_C)
# pragma align 64(one,two80)
#else
/* not fatal, might hurt performance a little */
# define ALIGN64
#endif

ALIGN64 static const BN_ULONG one[40] = {
Expand Down
8 changes: 0 additions & 8 deletions crypto/ec/ecp_nistz256.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,6 @@
# define TOBN(hi,lo) ((BN_ULONG)hi<<32|lo)
#endif

#if defined(__GNUC__)
# define ALIGN32 __attribute((aligned(32)))
#elif defined(_MSC_VER)
# define ALIGN32 __declspec(align(32))
#else
# define ALIGN32
#endif

#define ALIGNPTR(p,N) ((unsigned char *)p+N-(size_t)p%N)
#define P256_LIMBS (256/BN_BITS2)

Expand Down
12 changes: 1 addition & 11 deletions crypto/ec/ecp_sm2p256.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,9 @@
#include <openssl/err.h>
#include "crypto/bn.h"
#include "ec_local.h"
#include "internal/common.h"
#include "internal/constant_time.h"

#if defined(__GNUC__)
# define ALIGN32 __attribute((aligned(32)))
# define ALIGN64 __attribute((aligned(64)))
#elif defined(_MSC_VER)
# define ALIGN32 __declspec(align(32))
# define ALIGN64 __declspec(align(64))
#else
# define ALIGN32
# define ALIGN64
#endif

#define P256_LIMBS (256 / BN_BITS2)

#if !defined(OPENSSL_NO_SM2_PRECOMP)
Expand Down
35 changes: 23 additions & 12 deletions include/internal/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,28 @@
# include "internal/e_os.h" /* ossl_inline in many files */
# include "internal/nelem.h"

#if defined(__GNUC__) || defined(__clang__)
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#else
#define likely(x) x
#define unlikely(x) x
#endif
# if defined(__GNUC__) || defined(__clang__)
# define likely(x) __builtin_expect(!!(x), 1)
# define unlikely(x) __builtin_expect(!!(x), 0)
# else
# define likely(x) x
# define unlikely(x) x
# endif

#ifdef NDEBUG
# define ossl_assert(x) ((x) != 0)
#else
# if defined(__GNUC__) || defined(__clang__)
# define ALIGN32 __attribute((aligned(32)))
# define ALIGN64 __attribute((aligned(64)))
# elif defined(_MSC_VER)
# define ALIGN32 __declspec(align(32))
# define ALIGN64 __declspec(align(64))
# else
# define ALIGN32
# define ALIGN64
# endif

# ifdef NDEBUG
# define ossl_assert(x) ((x) != 0)
# else
__owur static ossl_inline int ossl_assert_int(int expr, const char *exprstr,
const char *file, int line)
{
Expand All @@ -38,10 +49,10 @@ __owur static ossl_inline int ossl_assert_int(int expr, const char *exprstr,
return expr;
}

# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \
__FILE__, __LINE__)

#endif
# endif

/* Check if |pre|, which must be a string literal, is a prefix of |str| */
#define HAS_PREFIX(str, pre) (strncmp(str, pre "", sizeof(pre) - 1) == 0)
Expand Down

0 comments on commit 12d08fe

Please sign in to comment.